Demo run mwfgi0ij · 2026-11-13 20:55:51 UTC
37 of 37 recorded transactions match the chain
This server asked an archival NEAR node for every hash the run recorded and compared success or failure with what the run claimed. Expected failures (attacks, a false claim, an early close) count as a match when the chain shows them failing. Steps without a hash were refused by NEAR before execution: a function-call key that tries a deposit, another contract or a transfer never becomes a transaction. Recorded assertions: 34/34 passed. This run used the superseded contract bound-v1.boundproto-nh26.testnet (a certificate-id aliasing bug, fixed in bound-v2), so its certificates #3 and #4 are not on the contract this page reads. Its transactions still check out.
Act 1. Actors and play money
- mint 1330 mUSDC to bound-operator-mwfgi0ij.testnetmint on usdc.boundproto-nh26.testnet · succeeded on chain · 9VBGR51k...F1nB
- mint 600 mUSDC to bound-auditor-mwfgi0ij.testnetmint on usdc.boundproto-nh26.testnet · succeeded on chain · CDWiPrbc...cEYg
- mint 50 mUSDC to bound-challenger-mwfgi0ij.testnetmint on usdc.boundproto-nh26.testnet · succeeded on chain · 7npYhJhQ...zpiy
- mint 10 mUSDC to bound-service-mwfgi0ij.testnetmint on usdc.boundproto-nh26.testnet · succeeded on chain · BiZzUZ6i...cNAb
- bound-operator-mwfgi0ij.testnet storage_deposit on bound (0.01 NEAR)storage_deposit on bound-v1.boundproto-nh26.testnet · succeeded on chain · DJbn4BBx...KqQx
- bound-auditor-mwfgi0ij.testnet storage_deposit on bound (0.01 NEAR)storage_deposit on bound-v1.boundproto-nh26.testnet · succeeded on chain · 855Ufzd1...D82M
- bound-challenger-mwfgi0ij.testnet storage_deposit on bound (0.01 NEAR)storage_deposit on bound-v1.boundproto-nh26.testnet · succeeded on chain · 3R8aEBp5...tC5T
- bound-service-mwfgi0ij.testnet storage_deposit on bound (0.01 NEAR)storage_deposit on bound-v1.boundproto-nh26.testnet · succeeded on chain · 26DrN8za...vARt
Act 2. Certificate published, funded and attested
- auditor stakes 600 via ft_transfer_callft_transfer_call on usdc.boundproto-nh26.testnet · succeeded on chain · 7rbg3mRX...Ha2m
- operator deposits 1300 via ft_transfer_callft_transfer_call on usdc.boundproto-nh26.testnet · succeeded on chain · 556Ynf1h...dkAE
- challenger deposits 50ft_transfer_call on usdc.boundproto-nh26.testnet · succeeded on chain · 9fgKQdvn...DvXC
- service deposits 10 (for its claim bond)ft_transfer_call on usdc.boundproto-nh26.testnet · succeeded on chain · 6jpam3mY...zwpE
- operator publishes cert: bound 150, reserve 100, float cap 20, allowlist [service], premium 3, expires +1hpublish on bound-v1.boundproto-nh26.testnet · succeeded on chain · 7ssazB48...M9TZ
- agent accepts (its full-access key, the last time it is used)accept on bound-v1.boundproto-nh26.testnet · succeeded on chain · BxyoUUv4...Ludx
- operator funds reserve 100fund_reserve on bound-v1.boundproto-nh26.testnet · succeeded on chain · J3a3xsEj...M6LH
- operator funds float 20fund_float on bound-v1.boundproto-nh26.testnet · succeeded on chain · Ga9Ntca7...RJDy
- auditor attests, locking 200 of its stake behind this certattest on bound-v1.boundproto-nh26.testnet · succeeded on chain · 8Z6Uh557...ijhr
Assertions checked by the run
- auditor free stakeexpected 600, got 600 ok
- verify statusexpected Verified, got Verified ok
- premium: auditor balance +2.7expected 2.7, got 2.7 ok
- premium: treasury +0.3expected 0.3, got 0.3 ok
- operator balance 1300 - 3 - 100 - 20expected 1177, got 1177 ok
Act 3. Agent confined to a function-call key; pays through the meter
- agent adds a function-call key: receiver bound-v1.boundproto-nh26.testnet, methods ["pay"], allowance 0.25 NEAR (gas only)AddKey on bound-agent-mwfgi0ij.testnet · succeeded on chain · EuwrpdTL...JF9m
- agent DELETES its full-access keyDeleteKey on bound-agent-mwfgi0ij.testnet · succeeded on chain · AsFEKopR...VQx6
- agent pays service 5 through bound pay (the function-call key, no deposit)pay on bound-v1.boundproto-nh26.testnet · succeeded on chain · 3vsd4G8L...9hrr
Assertions checked by the run
- agent has exactly one keyexpected 1, got 1 ok
- that key is FunctionCall scoped to the bound contractexpected bound-v1.boundproto-nh26.testnet, got bound-v1.boundproto-nh26.testnet ok
- its only method is payexpected ["pay"], got ["pay"] ok
- gate refuses an uncertified agentexpected 403, got 403 ok
- gate serves the prepaid requestexpected 200, got 200 ok
- gate refuses a replayed payment hashexpected 409, got 409 ok
- gate serves the certified agent on creditexpected 200, got 200 ok
Act 4. Scripted attack: what a hijacked agent's key can try, refused by the contract or by NEAR itself
- agent pays 50 to service (float is 15)pay on bound-v1.boundproto-nh26.testnet · failed on chain, as intended · 3Va1wncC...JQbnFloatExceeded: amount 50000000 > float 15000000
- agent pays 10 to bound-attacker-mwfgi0ij.testnetpay on bound-v1.boundproto-nh26.testnet · failed on chain, as intended · Cg8NqDng...YqDYRecipientNotAllowed: bound-attacker-mwfgi0ij.testnet is not on the operator allowlist
- same key calls ft_transfer on the tokenft_transfer on usdc.boundproto-nh26.testnet · refused by NEAR before execution, no transaction existsAccessKeyDepositWithFunctionCallActionError: Deposit is not allowed with function call
- same key calls mint on the token (no deposit needed)mint on usdc.boundproto-nh26.testnet · refused by NEAR before execution, no transaction existsAccessKeyReceiverMismatchActionError: Access key receiver bound-v1.boundproto-nh26.testnet does not match transaction receiver usdc.boundproto-nh26.testnet
- same key calls bound withdraw (needs 1 yocto)withdraw on bound-v1.boundproto-nh26.testnet · refused by NEAR before execution, no transaction existsAccessKeyDepositWithFunctionCallActionError: Deposit is not allowed with function call
- same key sends 0.01 NEAR to the attackerTransfer on bound-attacker-mwfgi0ij.testnet · refused by NEAR before execution, no transaction existsAccessKeyRequiresFullAccessActionError: Access key requires full access
- operator halts the certhalt on bound-v1.boundproto-nh26.testnet · succeeded on chain · 3QZcWWjG...CHx4
- agent pays 1 to service while haltedpay on bound-v1.boundproto-nh26.testnet · failed on chain, as intended · Hm7zjTU7...G1M8CertHalted: the operator halted this certificate
Act 5. False trustless claim rejected in the same transaction
- challenger files InsufficientReserve (bond 10) against a fully funded certchallenge on bound-v1.boundproto-nh26.testnet · succeeded on chain · o5iPYqfe...oDoN
Assertions checked by the run
- verdictexpected Rejected, got Rejected ok
- bond forfeited to treasury (+10)expected 10, got 10 ok
- challenger balance 50 - 10expected 40, got 40 ok
Act 6. Harm claim, arbiter verdict, claim window
- service files Harm 120 citing near/evidence/gate-mwfgi0ij-invoices.json#inv-1 (bond 10)challenge on bound-v1.boundproto-nh26.testnet · succeeded on chain · 2ogFVYhn...gZ3i
- anyone tries to close the window right awayclose_window on bound-v1.boundproto-nh26.testnet · failed on chain, as intended · 2h21JTec...Y6vrWindowOpen: closes at 1794603574 (now 1794603487)
- arbiter resolves: proven, harm 120resolve_by_arbiter on bound-v1.boundproto-nh26.testnet · succeeded on chain · 3itWpS5a...3wdv
- operator resumes (so the next refusal is the freeze, not the halt)resume on bound-v1.boundproto-nh26.testnet · succeeded on chain · EeCsd99w...ScZt
- agent pays 1 while the claim window is openpay on bound-v1.boundproto-nh26.testnet · failed on chain, as intended · EXDJMuCT...DRhBCertFrozen: a claim window is open; payments are suspended
Assertions checked by the run
- verify statusexpected Challenged, got Challenged ok
Act 7. Settlement waterfall and victim withdrawal
- challenger (anyone) calls close_windowclose_window on bound-v1.boundproto-nh26.testnet · succeeded on chain · 7D1YhriC...8nqY
- service withdraws 115 to its token accountwithdraw on bound-v1.boundproto-nh26.testnet · succeeded on chain · 86qcLYCg...aQhz
Assertions checked by the run
- cert statusexpected Invalid, got Invalid ok
- payable = min(120, 100 + 200)expected 120, got 120 ok
- victim paid from the reserveexpected 100, got 100 ok
- challenger fee = min(12, reserve left 0)expected 0, got 0 ok
- auditor slashed only the 20 the reserve could not coverexpected 20, got 20 ok
- rest of the allocation back to the auditorexpected 180, got 180 ok
- treasury +20 (the slash)expected 20, got 20 ok
- treasury over the run: 0.3 premium + 10 bond + 20 slashexpected 30.3, got 30.3 ok
- auditor free stake 400 + 180expected 580, got 580 ok
- auditor allocated stakeexpected 0, got 0 ok
- unspent float 15 back to the operatorexpected 15, got 15 ok
- service bound balance: 5 prepaid + 100 compensation + 10 bond backexpected 115, got 115 ok
- withdraw callback reports successexpected true, got true ok
- service ft_balance_of on the token rose by 115expected 115, got 115 ok
- service bound balance after withdrawexpected 0, got 0 ok
- gate refuses the settled agentexpected 403, got 403 ok
Act 8. Second certificate left Verified for judging
- operator publishes cert 2 for agent2: bound 50, reserve 30, float cap 10, premium 1publish on bound-v1.boundproto-nh26.testnet · succeeded on chain · 5CpXv7BF...tU2w
- agent2 acceptsaccept on bound-v1.boundproto-nh26.testnet · succeeded on chain · CRcZrZbJ...yLba
- operator funds reserve 30 (ft_transfer_call with the reserve action)ft_transfer_call on usdc.boundproto-nh26.testnet · succeeded on chain · 568C2YFV...e3TZ
- operator funds float 10fund_float on bound-v1.boundproto-nh26.testnet · succeeded on chain · Ctm8ZxZY...U9av
- auditor attests cert 2 with 100attest on bound-v1.boundproto-nh26.testnet · succeeded on chain · GyMC9FNH...8do6
Assertions checked by the run
- cert 2 statusexpected Verified, got Verified ok
- gate now asks agent2 to pay instead of refusingexpected 402, got 402 ok