On devnet, accounts are durable but transaction history is not. Devnet prunes signatures after roughly two weeks, so any tx link here eventually 404s on Explorer while the accounts it created stay queryable forever. The durable, always-checkable evidence is therefore: the program account, the settled market accounts, and the permissionless
reverifycommand — all listed below, all live right now. Signatures are listed as a same-day audit trail and were re-minted on 2026-07-19.
| Program | Address |
|---|---|
| var_settlement | AepSNpDzMUdBgjxA9irxxL7NTQHxXtDVq6rnqq17Lxk |
| mock_txoracle (test only) | 85KwDRzyZeG8wAXVCZo2CKTVor3qVcyhq7vk2yAzBJMw |
| Txoracle (real Tx LINE, devnet) | 6pW64gN1s2uqjHkn1unFeEjAwJkPGHoppGvS715wyP2J |
- Binary:
target/deploy/var_settlement.so, 355,512 bytes (347 KiB). - Upgrade authority:
BExXP4aGnZRq3PMw4vpY7KHgdeGPCfogao66CpsTMUjf
mock_txoraclestands in for Tx LINE'sTxoracle::validate_stat(always atteststrue) so the full lifecycle can run on devnet without consuming the live feed. Never on mainnet, and not used in the real-feed settlement below. A real market passes the real Tx LINE program id astxoracle_program.
The full real path, no mocks: tests-devnet/txline-activate.ts (4-step free World Cup activation) +
tests-devnet/txline-settle.ts (settle against the real Txoracle).
-
Settled market (durable evidence — open this):
GaiXEuSBb3spjoptxHCoyScycN4sCy164jCF3jT9v8T3— statusSettled,fixture_id18192996, receipt scoreline 2–3, outcome Away. -
Anyone can re-derive it, from any wallet:
cd tests-devnet && bun install && bun run reverify.ts GaiXEuSBb3spjoptxHCoyScycN4sCy164jCF3jT9v8T3→reverify (stranger wallet) -> true. Verified fromWQMF7mLsD4CJ5UKCGHJFCMCdjce593xtjSnRi78gmv1, a wallet that never created, funded, or resolved this market. -
Fixture 18192996 (real): authenticated score home 2 – 3 away via live
stat-validationMerkle proofs (base keys 1/2, period 4). Daily root PDACMtVGDyWsZ4u3yeYeyC9yxNzzyvwco6Jgtd9ubRJWCGV(epoch day 20640) exists on devnet, 9232 bytes. -
Two-step resolve (both proofs won't fit one 1232-byte tx), 2026-07-19 run:
Step Signature subscribe(1, 4)— free World Cup activation4ZFya1o9yPCXMCdjDJXTEoHcsYChrhZQDNFYdnPrzPRRiwhENkFQ1yheRcw5PrAJx8GatZT1kSoqxakmdE2rqMDQattest_home— CPI authenticates home goalsxuUExMAXeovpdcwMXegQMcpd49mampkqxWNdQze7Lf7ZzuKV1GbiyGppCSA1YbEXtD45byjF6ZS8zTAchba5MbJresolve— CPI authenticates away goals, rulebook resolves3uSfesCgBNN8qAjM2CwLjtCVPquaE3cUk2qkZQc7ndnKFbkStaqs26HNyZtPMFa22ZFj1ucuVSda1TNAeuwHxGYD -
Result: receipt outcome Away (2 < 3),
net98 USDC of a 100 USDC pot (2% fee), winning (Away) pool paid pro-rata — final balances 60 / 138. Needs a 1.4M compute-unit budget (Merkle verification is CU-heavy).
Re-run: bun run txline-activate.ts && bun run txline-settle.ts 18192996 770, then
bun run reverify.ts <market-from-the-settle-output>.
Full lifecycle on devnet with real transactions and real SPL-token transfers, against the mock
Txoracle (this test exercises the account/escrow/claim machinery; the real-feed authentication is
the section above): create_market → deposit(Home 40, Away 60) → attest_home → resolve(Home 2-0) → reverify → claim ×2. 2026-07-19 run:
| Step | Signature |
|---|---|
| create_market | 61VQBCrUjX8hJThDAaozA4hsc3HYxv2Ds6Mj8ByTuHQynyRW49GX3j9ZAZgQXFk2HnXncoL9tCR85SuigvVMpmgg |
| deposit A → Home 40 | 36axruEFj7kJtk65hyTXCU6zmHJSdriLgWYKA1zVq56qiEXq9TQR25DktMJi8cwz2dWFQDfKu9h2ULNQhyBndxaa |
| deposit B → Away 60 | 47udgmKG2CzeeCNTAcKAQ3Qsr1BZJurapNH5cVcMu1sJv94BrrjoZyAapKbQMNMxrDF2V3imny4BW6kW1hhDtW1v |
| attest_home | 67SSLyz2hLa168QAhwb3Cdpir2ewCCyFya1zCYx4Pr8WvgmF6bV3CKh4779k3abuVLhALuFRUD2YDmNmGXD1VxG1 |
| resolve (Home wins) | 21QqGESoPhHSrDjt4ZEEEM4CkiLK2UmZAEDJDaBTirEf3asMmcMF6wLqdBwkdjSgcqqcqMbmQSPSnqVmSmdutXod |
| A claims (winner) | 5A8jAT6D5FC31Mu23R9JmD3px3FJ3DzsAhbkxf5munskCrBnuGvXoxqhYsCbKJaZKNiRWcPTXabkB3ygd2A7w63n |
| B claims (loser) | 5k7asqoYbWXaaconaKDHxhxnmkG4oVd8Fprdo9fSrDm6xQeQLc8XQE7FjTSV924BJVt6BfpuEYNi9WEPrgVvzYb2 |
Result: receipt outcome Home, reverify() -> true, final balances userA=158, userB=40,
vault=2 (the 2% protocol fee) — exactly the settlement math the rulebook specifies. Exit 0.
Re-run: cd tests-devnet && bun install && bun run smoke.ts (uses a fresh fixture id each run).
Mainnet (real-time L12) run. Also note fixture 18192996's goal counts are Merkle-authenticated
against the live feed, while its Completed match-status code is supplied by the resolver — the
proven rulebook fail-closes every non-Completed status to Refund (INV-1), so the downside is
bounded to a refund, but binding status to an authenticated feed field is the gap to close before
mainnet (docs/AUDIT.md).