On-chain proof
Exhibits of record
Every artifact below is real and verified on Mantle Sepolia (chainId 5003). No demo state is fabricated — each veto and co-sign lands a real Blocked / CoSigned event.
Exhibit A · Contracts
Exhibit B · ERC-8004 identities (both sides)
Exhibit C · Detection beats (real txs)
Exhibit D · Live onboarding (a fresh agent, wrapped on-chain)
Reproduce it: node --env-file=.env --import tsx scripts/onboard-fresh.ts wraps a new key against the hosted guardian and prints these exact hashes.
What this proves
A reusable guardian primitive
backstop.wrap() adds a veto-only co-signer to any agent in about three lines — the guarding logic is a drop-in, not a fork.
Identity on both sides
ERC-8004 registration for the guardian (agentId 182) and the guarded agent (agentId 183), each verifiable on-chain.
Evidence, not assertion
Every verdict shows the simulated balance and allowance movement that justified it — the delta is the argument.
The save that matters
The intent↔calldata mismatch (#6) is a real drain stopped before a single wei left the wallet — caught by an LLM, blocked on-chain.
In short: a veto-only co-signer with ERC-8004 identity on both sides (agentId 182 + 183), proven wrap() onboarding — a brand-new agent (agentId 216) wrapped and guarded live on-chain, drainer vetoed and legit call co-signed in the same run.