How the pieces wire together.

01

The loom — five stages, two lanes

TxLINE / TxODDSrecorded fixtureoriginates sports datacommits Merkle roots on Solanaprogram 9ExbZjAapQww1vfcisDmrngPin…Solana adaptersimulated legCPI into TxOracle validate_stat_v2emits only on TRUEemitter 0x000044ba29…00000000Wormholedev guardian set19 guardians sign the message13-of-19 quorumVAA v1 · secp256k1 (real math)Chainlink CRElocal simulationliveness: heartbeat, retries, VAA workflows/cre-* (no deployed DON)Base SepoliaREALverifies VAA, stores outcome, dualchain id 84532ORIGINSETTLEMENT — REALONE OUTCOME, ETCHED ACROSS FIVE STAGES

Two lanes feed the registry: Level 3 (RPC-quorum fast lane, provisional) and Level 4 (Wormhole-verified proof lane). Settlement requires both to derive the same attestation id.

02

Deployed contracts — Base Sepolia

Contract ledger

REAL, verify on BaseScan
contractaddressrole
FinalityRegistry0xac0b2f8250f16e076e2cfcf5e79243be0198c64fsingle source of truth: Unknown → CREAttested / WormholeVerified → DualFinalized; freezes on conflict
CRELevel3Receiver0xa2166ea27f2ce4029e3426f2d3c84fd7151cb05ffast-lane (Level 3) attestation intake — provisional
WormholeOutcomeReceiver0x58512d54b8fc32bc6f03800416c93ab08a336f60proof-lane (Level 4) VAA intake — permissionless submitVaa
WormholeCore (dev guardian set)0xaac43563eca9a2a5ca989935f909588b08655ab4VAA v1 parse + ecrecover 13-of-19 quorum verification
DemoPredictionMarket0x84edaa2144931606db5240993771738f3ad97bbaconsumer: settles only on DualFinalized
registered emitter
0x000044ba2902cccc6eee24233bc4173704b97b786a006b7bf66d25fc00000000
guardian quorum
13 of 19
forwarder (demo EOA)
0x02c4d76d0ce17c6a81cd44c810167d79d99267c7
03

Consume it from any Base contract

(bool finalized, uint8 result) =
    proofline.finalOutcome(fixtureId);

require(finalized, "Outcome not finalized");
// result: 1 = HOME, 2 = DRAW, 3 = AWAY

Proofline is a reusable cross-chain sports-finality primitive; the demo market is one consumer, not the product. Demo fixture: 982341 synthetic fixture