Skip to main content
The crosschain.agents schema provides analytics for the ERC-8004 on-chain agent identity and reputation standard across 6 mainnets (Ethereum, Base, Polygon, Scroll, BSC, Gnosis). ERC-8004 enables trustless agent registration, metadata management, and peer-to-peer reputation feedback — all fully on-chain.

Available Tables

TableDescription
erc8004_eventsUnified event log for all ERC-8004 protocol activity across all chains

Data Schema

Crosschain view (union of all 6 mainnets):
crosschain.agents.erc8004_events
Per-chain tables:
ethereum.agents.erc8004_events
base.agents.erc8004_events
polygon.agents.erc8004_events
scroll.agents.erc8004_events
bsc.agents.erc8004_events
gnosis.agents.erc8004_events
Testnet tables:
ethereum_sepolia.agents.erc8004_events
base_sepolia.agents.erc8004_events
scroll_sepolia.agents.erc8004_events

Key Concepts

Identity Registry

Agents register on-chain via an Identity Registry contract, receiving an NFT-based agent ID. Registration emits a Registered event with the agent’s creator and wallet address. Agents can update their URI (URIUpdated) and set arbitrary metadata key-value pairs (MetadataSet).

Reputation Registry

A separate Reputation Registry contract handles peer-to-peer feedback. Any address can submit scored feedback (0-100) for an agent (NewFeedback), which can later be revoked (FeedbackRevoked). Agents can append responses to feedback (ResponseAppended).

extra_fields

All event-specific decoded parameters are stored in a single extra_fields VARIANT (JSON) column. Access fields using Snowflake’s semi-structured syntax:
-- Feedback score
extra_fields:value::INT AS score

-- Rater address
extra_fields:clientAddress::STRING AS rater

-- Feedback tags
extra_fields:tag1::STRING AS tag1

Supported Chains

ChainPrimary Activity
BSCHighest registration volume
BaseHighest feedback volume
EthereumCore deployment
PolygonActive registrations
ScrollActive registrations
GnosisActive registrations

Sample Query

-- Daily agent registrations and feedback volume
SELECT
    DATE_TRUNC('day', block_timestamp)::DATE AS dt,
    COUNT(CASE WHEN event_name = 'Registered' THEN 1 END) AS registrations,
    COUNT(CASE WHEN event_name = 'NewFeedback' THEN 1 END) AS feedback_count
FROM crosschain.agents.erc8004_events
WHERE block_timestamp >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY ALL
ORDER BY dt;