erc-8004 について
erc-8004は、組織を越えたAIエージェントのオンチェーン発見と連携を定めるERC-8004草案EIPを扱うスキルです。3種類のレジストリ、Agent0 TypeScript SDK、OASFによる分類を説明します。
主な機能
- 01エージェントのオンチェーンID登録
- 02能力や信頼条件による検索
- 03署名付きフィードバックの送信
- 043種類のスマートコントラクトレジストリ
- 05OASFのスキルとドメインによる分類
活用シーン
- 01AIエージェントのオンチェーンID作成
- 02MCPエンドポイントを持つエージェントの発見
- 03エージェント評価システムの構築
- 04ERC-8004コントラクトやSDKの統合
MCP 対応
エージェント登録ファイルでMCPエンドポイントとツールを公開する方法や、Agent0 SDKでMCP対応エージェントを検索する方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tenequm/ skills --skill erc-8004インストール後、Claude Code で/erc-8004を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtreferences/contracts.mdoasf-taxonomy.mdregistration.mdreputation.mdsdk-typescript.mdsearch-discovery.mdspec.md詳細
ERC-8004:トラストレスなエージェント
ERC-8004は、事前の信頼関係がなくても、組織の垣根を越えてAIエージェントを発見、選択し、やり取りするためのDraft EIPです。任意のEVMチェーン上にチェーンごとのシングルトンとしてデプロイされる、3つのオンチェーンレジストリを定義します。
著者: Marco De Rossi (MetaMask)、Davide Crapis (EF)、Jordan Ellis (Google)、Erik Reppel (Coinbase)
仕様全文: references/spec.md
このスキルの使用場面
- AIエージェントをオンチェーンに登録する(ERC-721 ID)
- エージェントの評判/フィードバックシステムを構築またはクエリする
- 能力、信頼モデル、エンドポイントに基づいてエージェントを検索、発見する
- Agent0 TypeScript SDK(
agent0-sdk)を使用する - ERC-8004スマートコントラクトとの連携を実装する
- エージェントウォレット、MCP/A2Aエンドポイント、またはOASFタクソノミーを設定する
コアアーキテクチャ
それぞれUUPSアップグレード可能なシングルトンとしてデプロイされる、3つの軽量レジストリです。
| レジストリ | 目的 | コントラクト |
|---|---|---|
| Identity | エージェントIDと登録ファイル用のERC-721 NFT | IdentityRegistryUpgradeable |
| Reputation | 署名付き固定小数点フィードバックシグナル+オフチェーンの詳細ファイル | ReputationRegistryUpgradeable |
| Validation | 第三者バリデーターによる証明(ステーク、zkML、TEE) | ValidationRegistryUpgradeable |
エージェントID = agentRegistry(文字列 eip155:{chainId}:{contractAddress})+ agentId(ERC-721のtokenId)。
各エージェントのagentURIはJSON登録ファイルを参照し、名前、説明、エンドポイント(MCP、A2A、ENS、DID、ウォレット)、OASFスキル/ドメイン、信頼モデル、x402のサポートを公開します。
参照: コントラクトのインターフェースとアドレスの全容はreferences/contracts.mdをご覧ください。
Agent0 SDK(TypeScript)を使ったクイックスタート
npm install agent0-sdk
エージェントを登録する
RPC_URL、PRIVATE_KEY、PINATA_JWTは、このスキルのmetadata.openclaw.envVarsで宣言されています。開発には使い捨てのテストネットキーを使用してください。メインネットで操作する場合は、ハードウェアウォレットまたは権限を限定した署名者を使用してください。
import { SDK } from 'agent0-sdk';
const sdk = new SDK({
chainId: 84532, // Base Sepolia
rpcUrl: process.env.RPC_URL,
privateKey: process.env.PRIVATE_KEY,
ipfs: 'pinata',
pinataJwt: process.env.PINATA_JWT,
});
const agent = sdk.createAgent(
'MyAgent',
'An AI agent that analyzes crypto markets',
'https://example.com/agent-image.png'
);
// Configure endpoints and capabilities
await agent.setMCP('https://mcp.example.com', '2025-06-18', true); // auto-fetches tools
await agent.setA2A('https://example.com/.well-known/agent-card.json', '0.3.0', true);
agent.setENS('myagent.eth');
agent.setActive(true);
agent.setX402Support(true);
agent.setTrust(true, false, false); // reputation only
// Add OASF taxonomy
agent.addSkill('natural_language_processing/natural_language_generation/summarization', true);
agent.addDomain('finance_and_business/investment_services', true);
// Register on-chain (mints NFT + uploads to IPFS).
// Sends a real transaction signed with PRIVATE_KEY - confirm chainId, signer, and balance before running.
const tx = await agent.registerIPFS();
const { result } = await tx.waitConfirmed();
console.log(`Registered: ${result.agentId}`); // e.g. "84532:42"
エージェントを検索する
const sdk = new SDK({ chainId: 84532, rpcUrl: process.env.RPC_URL });
// Search by capabilities
const agents = await sdk.searchAgents({
hasMCP: true,
active: true,
x402support: true,
mcpTools: ['financial_analyzer'],
supportedTrust: ['reputation'],
});
// Get a specific agent
const agent = await sdk.getAgent('84532:42');
// Semantic search
const results = await sdk.searchAgents(
{ keyword: 'crypto market analysis' },
{ sort: ['semanticScore:desc'] }
);
フィードバックを送る
// Prepare optional off-chain feedback file
const feedbackFile = await sdk.prepareFeedbackFile({
text: 'Accurate market analysis',
capability: 'tools',
name: 'financial_analyzer',
proofOfPayment: { txHash: '0x...', chainId: '8453', fromAddress: '0x...', toAddress: '0x...' },
});
// Submit feedback (value=85 out of 100). On-chain tx; same caveats as `registerIPFS()` above.
const tx = await sdk.giveFeedback('84532:42', 85, 'starred', '', '', feedbackFile);
await tx.waitConfirmed();
// Read reputation summary
const summary = await sdk.getReputationSummary('84532:42');
console.log(`Average: ${summary.averageValue}, Count: ${summary.count}`);
参照: SDK APIの全リファレンスはreferences/sdk-typescript.mdをご覧ください。
登録ファイルの形式
すべてのエージェントのagentURIは、次のJSON構造を参照します。
{
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
"name": "MyAgent",
"description": "What it does, pricing, interaction methods",
"image": "https://example.com/agent.png",
"services": [
{ "name": "MCP", "endpoint": "https://mcp.example.com", "version": "2025-06-18", "mcpTools": ["tool1"] },
{ "name": "A2A", "endpoint": "https://example.com/.well-known/agent-card.json", "version": "0.3.0" },
{ "name": "OASF", "endpoint": "https://github.com/agntcy/oasf/", "version": "v0.8.0",
"skills": ["natural_language_processing/summarization"],
"domains": ["finance_and_business/investment_services"] },
{ "name": "ENS", "endpoint": "myagent.eth", "version": "v1" },
{ "name": "agentWallet", "endpoint": "eip155:8453:0x..." }
],
"registrations": [
{ "agentId": 42, "agentRegistry": "eip155:84532:0x8004A818BFB912233c491871b3d84c89A494BD9e" }
],
"supportedTrust": ["reputation", "crypto-economic", "tee-attestation"],
"active": true,
"x402Support": true
}
registrationsフィールドは、双方向の暗号学的リンクを作成します。NFTがこのファイルを参照し、このファイルがNFTを参照します。これにより、/.well-known/agent-registration.jsonを使ったエンドポイントドメインの検証が可能になります。
参照: ベストプラクティス(4つの黄金律)とフィールドの完全なリファレンスはreferences/registration.mdをご覧ください。
コントラクトアドレス
すべてのレジストリは、CREATE2(SAFE Singleton Factory)を通じて決定論的なバニティアドレスにデプロイされます。
メインネット(Ethereum、Base、Polygon、Arbitrum、Optimismなど)
| レジストリ | アドレス |
|---|---|
| Identity | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
| Reputation | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 |
| Validation | 0x8004Cb1BF31DAf7788923b405b754f57acEB4272 |
テストネット(Sepolia、Base Sepoliaなど)
| レジストリ | アドレス |
|---|---|
| Identity | 0x8004A818BFB912233c491871b3d84c89A494BD9e |
| Reputation | 0x8004B663056A597Dffe9eCcC1965A193B7388713 |
| Validation | 0x8004Cb1BF31DAf7788923b405b754f57acEB4272 |
同じプロキシアドレスを使用するチェーン:Ethereum、Base、Arbitrum、Avalanche、Celo、Gnosis、Linea、Mantle、MegaETH、Optimism、Polygon、Scroll、Taiko、Monad、BSC、および各テストネット。
評判システム
フィードバックでは、符号付き固定小数点数を使用します。value(int128)+valueDecimals(uint8、0-18)です。
| tag1 | 測定対象 | 例 | value | valueDecimals |
|---|---|---|---|---|
starred | 品質 0-100 | 87/100 | 87 | 0 |
reachable | エンドポイントの稼働状況(二値) | true | 1 | 0 |
uptime | 稼働率 % | 99.77% | 9977 | 2 |
successRate | 成功率 % | 89% | 89 | 0 |
responseTime | レイテンシー ms | 560ms | 560 | 0 |
Sybil 攻撃対策:getSummary() には空でない clientAddresses 配列が必要です(呼び出し元は信頼できる評価者のリストを指定する必要があります)。自己フィードバックは拒否されます(エージェントの所有者/運営者は、自身のエージェントにフィードバックを送信できません)。
参照: フィードバックシステム、オフチェーンファイル形式、集計の詳細については、references/reputation.md を参照してください。
OASF 分類体系(v0.8.0)
Open Agentic Schema Framework は、エージェントの分類に使用する標準化されたスキル(136 種類)とドメイン(204 種類)を提供します。
最上位のスキルカテゴリー: natural_language_processing、images_computer_vision、audio、analytical_skills、multi_modal、agent_orchestration、advanced_reasoning_planning、data_engineering、security_privacy、evaluation_monitoring、devops_mlops、governance_compliance、tool_interaction、retrieval_augmented_generation、tabular_text
最上位のドメインカテゴリー: technology、finance_and_business、healthcare、legal、education、life_science、agriculture、energy、environmental_science、government、manufacturing、transportation など。
スラッシュ区切りのパスを使用します:agent.addSkill('natural_language_processing/natural_language_generation/summarization', true)。
主な概念
| 用語 | 意味 |
|---|---|
agentRegistry | eip155:{chainId}:{contractAddress} - グローバルに一意なレジストリー識別子 |
agentId | ERC-721 tokenId - オンチェーンの数値識別子(SDK での形式:"chainId:tokenId") |
agentURI | エージェント登録ファイルを指す URI(IPFS/HTTPS) |
agentWallet | 検証済みの支払いアドレス用に予約されたオンチェーンメタデータキー(EIP-712/ERC-1271) |
feedbackIndex | clientAddress が agentId に送ったフィードバックの 1 始まりのカウンター |
supportedTrust | 配列:"reputation"、"crypto-economic"、"tee-attestation" |
x402Support | Coinbase x402 HTTP 決済プロトコルのサポートを示すブール値フラグ |
| OASF | Open Agentic Schema Framework - エージェントのスキル/ドメインに関する標準化された分類体系 |
| MCP | Model Context Protocol - ツール、プロンプト、リソース、補完 |
| A2A | Agent2Agent - AgentCard による認証とスキル、タスクのオーケストレーション |
リファレンス一覧
| リファレンス | 内容 |
|---|---|
| spec.md | ERC-8004 仕様全文(EIP テキスト) |
| contracts.md | スマートコントラクトのインターフェース、ストレージレイアウト、デプロイ |
| sdk-typescript.md | Agent0 TypeScript SDK の全 API |
| registration.md | 登録ファイル形式、4 つのゴールデンルール、ドメイン検証 |
| reputation.md | フィードバックシステム、オフチェーンファイル、値のエンコード、集計 |
| search-discovery.md | エージェント検索、サブグラフクエリ、マルチチェーン検索 |
| oasf-taxonomy.md | OASF v0.8.0 の分類体系全文:スラッグ付きの全 136 スキルと 204 ドメイン |
公式リソース
- EIP ディスカッション:https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098
- コントラクト:https://github.com/erc-8004/erc-8004-contracts
- ベストプラクティス:https://github.com/erc-8004/best-practices
- SDK ドキュメント:https://sdk.ag0.xyz
- SDK ドキュメントのソース:https://github.com/agent0lab/agent0-sdk-docs
- TypeScript SDK:https://github.com/agent0lab/agent0-ts
- Python SDK:https://github.com/agent0lab/agent0-py
- サブグラフ:https://github.com/agent0lab/subgraph
- OASF:https://github.com/agntcy/oasf