Produces DatabaseChanges for all ERC-8004 events and aggregated state. Powers both PostgreSQL and ClickHouse sinks.
Output
sf.substreams.sink.database.v1.DatabaseChanges

Package ref
erc8004-substreams@v0.3.0Run package
CLI
Run db_out from the command line.
substreams run erc8004-substreams@v0.3.0 db_out -e basesubstreams auth or directly on thegraph.market (see docs).README
High-performance Substreams indexer for ERC-8004 Trustless Agents on Base.

| Contract | Address | Events |
|---|---|---|
| IdentityRegistry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 | Registered, Transfer, MetadataSet, URIUpdated |
| ReputationRegistry | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 | NewFeedback, FeedbackRevoked, ResponseAppended |
| Module | Type | Description |
|---|---|---|
map_events | map | Extracts all ERC-8004 events from both contracts |
store_agents | store | Tracks agent owner, URI, and wallet state |
store_feedback_counts | store | Aggregate feedback/response counts per agent |
store_reputation | store | Running reputation scores per agent and tag |
map_flash_events | map | Flashblocks streaming at 200ms latency (partial blocks safe) |
db_out | map | Produces DatabaseChanges for PostgreSQL/ClickHouse |
# Authenticate
substreams auth
# Build
substreams build
# Test with 1000 blocks
substreams run -s 25000000 -t +1000 map_events
# Visual debugger
substreams gui -s 25000000 -t +1000 map_events
docker compose up -d postgres
substreams-sink-sql setup "psql://erc8004:erc8004pass@localhost:5432/erc8004?sslmode=disable" ./erc8004-substreams-v0.3.0.spkg
substreams-sink-sql run "psql://erc8004:erc8004pass@localhost:5432/erc8004?sslmode=disable" ./erc8004-substreams-v0.3.0.spkg
docker compose up -d clickhouse
substreams-sink-sql setup "clickhouse://default:@localhost:9000/default" ./erc8004-substreams-v0.3.0.spkg
substreams-sink-sql run "clickhouse://default:@localhost:9000/default" ./erc8004-substreams-v0.3.0.spkg
The ClickHouse schema includes 6 materialized views for real-time analytics:
agents — Agent identities (owner, URI, wallet)agent_metadata — Key-value metadata per agentagent_transfers — Transfer historyfeedbacks — All feedback entries with scores and tagsresponses — Feedback responsesidentity_events — Raw IdentityRegistry event logreputation_events — Raw ReputationRegistry event logmake build # Build WASM + spkg
make run # Test run (1000 blocks)
make gui # Visual debugger
make docker-up # Start Postgres + ClickHouse + Grafana
make all-postgres # Full setup: build + setup + run PostgreSQL sink
make all-clickhouse # Full setup: build + setup + run ClickHouse sink
Stream ERC-8004 events with 200ms latency using Base Flashblocks:
# Stream live with partial blocks
substreams run -e https://base-mainnet.streamingfast.io map_flash_events -s -1 --partial-blocks
# Visual debugger with Flashblocks
substreams gui -e https://base-mainnet.streamingfast.io map_flash_events -s -1 --partial-blocks
# Webhook sink for real-time notifications
substreams sink webhook --partial-blocks -e https://base-mainnet.streamingfast.io http://your-webhook.com ./erc8004-substreams-v0.3.0.spkg -s -1
The map_flash_events module only processes transactionTraces — no block-level aggregation — so it's safe for partial blocks. You get each ERC-8004 event as soon as it's sequenced by the Base sequencer, rather than waiting for full block confirmation.
Modules
Produces DatabaseChanges for all ERC-8004 events and aggregated state. Powers both PostgreSQL and ClickHouse sinks.
Output
sf.substreams.sink.database.v1.DatabaseChanges
Extracts all ERC-8004 events from IdentityRegistry and ReputationRegistry contracts on Base. Covers agent registrations, transfers, metadata changes, feedback, revocations, and responses.
Output
erc8004.v1.EventsInputs
Flashblocks-compatible module for 200ms streaming on Base. Only processes transactionTraces — no block-level aggregation. Safe for partial blocks. Use with --partial-blocks flag: substreams run -e https://base-mainnet.streamingfast.io map_flash_events -s -1 --partial-blocks
Output
erc8004.v1.EventsInputs
Tracks current agent state: owner address, URI, and wallet. Key format: agent:{agentId} → owner|uri|wallet
Store value
string
Update policy
set
Inputs
Tracks total feedback count, active (non-revoked) count, and response count per agent. Keys: feedback_total:{agentId}, feedback_active:{agentId}, responses:{agentId}
Store value
int64
Update policy
add
Inputs
Maintains running reputation score aggregates per agent. Key: rep:{agentId} → sum_value|count|avg Also per-tag: rep:{agentId}:{tag1} → sum_value|count|avg
Store value
string
Update policy
set
Inputs