Reference

Addresses, endpoints, response shapes. Numbers are read at build time from the actual deployment artifact where available.

Contract addresses

ContractAddressNetwork
PropMarketHookFactory0x080627e92182cb87911a7e512379ced1ecdd3ab5X Layer 196
USDT00x779Ded0c9e1022225f8E0630b35a9b54bE713736X Layer 196
v4 PoolManager0x360e68faccca8ca495c1b759fd9eee466db9fb32X Layer 196

Chain config

GET /api/health

Cheap liveness probe used by Railway and the recording playbook. No on-chain reads beyond a single getBlockNumber().

response shape
{
  "status":    "ok" | "partial",
  "version":   string,                  // git SHA when set at deploy
  "chainId":   196,
  "factory":   string | null,           // factory address or null pre-broadcast
  "relayer":   "configured" | "missing",
  "appUrl":    string,
  "timestamp": string                   // ISO-8601
}

GET /api/status

The judge-verifiable surface that /status renders. Aggregates the live agent /health, the on-chain factory state, and recent activity. Cached: agent leg 10 s, on-chain leg 30 s.

response shape
{
  "generatedAt":         string,        // ISO-8601
  "factory":             string | null,
  "network":             "xlayer-mainnet",
  "chainId":             196,
  "deployedAtBlock":     string | null, // bigint as string
  "deployedAtISO":       string | null,

  "agent":               AgentHealth,   // see below
  "lastTickAgeSeconds":  number | null, // null if agent not online

  "activity": {
    "marketsCreated":  number,
    "stakesPlaced":    number | null,
    "resolutions":     number | null,
    "volumeMicros":    string         // bigint as string
  },
  "recentMarkets": Array<{
    "marketAddress": string,
    "agent":         string,
    "commitHash":    string,
    "blockNumber":   string           // bigint as string
  }>
}

// AgentHealth (discriminated union)
type AgentHealth =
  | { status: "online";  raw: { status: string; startedAt: string;
                                fixtureId: number | null;
                                personasActive: number;
                                personaSlugs: string[] } }
  | { status: "offline"; reason: string }
  | { status: "not-configured" };

Links