Verify - Agent Identity Verification
Verify any agent's on-chain identity using ERC-8004. Prevents impersonation attacks.
Why This Matters
On January 29, 2026, an agent named "samaltman" attempted to hijack bots via prompt injection. Anyone can claim to be anyone. ERC-8004 provides cryptographic proof of identity.
Chat Commands
Verify Agent
/verify 1234 # Verify agent by ID /verify 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb7 # Verify by address /verify eip155:8453:0x7177...Dd09A:1234 # Full format
Check Before Copy Trading
/verify trader 0x123... # Verify trader before copying /verify whale 0xabc... # Verify whale identity
Register Clodds
/verify register # Register this Clodds instance /verify register --name "MyBot" # With custom name
Stats
/verify stats # Show total registered agents /verify reputation 1234 # Get agent's reputation score
TypeScript API
Quick Verification
import { verifyAgent, hasIdentity } from 'clodds/identity';
// Verify by agent ID
const result = await verifyAgent(1234);
if (result.verified) {
console.log(Verified: ${result.name});
console.log(Owner: ${result.owner});
console.log(Reputation: ${result.reputation?.averageScore}/100);
}
// Check if address has identity const hasId = await hasIdentity('0x742d35Cc...');
Full Client
import { createERC8004Client } from 'clodds/identity';
const client = createERC8004Client('base-sepolia');
// Get agent details const agent = await client.getAgent(1234); console.log(agent?.card?.name); console.log(agent?.card?.description);
// Verify ownership const isOwner = await client.verifyOwnership(1234, '0x742...');
// Get reputation
const rep = await client.getReputation(1234);
console.log(Score: ${rep?.averageScore}/100 (${rep?.feedbackCount} reviews));
// Give feedback const txHash = await client.giveFeedback(1234, 85, 'Great trading signals');
Register Agent
import { createERC8004Client, buildAgentCard } from 'clodds/identity';
const client = createERC8004Client('base', process.env.PRIVATE_KEY);
// Build agent card const card = buildAgentCard({ name: 'Clodds Trading Bot', description: 'AI-powered prediction market assistant', walletAddress: '0x742d35Cc...', apiEndpoint: 'https://api.cloddsbot.com/agent', });
// Upload to IPFS (use Pinata, web3.storage, etc.) const ipfsUri = await uploadToIPFS(card);
// Register on-chain
const { agentId, txHash } = await client.register(ipfsUri);
console.log(Registered as agent #${agentId});
Contract Addresses
Same on all EVM chains (CREATE2 deterministic):
Contract Address
Identity Registry 0x7177a6867296406881E20d6647232314736Dd09A
Reputation Registry 0xB5048e3ef1DA4E04deB6f7d0423D06F63869e322
Validation Registry 0x662b40A526cb4017d947e71eAF6753BF3eeE66d8
Live on: Ethereum, Base, Optimism, Arbitrum, Polygon (and testnets)
Supported Networks
Network Status Default
Base Live ✓
Ethereum Live
Optimism Live
Arbitrum Live
Polygon Live
Sepolia (testnet) Live
Base Sepolia Live
Mainnet launched January 29, 2026. 19,000+ agents already registered.
Use Cases
Copy Trading Verification
Before copying a trader, verify their identity:
const result = await verifyAgent(traderAgentId); if (!result.verified) { console.warn('UNVERIFIED TRADER - Proceed with caution'); } if (result.reputation?.averageScore < 50) { console.warn('LOW REPUTATION - Consider skipping'); }
Whale Tracking
Verify whale identity claims:
const isVerified = await hasIdentity(whaleAddress); // Only trust signals from verified whales
Bot-to-Bot Communication
Verify other agents before interaction:
const agent = await client.getAgent(otherAgentId); if (agent?.card?.endpoints?.find(e => e.name === 'A2A')) { // Safe to communicate via A2A protocol }
Best Practices
-
Always verify before copy trading - Don't trust unverified traders
-
Check reputation scores - Low scores indicate potential issues
-
Verify on the right network - Use same network as trading
-
Register your bot - Build trust with verified identity
-
Give feedback - Help build the trust graph
Links
-
ERC-8004 Spec
-
Reference Implementation
-
Awesome ERC-8004