Install
openclaw skills install @san-npm/8004ERC-8004 Agent Trust Protocol for AI agent identity, reputation, and validation on Celo. Use when building AI agents that need identity registration, reputation tracking, or trust verification across organizational boundaries.
openclaw skills install @san-npm/8004ERC-8004 establishes trust infrastructure for autonomous AI agents, enabling them to discover, identify, and evaluate other agents across organizational boundaries.
| Registry | Purpose | Key Functions |
|---|---|---|
| Identity Registry | Agent discovery via ERC-721 NFTs | register(), agentURI() |
| Reputation Registry | Feedback and attestations | giveFeedback(), getSummary() |
| Validation Registry | Verification hooks | Custom validators |
Application Layer (Agent Apps, Marketplaces)
↓
Trust Layer (ERC-8004) ← This skill
↓
Payment Layer (x402)
↓
Communication Layer (A2A, MCP)
# JavaScript/TypeScript
npm install @chaoschain/sdk
# Python
pip install chaoschain-sdk
| Contract | Address |
|---|---|
| Identity Registry | Coming Soon (Q1 2026) |
| Reputation Registry | Coming Soon (Q1 2026) |
| Contract | Address |
|---|---|
| Identity Registry | Coming Soon |
| Reputation Registry | Coming Soon |
Create an agent registration file describing endpoints and capabilities:
{
"type": "Agent",
"name": "My AI Agent",
"description": "Description of capabilities",
"image": "ipfs://Qm...",
"endpoints": [
{
"type": "a2a",
"url": "https://example.com/.well-known/agent.json"
},
{
"type": "mcp",
"url": "https://example.com/mcp"
},
{
"type": "wallet",
"address": "0x...",
"chainId": 42220
}
],
"supportedTrust": ["reputation", "validation", "tee"]
}
import { upload } from "@chaoschain/sdk";
const agentMetadata = {
type: "Agent",
name: "My AI Agent",
description: "AI agent for DeFi operations",
// ...
};
const agentURI = await upload(agentMetadata);
// Returns: ipfs://QmYourRegistrationFile
import { IdentityRegistry } from '@chaoschain/sdk';
import { createPublicClient, http } from 'viem';
import { celo } from 'viem/chains';
const client = createPublicClient({
chain: celo,
transport: http('https://forno.celo.org'),
});
const registry = new IdentityRegistry(client);
// Register and get agent ID
const tx = await registry.register(agentURI);
const agentId = tx.events.Transfer.returnValues.tokenId;
console.log('Agent registered with ID:', agentId);
import { ReputationRegistry } from '@chaoschain/sdk';
const reputation = new ReputationRegistry(client);
await reputation.giveFeedback(
agentId, // Agent ID to review
85, // score (0-100)
0, // decimals
'starred', // tag1: category
'', // tag2: optional
'https://agent.example.com', // endpoint used
'ipfs://QmDetailedFeedback', // detailed feedback URI
feedbackHash // keccak256 of feedback content
);
| Tag | Measures | Example |
|---|---|---|
starred | Quality rating (0-100) | 87/100 |
uptime | Endpoint uptime % | 99.77% |
successRate | Task success rate % | 89% |
responseTime | Response time (ms) | 560ms |
reachable | Endpoint reachable | true/false |
// Get all feedback for an agent
const feedback = await reputation.readAllFeedback(agentId);
// Get aggregated summary
const summary = await reputation.getSummary(agentId);
console.log('Average rating:', summary.averageScore);
console.log('Total reviews:', summary.totalFeedback);
import { IdentityRegistry, ReputationRegistry } from '@chaoschain/sdk';
async function verifyAndInteract(targetAgentId, minReputation = 70) {
// 1. Verify identity
const identity = await identityRegistry.getAgent(targetAgentId);
if (!identity) {
throw new Error('Agent not registered');
}
// 2. Check reputation
const summary = await reputationRegistry.getSummary(targetAgentId);
if (summary.averageScore < minReputation) {
throw new Error(`Agent reputation ${summary.averageScore} below threshold ${minReputation}`);
}
// 3. Get endpoint
const agentData = await fetch(identity.agentURI).then(r => r.json());
const endpoint = agentData.endpoints.find(e => e.type === 'a2a');
// 4. Interact with verified agent
const result = await interactWithAgent(endpoint.url);
// 5. Submit feedback
await reputationRegistry.giveFeedback(
targetAgentId,
result.success ? 90 : 30,
0,
result.success ? 'starred' : 'failed',
'',
endpoint.url,
'',
''
);
return result;
}
ERC-8004 and x402 work together for trustworthy paid agent interactions:
import { IdentityRegistry, ReputationRegistry } from '@chaoschain/sdk';
import { wrapFetchWithPayment } from 'thirdweb/x402';
async function payTrustedAgent(agentId, serviceUrl) {
// 1. Verify trust
const summary = await reputationRegistry.getSummary(agentId);
if (summary.averageScore < 80) {
throw new Error('Agent not trusted enough for payment');
}
// 2. Make paid request
const fetchWithPayment = wrapFetchWithPayment({
client,
account,
paymentOptions: { maxValue: "1000000" },
});
const response = await fetchWithPayment(serviceUrl);
return response.json();
}
Verify strategy agents before delegating funds:
const strategyAgents = await identityRegistry.searchByCapability('defi-trading');
const trustedAgents = [];
for (const agent of strategyAgents) {
const summary = await reputationRegistry.getSummary(agent.id);
if (summary.averageScore >= 85 && summary.totalFeedback >= 100) {
trustedAgents.push(agent);
}
}
Coordinate trusted agents for complex tasks:
const workflow = {
research: await findTrustedAgent('research', 80),
analysis: await findTrustedAgent('analysis', 85),
execution: await findTrustedAgent('execution', 90),
};
// Execute with trust-verified agents
await executeWorkflow(workflow);
For high-stakes operations, use Validation Registry for additional verification:
| Model | Mechanism | Best For |
|---|---|---|
| Reputation-based | Client feedback | Low-stake, frequent |
| Crypto-economic | Stake + slashing | Medium-stake financial |
| zkML | Zero-knowledge proofs | Privacy-preserving |
| TEE Attestation | Hardware isolation | High-assurance |
| Network | Chain ID | RPC Endpoint |
|---|---|---|
| Celo Mainnet | 42220 | https://forno.celo.org |
| Celo Sepolia | 11142220 | https://forno.celo-sepolia.celo-testnet.org |