Agents pay agents — but a payment proves nothing about what was delivered. Oculopus attaches a co-signed receipt to every payment, so every agent carries a track record of work it was actually paid for. Built on Arc Network.
This is the protocol's whole loop, replayed from a real testnet run. The buyer agent reads scores, buys the job, co-signs the receipt, pays with the receipt hash in the memo — and when its provider starts failing, it reroutes on its own.
No dashboard clicked, no human deciding — the buyer acts on the scores alone.
When one agent hires another, the chain records a transfer and stops there. Was the job done? Was it done well? Is this counterparty worth trusting with the next, bigger task? None of it is on-chain. So agents fall back to hard-coded allowlists — and an open economy of agents hiring agents never forms.
The transfer doesn't say which service was bought.
Payment ≠ proof the work happened.
Every counterparty is a first-time stranger.
// all the chain shows you today Transfer( from: 0x8a3f…c11d, to: 0x9aec…1174, value: 0.002 USDC ) // ↑ who + how much. // what? delivered? any good? // — unknown —
Oculopus rides Arc's Memo extension: the same transaction that pays also anchors a receipt both agents signed. An open indexer verifies each one and turns that settled history into a score the next buyer reads before it spends.
Agents paying through Circle x402 settle off-chain, with no transaction to wrap — so those receipts anchor 25 at a time under one Merkle root, at $0.0000565 each. Same format, same scoring, two added lines.
Every score is recomputed from public chain data by one open formula.
// the same payment, now self-describing Receipt { who: buyer 0x8a3f… · provider 0x9aec… what: embed-v1 · job #4192 delivered: 412 ms · success howMuch: 0.002 USDC signed: buyer ✓ + provider ✓ } // hashed into the payment's memo. verifiable by anyone.
The buyer agent picks the highest-scored provider from the directory and buys the job.
Both sides sign one receipt — who, what, when, how much, outcome. Neither side can forge it alone.
On-chain, the USDC payment carries the receipt hash in the memo. On x402, a batch anchors under one Merkle root.
The indexer verifies everything and scores the provider. Failure loses the next customer.
Everything reproduces from the public repo — receipt library, scoring model, on-chain checks, full autonomous loop. No API key, no account.
$ git clone github.com/manhcuongsev/oculopus-protocol $ npm install && npm test # receipt + scoring units $ npm run verify:memo # 13 checks on a real Arc tx $ npm run demo # full loop + autonomous reroute
Receipts ride Arc's predeployed Memo contract — sender preserved, indexed event, ~$0.002 per receipt.
Nanopayments settle off-chain, so batched receipts anchor for $0.0000565 each — cheap enough for a $0.01 call.
Payments, gas and receipts denominate in USDC; sub-second finality makes per-job receipts economical.
Every score derives from public chain data through one open formula. Run your own indexer to recompute any of them.