Summary
ERC-8273 defines a standard interface for an on-chain Agent Attestation Registry — a per-operation, transaction-scoped attestation primitive designed for AI agent systems.
The core idea: instead of asking “which agent is this?” (identity), we ask “does the agent executing this on-chain operation have the required qualification?” (per-operation attestation). Identity and per-operation attestation are complementary layers that should not be conflated.
Problem
On-chain agent systems today lack a standardized way to gate operations based on per-action attestation. An identity NFT (e.g. ERC-8004) can tell you that “this address claims to be an agent,” but cannot tell you anything about a particular operation — whether the agent is authorized, whether its runtime environment is trustworthy, or whether an action was autonomous vs. human-directed.
These questions all share the same structural need: an attestation record that is bound to a concrete operation and queryable on-chain within the issuing transaction.
Design
-
Atomic execution model: An authorized Attestor calls
attestAndCall, which writes the attestation to transient storage (EIP-1153), executes the action through an execution profile, and relies on the EVM to automatically clear authorization at transaction end. No persistent active authorization ever exists. -
Two authorization axes:
capability(coarse-grained class, e.g.keccak256("DEFI_ACCESS_V1")) +actionDigest(fine-grained action fingerprint binding target contract, selector, arguments, and nonce).actionDigest = 0means capability-only mode. -
Execution profiles: Abstracts how the Registry causes the target call to originate from the agent wallet. Two profiles are defined:
-
Direct Wallet (
AGENT_EXECUTE_V1): for ERC-7702 / AA wallets implementingIAgentExecute -
ERC-4337 UserOperation (
ERC4337_USEROP_V1): for existing 4337 wallets viaEntryPoint.handleOps -
Gating primitives:
getActiveAttestationByWallet(msg.sender, capability, actionDigest)reverts when no active attestation exists — structurally eliminating the common integration bug of forgetting to check a bool return. -
ERC-8004 integration: Implementations claiming ERC-8004 support set
subjectId = agentIdandsubjectType = keccak256("ERC8004_AGENT").
Relationship to Existing Standards
-
Atomic execution model: An authorized Attestor calls
attestAndCall, which writes the attestation to transient storage (EIP-1153), executes the action through an execution profile, and relies on the EVM to automatically clear authorization at transaction end. No persistent active authorization ever exists. -
Two authorization axes:
capability(coarse-grained class, e.g.keccak256("DEFI_ACCESS_V1")) +actionDigest(fine-grained action fingerprint binding target contract, selector, arguments, and nonce).actionDigest = 0means capability-only mode. -
Execution profiles: Abstracts how the Registry causes the target call to originate from the agent wallet. Two profiles are defined:
- Direct Wallet (
AGENT_EXECUTE_V1): for ERC-7702 / AA wallets implementingIAgentExecute - ERC-4337 UserOperation (
ERC4337_USEROP_V1): for existing 4337 wallets viaEntryPoint.handleOps
- Direct Wallet (
-
Gating primitives:
getActiveAttestationByWallet(msg.sender, capability, actionDigest)reverts when no active attestation exists — structurally eliminating the common integration bug of forgetting to check a bool return. -
ERC-8004 integration: Implementations claiming ERC-8004 support set
subjectId = agentIdandsubjectType = keccak256("ERC8004_AGENT").
Open Questions & Feedback Welcome
-
Execution profiles: Are the two defined profiles (Direct Wallet + ERC-4337) sufficient for the current ecosystem, or should we define additional ones (e.g. ERC-7579 module execution)?
-
Capability namespace: Should there be a registry or convention for well-known capability identifiers, or is the current flat namespace sufficient?
-
Cross-registry composability: The current design allows multiple independent Registry deployments. Should the standard define any mechanism for cross-registry recognition?
-
actionDigest derivation: The derivation rule is agreed between Attestor and DApp. Should the standard be more prescriptive about the derivation scheme?
We look forward to your feedback and discussion.
PR: Add ERC: Attestation-Gated Agentic Actions by xrqin · Pull Request #1770 · ethereum/ERCs · GitHub