ERC-8196 · ONLY PUBLIC IMPLEMENTATION · BASE MAINNET

The standard is Final.
Nobody implemented it.

ERC-8196 (AI Agent Authenticated Wallet) moved to Final in July 2026. It ships with no reference implementation, no test cases, and a repository link that 404s. This is a complete implementation of it — nine on-chain checks per action, deployed on Base mainnet, MIT licensed.

9
contract-level checks
inside executeAction
0
other public implementations
GitHub search returns none
100
default risk score for
unknown agents = deny
8453
Base mainnet
contracts deployed
01 · A standard with nothing behind it

Every line below is reproducible in five minutes

This is not our opinion. Run the checks yourself — and please do, because these will stop being true the day someone fills the gap.

ethereum/ERCs → assets/erc-8196/ 404
assets/erc-8126/ (control check) 200 — path syntax is fine
EIP-8196 body → Reference Implementation section absent
EIP-8196 body → Test Cases section absent
erc8196.ai → header REPOSITORY link 404
Cybercentry/erc8196-contracts (per site) 404
GitHub search "erc8196 OR erc-8196" total_count = 0
GitHub search "IAIAgentAuthenticatedWallet" 0 results
this repo → full implementation + 4 specs ✓ live on Base mainnet
Verified 2026-08-30. The spec's own section list is: Abstract, Motivation, Specification, Rationale, Backwards Compatibility, Security Considerations, Copyright — there is no Reference Implementation and no Test Cases. Which means the operative semantics of this standard get decided by whoever implements it first and publishes test vectors. We would rather that be a conversation than a fait accompli.
02 · What is actually enforced

Nine checks per action, in this order

Not a signer refusing to sign. Not a gateway dropping a request. The contract reverts. We cannot move your funds, and our server going down does not change the rules.

Policy exists and is active revoked authority dies immediately
Time window validAfter / validUntil — expiry is automatic
Per-transaction cap maxValuePerTx
Risk-score gate calls the ERC-8126 score, rejects above threshold;unknown agent returns 100 = max risk = deny
Action allowlist the action label is resolved from the calldata selector — so the signed action cannot diverge from the actual call
Blocklist before allowlist a blocked target cannot be rescued by an allowlist entry
EIP-712 signature recovery recovered address must equal the agent registered in the policy
Rolling daily budget maxValuePerDay, accumulated per day
Nonce replay protection an authorization cannot be executed twice
contracts/TrustLeaseController.sol · executeAction() · order is priority
03 · Limits vs. evidence

"Give the agent a spending cap" is no longer a differentiator

Conceding that up front. MetaMask Agent Wallet went GA on 2026-08-06 with daily caps, threat scanning and $10,000/month transaction protection. Safe's 2-of-3 human approval has run in production for years. Cobo has approvals across Web, Mobile, Telegram and Discord. Stripe Link requires human approval on every charge. We are not competing for those rows.

Capability Wallets / platforms
MetaMask · Safe · Cobo · Turnkey
Receipt standards
LF TRACE · IETF draft
This implementation
Ex-ante caps / allowlists
Human approval on violation
Tamper-evident recordself-held logs
Enforced at the contract, not by a signer
Record and settlement in one atomic call
Same policy engine for non-payment actionspartial
The unoccupied position is the combination of the last three rows: the approval decision, the policy enforcement, and the record nobody can quietly edit, landing in the same on-chain execution. Cobo has approvals and audit, but writes and holds its own logs. TRACE has verifiable receipts but does not move money. Crossmint has on-chain enforcement but neither approvals nor receipts.
04 · Known gaps

What this implementation does not yet do

A reference implementation is only worth anything if it is trustworthy, and it is only trustworthy if it does not hide things. These four are the current state. We will not market any of them as features until they are fixed.

Off-chain receipts are HMAC, not public-key signatures

lib/receipt-signature.mjs uses a shared secret — anyone who can verify can also forge. So the on-chain hash chain can be called independently recomputable; off-chain receipts can only be called tamper-evident. Moving to public-key signing.

An approved request does not execute itself

Policy → pending → human decision → signed receipt is real and persists. But there is no code path from the approval store to the contract yet; execution is triggered manually.

Budget amounts are self-reported by the caller

In the vault, the transfer amount and the declared USD value are two independent parameters with no price oracle between them. Budget enforcement currently depends on honest reporting. Binding the two is the next contract change.

The risk oracle is still a mock

The gating logic is real, including deny-by-default for unknown agents, but it is wired to a 17-line MockRiskOracle.sol. As far as we can tell, real ERC-8126 scores are available from exactly one closed-source paid API today.

One spec note worth surfacing: minVerificationScore is named like a floor but is semantically a ceiling — ERC-8126 is a risk score where lower is safer, and the spec says an action MUST be rejected if the score exceeds it. We read it that way (if (score > policy.minVerificationScore) revert) and default unknown agents to 100. We think this is the single easiest thing for an implementer to get backwards, which is why it is on this page rather than buried in a comment.
05 · Why now

Not because of volume. Because of liability.

Real numbers first: roughly 3,300 agents across the network actually spend money in a given week, and monthly real volume is around $1.2M — and contracting. Every "hundreds of millions of agent transactions" figure we checked is contaminated by wash activity. We would rather build on the small true number.

Asked whether people should hand their banking details to an AI assistant instead of a private banker, Elon Musk replied:
"If Grok Bot messes up, we will make you whole." 2026-08-26 · while standard terms of service cap liability at $100
Public promise
made whole
↔ this gap
Contractual cap
$100
Gaps like that do not get closed by goodwill; they get closed by evidence. Which agent acted, which rule it hit, who approved it, what the policy said at the time — recomputable by a third party, rather than produced by the operator from its own logs.

⚖️ The compliance window is open

EU AI Act high-risk obligations took effect 2026-08-02, mandating human oversight and audit trails. Meanwhile TFR requires originator information on every transfer with no minimum threshold — and an autonomous agent is not any originator category it recognizes.

🏦 Regulators cleared the governed one

The first agent payment to clear a regulated European banking framework used the protocol that had identity, scoped authority and consent governance in its architecture before launch. That ordering was not an accident.

⏳ The receipt layer is being standardized

Linux Foundation TRACE and the IETF agent-action-receipts draft both landed in August. The window is roughly 6–12 months. Neither one moves money, so binding the record to settlement atomically is still unclaimed.

06 · Deployed addresses

Go read it off the chain yourself

Base mainnet · chainId 8453 · MIT.

TrustLeaseController · policy enforcement0x4ACcB1df8cc625AC05743888158CC3B866aC9833
BoundlessVault · custody0xd9526Eb615f5e252341b5a83b3c26eCca4f1284e
VerificationScoreRegistry · risk scores0x89c8B3d053a79A0bd5A47597aaF97729f504d359
07 · What we want

Code reviewers, not investors. No token.

ERC-8196 has no conformance test suite. We intend to publish ours as something anyone can run — including the cases that would falsify our own implementation.

Three things we actually want: someone to find bugs in the contracts; someone willing to run a real agent against it; and the people working on 8196 / 8126 to align on semantics, so this standard does not end up with two mutually incompatible readings.