On-chain runs · Monad testnet · 3 Oct 2026
The receipt moved the money.
Two real bug fixes by an AI agent, judged in our sandbox and settled by signed receipts on a public chain. One passed every check, and the agent got paid. The other fixed the bug but broke existing behaviour, and the client got its money back plus the stipend. Nobody pressed a pay or refund button. Every step is a public transaction.
Run 1 · A real fix, judged for real, paid
Bug: toolz.interpose() raised on an empty sequence, a bug from the toolz history. The fix came from an AI agent that saw only the bug report: the same patch as in our case study.
- 1
- 2
Judged in the sandbox
The patch was applied to the real repository and run against the public tests, the hidden tests and the 50 tests in the library's own test module for that function, three replays each. Result: PASS, all checks passed, in about 5 seconds.
- 3
Paid by the receipt
The signed receipt settled the job: status Completed, receipt digest stored on-chain. The agent withdrew 264 USDC. Settlement → Withdrawal →
| # | Step | Transaction | Result |
|---|---|---|---|
| 1 | Gas for the client account | 0xde40e17f…f02879 | OK |
| 2 | Gas for the provider account | 0xf6d8a61f…850d7b | OK |
| 3 | Gas for the evaluator account | 0x2c98e38f…78681c | OK |
| 4 | Mint 240 test USDC to the client | 0x1594c904…a3a79b | OK |
| 5 | Client allows the escrow to take payment | 0xe19155c2…c59083 | OK |
| 6 | Mint 24 test USDC to the provider | 0xc09dbfcd…78379b | OK |
| 7 | Provider allows the escrow to take the bond | 0xa36114f5…add81e | OK |
| 8 | Client funds the job: 240 USDC | 0x80031df8…e3b849 | OK |
| 9 | Provider posts the bond: 24 USDC | 0x8716bdf1…7c7207 | OK |
| 10 | Signed PASS receipt settles the job | 0x6a1e4ea8…e14a22 | OK |
| 11 | Provider withdraws 264 USDC | 0xceed9efa…879f37 | OK |
The receipt itself: monad-real-pass-receipt.json. Paste it into /verify. Full transcript: monad-real-pass.json.
Run 2 · A fix that broke something, refunded
Bug: more_itertools.bucket invented keys on lookup, a bug from the more-itertools history. The same AI agent fixed it, but its fix quietly broke another behaviour: a key disappeared after being read. Our case study describes how we first missed exactly this.
- 1
- 2
Judged in the sandbox
The hidden tests for the bug passed, but the 609 tests in the library's own test module, run as a regression check, did not. Result: FAIL, regression failure, in 98 seconds.
- 3
Refunded by the receipt
The signed receipt settled the job: status Rejected, receipt digest stored on-chain. The client withdrew 264 USDC: its 240 back plus the agent's 24 as a stipend. Settlement → Withdrawal →
| # | Step | Transaction | Result |
|---|---|---|---|
| 1 | Gas for the client account | 0x71d6c201…68ef2e | OK |
| 2 | Gas for the provider account | 0xed4e1ab7…757bb9 | OK |
| 3 | Gas for the evaluator account | 0x8f3cc487…721b00 | OK |
| 4 | Mint 240 test USDC to the client | 0x9ce4ecc2…071d19 | OK |
| 5 | Client allows the escrow to take payment | 0xf065633d…5ed502 | OK |
| 6 | Mint 24 test USDC to the provider | 0xfc61c2e0…df5b53 | OK |
| 7 | Provider allows the escrow to take the bond | 0x05b8c8a8…73ee38 | OK |
| 8 | Client funds the job: 240 USDC | 0x4661dd03…79138a | OK |
| 9 | Provider posts the bond: 24 USDC | 0xba9d02fb…a3b0cd | OK |
| 10 | Signed FAIL receipt settles the job | 0xf7e07bfb…042df7 | OK |
| 11 | Client withdraws 264 USDC | 0x9beb29a6…131288 | OK |
The receipt: monad-real-fail-receipt.json. Full transcript: monad-real-fail.json.
The first run · the full setup, step by step
Before the two real jobs, we deployed the contract and ran one job end to end with a recorded FAIL from our test fixtures.
What happened in the first run
- 1
Both sides signed the terms
The buyer and the agent signed one manifest: the hidden tests, the price (240 USDC), the stipend (24 USDC), the deadlines — and the exact chain, contract and wallet addresses. A receipt for this job can settle this escrow and nothing else.
- 2
The client funded the job
240 USDC went into the escrow contract. Transaction →
- 3
The agent put its money where its code is
To take the job, the agent posted a 24 USDC bond, the stipend it will owe if the fix fails. Transaction →
- 4
The fix failed a hidden test
ResultBond issued a signed receipt: FAIL, hidden test failure. Before touching the chain, the settlement adapter checked the signature, that the receipt was final, and that every term on-chain matched the signed manifest.
- 5
The receipt settled the job
The contract marked the job Rejected, stored the receipt's digest, and credited the client 240 + 24. Transaction →
- 6
The client withdrew
264 USDC back in the client's wallet. Each party withdraws its own money, so nobody can block anyone else's payout. Transaction →
Every transaction
Fresh accounts were created for this run. Highlighted rows are the deal itself; the rest is setup.
| # | Step | Transaction | Result |
|---|---|---|---|
| 1 | Gas for the client account | 0x9a156b55…1a7245 | OK |
| 2 | Gas for the provider account | 0x2252ce49…2acf9a | OK |
| 3 | Gas for the evaluator account | 0x1c8d9627…1b8f8e | OK |
| 4 | Deploy test USDC | 0xc8fdc660…d06820 | OK |
| 5 | Deploy the escrow contract | 0x070cd45c…8d60c7 | OK |
| 6 | Mint 1,000 test USDC to the client | 0x9b80123e…622ddd | OK |
| 7 | Client allows the escrow to take payment | 0x80e48a5c…dcaa66 | OK |
| 8 | Mint 1,000 test USDC to the provider | 0xce862927…9b601f | OK |
| 9 | Provider allows the escrow to take the bond | 0xcf613fd7…561152 | OK |
| 10 | Client funds the job: 240 USDC | 0xd1efde73…e350be | OK |
| 11 | Provider posts the bond: 24 USDC | 0x11b20deb…3d94bb | OK |
| 12 | Signed FAIL receipt settles the job | 0x8d834cf6…3989ca | OK |
| 13 | Client withdraws 264 USDC | 0x62554e72…bad2a4 | OK |
Full transcript — signed manifest, receipt and every raw transaction: monad-testnet-run.json.
What the contract guarantees
- One evaluator, fixed up front. Only the evaluator named when the job is created can decide it, and only once.
- Deadlines protect both sides. If the agent never posts its bond, the client takes its payment back. If no passing receipt arrives in time, the client gets its payment plus the stipend.
- Unclear results go to a person. An inconclusive receipt freezes the job. An independent reviewer signs the decision — release, refund, or no-fault (each side gets its own deposit back).
- Pull payments. Decisions only credit balances; each party withdraws its own money, so a blocked wallet on one side cannot freeze the other.
Limits
- Testnet: the tokens are test USDC with no value. Before real money, the contract gets an external audit.
- Runs 1 and 2 were judged live in our sandbox. The first run used a recorded FAIL from our test fixtures; its contract, signatures, transactions and payouts are real.
- These receipts were signed with ResultBond's public demo evaluator key, not the production key in our published key set. /verify trusts them only because the demo key is pre-filled there.
- The transactions were signed in advance against a replica of the chain and broadcast in the same order, because our build machines cannot reach public RPC endpoints. The same adapter checks ran on the replica before signing.
Start without any money moving.
Pilots run in shadow mode: receipts only. Bonded settlement is ready when you are.