{
  "spec": "chainhelix-proof-v1",
  "updated": "2026-08-04",
  "summary": "Machine verification procedure for the ChainHelix CHX1 attestation stream. Every signal is hashed and committed on chain before its outcome exists. Reveals publish the preimage 72 hours later. Verification requires only this file, the reveal feed, and public RPC. The ChainHelix server is not a trusted party.",
  "attestor": "0xeA56d6499cEF3b63704a99F75D267c04E6e65d79",
  "chains": {
    "commits": {
      "name": "opBNB",
      "chainId": 204,
      "explorer": "https://opbnbscan.com"
    },
    "anchors": {
      "name": "BNB Smart Chain",
      "chainId": 56,
      "explorer": "https://bscscan.com"
    }
  },
  "calldata": {
    "magic": "CHX1",
    "commit": {
      "opcode": "0x01",
      "layout": "ascii CHX1 | 0x01 | seq uint32 big endian | sha256 digest 32 bytes",
      "carrier": "zero value transaction from the attestor address to itself on opBNB"
    },
    "anchor": {
      "opcode": "0x02",
      "layout": "ascii CHX1 | 0x02 | count uint32 BE | firstSeq uint32 BE | lastSeq uint32 BE | merkle root 32 bytes",
      "carrier": "zero value transaction from the attestor address to itself on BNB Smart Chain, daily"
    }
  },
  "record": {
    "canonicalFields": [
      "v",
      "product",
      "seq",
      "ts",
      "chain",
      "direction",
      "price",
      "logOdds",
      "probability",
      "salt"
    ],
    "canonicalization": "JSON object with exactly these fields in exactly this order, serialized with no whitespace (JavaScript JSON.stringify)",
    "hash": "sha256 of the utf8 canonical string, hex encoded"
  },
  "merkle": {
    "leaves": "commit hashes of one anchor period in ascending sequence order",
    "pairing": "sha256 over the concatenation of the two raw 32 byte digests, left then right",
    "odd": "an unpaired node is promoted to the next level unchanged",
    "pathEntry": "object {h, pos} where h is the sibling digest hex and pos is the sibling side, left or right"
  },
  "reveal": {
    "delayHours": 72,
    "endpoints": {
      "index": "https://chainhelix.io/proof_reveals.json",
      "monthly": "https://chainhelix.io/reveals/YYYY-MM.json"
    },
    "gapStatuses": [
      "not_committed",
      "expired",
      "pending"
    ],
    "gapMeaning": "a sequence number that never reached the chain is listed explicitly so the stream stays dense and cherry picking is impossible"
  },
  "verification": [
    "1 fetch the reveal feed and pick any reveal",
    "2 rebuild the canonical string from the ten fields and hash it with sha256. it must equal the hash field",
    "3 fold the merkle path from the leaf hash. the result must equal anchor.root",
    "4 fetch opbnbTx and anchor.bscTx from public RPC. the commit calldata must contain the leaf hash under the CHX1 commit layout and the anchor calldata must contain the root under the CHX1 anchor layout. both transactions must be from the attestor address",
    "5 compare the opBNB block timestamp of the commit with the signal ts and its outcome horizons. the commit precedes the outcome. outcomes are recomputable from public price data using ts chain direction and price"
  ],
  "completeness": "sequence numbers are dense from 1. after 72 hours every sequence number appears in the feed either as a reveal or as an explicit gap. a missing number is a defect of the stream and disproves it",
  "erc8004": {
    "identityRegistry": "eip155:56:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
    "agentId": 251399,
    "owner": "0xD4Fa54a346A7788BBc32c2229008b4305Ab7E3fE",
    "registrationFile": "https://chainhelix.io/agent-registration.json",
    "status": "registered"
  }
}
