ERC-8004 on Celo Mainnet
We scored every agent.
Most failed.
Sentinel8004 scans all 2,902 agents on Celo's IdentityRegistry. Five independent scoring layers. Circuit breakers for spam. Every result written on-chain with IPFS proofs.
What we found in the registry.
Spam cluster
--
Agents from a single address. One owner mass-registered clones with identical metadata.
Dead endpoints
--
Feedback URIs that don't resolve. Registered but never deployed.
No metadata
--
Placeholder names, no description, no service endpoints declared.
Live finding
We found 1,797 sock puppet wallets gaming the ReputationRegistry.
Three agents inflated their trust scores by creating hundreds of wallets, each with exactly 2 transactions (fund + giveFeedback). The on-chain reputation layer was returning attacker-controlled data.
Toppa #1870
95 → 80
431 sock puppets filtered
Every puppet wallet: exactly 2 txs, funded from same source
Loopuman #17
936 puppets
getSummary returned 98. Actual score: 35.
On-chain reputation data is actively compromised
Agent #1865
437 puppets
Zero wallet overlap with other clusters
Separate funding sources, same attack pattern
Our fix
L5 now filters providers by on-chain tx history. Wallets with <5 total transactions are excluded as likely sock puppets. Verified against all 3 attack clusters and 2 clean agents on live chain.
Five layers, one score, written on-chain.
1
Read
Registry data
2
Probe
Endpoints
3
Score
5 layers
4
Breakers
Cap spam
5
Compose
0-100
✓
Write
On-chain
On-chain proof
contract
0x8004...9dE9b63
registry
0x8004...9a432
written
Loading...
writer
0xf994...4355
cost/tx
~0.009 CELO
// Read trust score for any agent const feedback = await registry.getFeedback(agentId); // => { value: 80n, tag1: "sentinel8004/trust-v2" } if (feedback.value < 30n) { throw "Blocked by trust gate"; }
// AI agents query trust via MCP { "tool": "check_agent_trust", "input": { "agentId": 1870 } } // => { score: 12, flags: ["MASS_REG"] }
// Static JSON for dashboards const res = await fetch("data/scores.json"); const { reports } = await res.json(); const agent = reports.find( r => r.agentId === 132 ); // => { name: "Clenja", score: 57 }
Browse the full registry
Search, filter, and inspect all -- agents and their individual reports.