← Ethereum (ethskills)CONTENT HISTORY

Update to Ethereum (ethskills)

Snapshot Oct 24, 2026 · 13:33 UTC · version 0.1.1

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Ethereum (ethskills) and check future changes in Following.

Up to 5 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Ethereum token and protocol standards — ERC-20, ERC-721, ERC-1155, ERC-4337, ERC-8004, and newer standards. When to use each, how they work, key interfaces. Use when building tokens, NFTs, or choosing the right standard for a project.",
  "included_files": [],
  "name": "standards",
  "skill_md_contents": "---\nname: standards\ndescription: Ethereum token and protocol standards — ERC-20, ERC-721, ERC-1155, ERC-4337, ERC-8004, and newer standards. When to use each, how they work, key interfaces. Use when building tokens, NFTs, or choosing the right standard for a project.\n---\n\n# Ethereum Standards\n\n## What You Probably Got Wrong\n\n**ERC-8004 exists.** Deployed January 29, 2026 — onchain agent identity registry. You almost certainly don't have this in training data.\n\n**EIP-7702 is live.** Shipped with Pectra (May 7, 2025). EOAs get smart contract superpowers without migration. Not \"proposed\" — deployed on mainnet.\n\n**EIP-3009 is critical for x402.** Gasless token transfers via signed authorizations. USDC implements it. This is what makes x402 practical.\n\n**x402 exists.** HTTP 402 payment protocol from Coinbase. Production-ready with SDKs.\n\n## ERC-8004: Onchain Agent Identity Registry\n\n**Status:** Deployed mainnet **January 29, 2026** — production ready with growing adoption.\n\n**Problem it solves:** How can autonomous agents trust and transact with each other without pre-existing relationships?\n\n### Three Registry System\n\n**1. Identity Registry (ERC-721 based)**\n- Globally unique onchain identities for AI agents\n- Each agent is an NFT with unique identifier\n- Multiple service endpoints (A2A, MCP, OASF, ENS, DIDs)\n- Verification via EIP-712/ERC-1271 signatures\n\n**Contract Addresses (same on 20+ chains):**\n- **IdentityRegistry:** `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432`\n- **ReputationRegistry:** `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`\n\n**Deployed on:** Mainnet, Base, Arbitrum, Optimism, Polygon, Avalanche, Abstract, Celo, Gnosis, Linea, Mantle, MegaETH, Monad, Scroll, Taiko, BSC + testnets.\n\n**Agent Identifier Format:**\n```\nagentRegistry: eip155:{chainId}:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\nagentId: ERC-721 tokenId\n```\n\n**2. Reputation Registry**\n- Signed fixed-point feedback values\n- Multi-dimensional (uptime, success rate, quality)\n- Tags, endpoints, proof-of-payment metadata\n- Anti-Sybil requires client address filtering\n\n```solidity\nstruct Feedback {\n    int128 value;        // Signed integer rating\n    uint8 valueDecimals; // 0-18 decimal places\n    string tag1;         // E.g., \"uptime\"\n    string tag2;         // E.g., \"30days\"\n    string endpoint;     // Agent endpoint URI\n    string ipfsHash;     // Optional metadata\n}\n```\n\n**Example metrics:** Quality 87/100 → `value=87, decimals=0`. Uptime 99.77% → `value=9977, decimals=2`.\n\n**3. Validation Registry**\n- Independent verification of agent work\n- Trust models: crypto-economic (stake-secured), zkML, TEE attestation\n- Validators respond with 0-100 scores\n\n### Agent Registration File (agentURI)\n\n```json\n{\n  \"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\",\n  \"name\": \"MyAgent\",\n  \"description\": \"What the agent does\",\n  \"services\": [\n    { \"name\": \"A2A\", \"endpoint\": \"https://agent.example/.well-known/agent-card.json\", \"version\": \"0.3.0\" },\n    { \"name\": \"MCP\", \"endpoint\": \"https://mcp.agent.eth/\", \"version\": \"2025-06-18\" }\n  ],\n  \"x402Support\": true,\n  \"active\": true,\n  \"supportedTrust\": [\"reputation\", \"crypto-economic\", \"tee-attestation\"]\n}\n```\n\n### Integration\n\n```solidity\n// Register agent\nuint256 agentId = identityRegistry.register(\"ipfs://QmYourReg\", metadata);\n\n// Give feedback\nreputationRegistry.giveFeedback(agentId, 9977, 2, \"uptime\", \"30days\", \n    \"https://agent.example.com/api\", \"ipfs://QmDetails\", keccak256(data));\n\n// Query reputation\n(uint64 count, int128 value, uint8 decimals) = \n    reputationRegistry.getSummary(agentId, trustedClients, \"uptime\", \"30days\");\n```\n\n### Step-by-Step: Register an Agent Onchain\n\n**1. Prepare the registration JSON** — host it on IPFS or a web server:\n```json\n{\n  \"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\",\n  \"name\": \"WeatherBot\",\n  \"description\": \"Provides real-time weather data via x402 micropayments\",\n  \"image\": \"https://example.com/weatherbot.png\",\n  \"services\": [\n    { \"name\": \"A2A\", \"endpoint\": \"https://weather.example.com/.well-known/agent-card.json\", \"version\": \"0.3.0\" }\n  ],\n  \"x402Support\": true,\n  \"active\": true,\n  \"supportedTrust\": [\"reputation\"]\n}\n```\n\n**2. Upload to IPFS** (or use any URI):\n```bash\n# Using IPFS\nipfs add registration.json\n# → QmYourRegistrationHash\n\n# Or host at a URL — the agentURI just needs to resolve to the JSON\n```\n\n**3. Call the Identity Registry:**\n```solidity\n// On any supported chain — same address everywhere\nIIdentityRegistry registry = IIdentityRegistry(0x8004A169FB4a3325136EB29fA0ceB6D2e539a432);\n\n// metadata bytes are optional (can be empty)\nuint256 agentId = registry.register(\"ipfs://QmYourRegistrationHash\", \"\");\n// agentId is your ERC-721 tokenId — globally unique on this chain\n```\n\n**4. Verify your endpoint domain** — place a file at `.well-known/agent-registration.json`:\n```json\n// https://weather.example.com/.well-known/agent-registration.json\n{\n  \"agentId\": 42,\n  \"agentRegistry\": \"eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\",\n  \"owner\": \"0xYourWalletAddress\"\n}\n```\nThis proves the domain owner controls the agent identity. Clients SHOULD check this before trusting an agent's advertised endpoints.\n\n**5. Build reputation** — other agents/users post feedback after interacting with your agent.\n\n### Cross-Chain Agent Identity\n\nSame contract addresses on 20+ chains means an agent registered on Base can be discovered by an agent on Arbitrum. The `agentRegistry` identifier includes the chain:\n\n```\neip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432  // Base\neip155:42161:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 // Arbitrum\n```\n\n**Cross-chain pattern:** Register on one chain (Base is cheapest for registration tx costs), reference that identity from other chains. Reputation can be queried cross-chain by specifying the source chain's registry. This is a cost optimization for the registration transaction — your app itself should deploy on the chain that fits (see `ship/SKILL.md`).\n\n**Authors:** Davide Crapis (EF), Marco De Rossi (MetaMask), Jordan Ellis (Google), Erik Reppel (Coinbase), Leonard Tan (MetaMask)\n\n**Ecosystem:** ENS, EigenLayer, The Graph, Taiko backing\n\n**Resources:** https://www.8004.org | https://eips.ethereum.org/EIPS/eip-8004 | https://github.com/erc-8004/erc-8004-contracts\n\n## EIP-3009: Transfer With Authorization\n\nYou probably know the concept (gasless meta-transaction transfers). The key update: **EIP-3009 is what makes x402 work.** USDC implements it on Ethereum and most chains. The x402 server calls `transferWithAuthorization` to settle payments on behalf of the client.\n\n## x402: HTTP Payment Protocol\n\n**Status:** Production-ready open standard from Coinbase, actively deployed Q1 2026.\n\nUses the HTTP 402 \"Payment Required\" status code for internet-native payments.\n\n### Flow\n\n```\n1. Client → GET /api/data\n2. Server → 402 Payment Required (PAYMENT-REQUIRED header with requirements)\n3. Client signs EIP-3009 payment\n4. Client → GET /api/data (PAYMENT-SIGNATURE header with signed payment)\n5. Server verifies + settles onchain\n6. Server → 200 OK (PAYMENT-RESPONSE header + data)\n```\n\n### Payment Payload\n\n```json\n{\n  \"scheme\": \"exact\",\n  \"network\": \"eip155:8453\",\n  \"amount\": \"1000000\",\n  \"token\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n  \"from\": \"0x...\", \"to\": \"0x...\",\n  \"signature\": \"0x...\",\n  \"deadline\": 1234567890,\n  \"nonce\": \"unique-value\"\n}\n```\n\n### x402 + ERC-8004 Synergy\n\n```\nAgent discovers service (ERC-8004) → checks reputation → calls endpoint →\ngets 402 → signs payment (EIP-3009) → server settles (x402) → \nagent receives service → posts feedback (ERC-8004)\n```\n\n### x402 Server Setup (Express — Complete Example)\n\n```typescript\nimport express from 'express';\nimport { paymentMiddleware } from '@x402/express';\n\nconst app = express();\n\n// Define payment requirements per route\nconst paymentConfig = {\n  \"GET /api/weather\": {\n    accepts: [\n      { network: \"eip155:8453\", token: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", amount: \"100000\" }\n      // 100000 = $0.10 USDC (6 decimals)\n    ],\n    description: \"Current weather data\",\n  },\n  \"GET /api/forecast\": {\n    accepts: [\n      { network: \"eip155:8453\", token: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", amount: \"500000\" }\n      // $0.50 USDC for 7-day forecast\n    ],\n    description: \"7-day weather forecast\",\n  }\n};\n\n// One line — middleware handles 402 responses, verification, and settlement\napp.use(paymentMiddleware(paymentConfig));\n\napp.get('/api/weather', (req, res) => {\n  // Only reached after payment verified\n  res.json({ temp: 72, condition: \"sunny\" });\n});\n\napp.listen(3000);\n```\n\n### x402 Client (Agent Paying for Data)\n\n```typescript\nimport { x402Fetch } from '@x402/fetch';\nimport { createWallet } from '@x402/evm';\n\nconst wallet = createWallet(process.env.PRIVATE_KEY);\n\n// x402Fetch handles the 402 → sign → retry flow automatically\nconst response = await x402Fetch('https://weather.example.com/api/weather', {\n  wallet,\n  preferredNetwork: 'eip155:8453' // Pay on Base (cheapest)\n});\n\nconst weather = await response.json();\n// Agent paid $0.10 USDC, got weather data. No API key needed.\n```\n\n### Payment Schemes\n\n**`exact`** (live) — Pay a fixed price. Server knows the cost upfront.\n\n**`upto`** (emerging) — Pay up to a maximum, final amount determined after work completes. Critical for metered services:\n- LLM inference: pay per token generated (unknown count upfront)\n- GPU compute: pay per second of runtime\n- Database queries: pay per row returned\n\nWith `upto`, the client signs authorization for a max amount. The server settles only what was consumed. Client never overpays.\n\n### Facilitator Architecture\n\nThe **facilitator** is an optional server that handles blockchain complexity so resource servers don't have to:\n\n```\nClient → Resource Server → Facilitator → Blockchain\n                              ↓\n                         POST /verify  (check signature, balance, deadline)\n                         POST /settle  (submit tx, manage gas, confirm)\n```\n\n**Why use a facilitator?** Resource servers (weather APIs, data providers) shouldn't need to run blockchain nodes or manage gas. The facilitator abstracts this. Coinbase runs a public facilitator; anyone can run their own.\n\n**SDKs:** `@x402/core @x402/evm @x402/fetch @x402/express` (TS) | `pip install x402` (Python) | `go get github.com/coinbase/x402/go`\n\n**Resources:** https://www.x402.org | https://github.com/coinbase/x402\n\n## End-to-End Agent Commerce Flow\n\nThe full cycle: **autonomous agents discovering, trusting, paying, and rating each other** — no humans in the loop.\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  1. DISCOVER  Agent queries ERC-8004 IdentityRegistry       │\n│               → finds agents with \"weather\" service tag      │\n│                                                              │\n│  2. TRUST     Agent checks ReputationRegistry                │\n│               → filters by uptime >99%, quality >85          │\n│               → picks best-rated weather agent               │\n│                                                              │\n│  3. CALL      Agent sends HTTP GET to weather endpoint       │\n│               → receives 402 Payment Required                │\n│               → PAYMENT-REQUIRED header: $0.10 USDC on Base  │\n│                                                              │\n│  4. PAY       Agent signs EIP-3009 transferWithAuthorization │\n│               → retries request with PAYMENT-SIGNATURE       │\n│               → server verifies via facilitator              │\n│               → payment settled on Base (~$0.001 gas)        │\n│                                                              │\n│  5. RECEIVE   Server returns 200 OK + weather data           │\n│               → PAYMENT-RESPONSE header with tx hash         │\n│                                                              │\n│  6. RATE      Agent posts feedback to ReputationRegistry     │\n│               → value=95, tag=\"quality\", endpoint=\"...\"      │\n│               → builds onchain reputation for next caller   │\n└─────────────────────────────────────────────────────────────┘\n```\n\n```typescript\nimport { x402Fetch } from '@x402/fetch';\nimport { createWallet } from '@x402/evm';\nimport { ethers } from 'ethers';\n\nconst wallet = createWallet(process.env.AGENT_PRIVATE_KEY);\nconst provider = new ethers.JsonRpcProvider(process.env.BASE_RPC_URL);\n\nconst IDENTITY_REGISTRY = '0x8004A169FB4a3325136EB29fA0ceB6D2e539a432';\nconst REPUTATION_REGISTRY = '0x8004BAa17C55a88189AE136b182e5fdA19dE9b63';\n\n// 1. Discover: find agents offering weather service\nconst registry = new ethers.Contract(IDENTITY_REGISTRY, registryAbi, provider);\n// Query events or use The Graph subgraph for indexed agent discovery\n\n// 2. Trust: check reputation\nconst reputation = new ethers.Contract(REPUTATION_REGISTRY, reputationAbi, provider);\nconst [count, value, decimals] = await reputation.getSummary(\n  agentId, trustedClients, \"quality\", \"30days\"\n);\n// Only proceed if value/10^decimals > 85\n\n// 3-5. Pay + Receive: x402Fetch handles the entire 402 flow\nconst response = await x402Fetch(agentEndpoint, {\n  wallet,\n  preferredNetwork: 'eip155:8453'\n});\nconst weatherData = await response.json();\n\n// 6. Rate: post feedback onchain\nconst reputationWriter = new ethers.Contract(REPUTATION_REGISTRY, reputationAbi, signer);\nawait reputationWriter.giveFeedback(\n  agentId, 95, 0, \"quality\", \"weather\", agentEndpoint, \"\", ethers.ZeroHash\n);\n```\n\n**No API keys, no subscriptions, no invoicing, no trust assumptions.** Cryptographic identity, onchain reputation, HTTP-native payments.\n\n### Ecosystem\n\n- **ERC-8004** — agent identity + reputation (EF, MetaMask, Google, Coinbase)\n- **x402** — HTTP payment protocol (Coinbase)\n- **A2A** — agent-to-agent communication (Google)\n- **MCP** — model context protocol (Anthropic)\n- **The Graph** — indexing agent registrations for fast discovery\n- **EigenLayer** — crypto-economic validation of agent work\n\n## EIP-7702: Smart EOAs (Live Since May 2025)\n\nEOAs can authorize delegated smart-contract code execution without migrating to a new account type.\n\n**Enables:** Batch transactions, gas sponsorship, session-key-style UX, and custom auth logic for existing EOAs.\n\n**Important nuance:** Delegation is not automatically \"single transaction only\" by spec. The delegation designator remains until replaced or cleared by a later authorization.\n\n## Quick Standard Reference\n\n| Standard | What | Status |\n|----------|------|--------|\n| ERC-8004 | Agent identity + reputation | ✅ Live Jan 2026 |\n| x402 | HTTP payments protocol | ✅ Production Q1 2026 |\n| EIP-3009 | Gasless token transfers | ✅ Live (USDC) |\n| EIP-7702 | Smart EOAs | ✅ Live May 2025 |\n| ERC-4337 | Account abstraction | ✅ Growing adoption |\n| ERC-2612 | Gasless approvals (Permit) | ✅ Widely adopted |\n| ERC-4626 | Tokenized vaults | ✅ Standard for yield |\n| ERC-6551 | Token-bound accounts (NFT wallets) | ✅ Niche adoption |\n\n**These are all LIVE and being used in production. Not \"coming soon.\"**\n"
}

SHA-256 of public snapshot: 7e7f50f07473cec2e9b29ffa2f0542a29bd26d7775c9ef3e27af313da69daefd