
High-performance blockchain indexer for Clanker token factory on Base, built with Substreams.
Clanker is a set of audited smart contracts on Base that create token markets rewarding token creators. Tokens are deployed via Farcaster, web interface, SDK, or direct contract interaction.
wasm32-unknown-unknown target# Install Rust wasm target
rustup target add wasm32-unknown-unknown
# Install substreams CLI (macOS)
brew install streamingfast/tap/substreams
# Authenticate
substreams auth
# Generate protobuf code and compile to WASM
substreams build
# Test with a small block range
substreams run -e base map_clanker_events -s 22520000 -t +1000
# Run with JSON output
substreams run -e base map_clanker_events -s 22520000 -t +1000 -o jsonl
# Create the database tables
psql -d your_database -f schema.sql
# Run the SQL sink
substreams-sink-sql run \
base \
"postgresql://user:pass@localhost:5432/clanker?sslmode=disable" \
substreams.yaml \
db_out
| Module | Type | Description |
|---|---|---|
map_clanker_events |
Map | Extracts factory events (TokenCreated, FeeClaims, etc.) |
store_tokens |
Store | Maintains registry of all Clanker tokens |
map_token_transfers |
Map | ERC20 transfers for known Clanker tokens |
store_token_volume |
Store | Accumulates transfer volume per token (BigInt) |
store_token_transfer_counts |
Store | Tracks transfer counts per token |
store_creator_fees |
Store | Accumulates fees claimed per creator |
store_creator_token_counts |
Store | Counts tokens launched per creator |
db_out |
Map | Database sink output (PostgreSQL/ClickHouse) |
The Clanker factory address can be configured via params:
substreams run -e base map_clanker_events \
-p map_clanker_events="clanker_factory=0xe85a59c628f7d27878aceb4bf3b35733630083a9" \
-s 22520000 -t +1000
| Contract | Address |
|---|---|
| Clanker Factory (v4) | 0xE85A59c628F7d27878ACeB4bf3b35733630083a9 |
clanker-substreams/
├── substreams.yaml # Manifest
├── schema.sql # SQL schema for sink
├── Cargo.toml # Rust dependencies
├── build.rs # ABI code generation
├── clanker.jpeg # Package icon
├── abi/
│ ├── clanker_factory.json # Factory ABI
│ └── clanker_token.json # Token ABI
├── proto/
│ └── clanker.proto # Protobuf schemas
└── src/
├── lib.rs # Module implementations
├── abi/
│ └── mod.rs # Generated ABI bindings
└── pb/ # Generated protobuf code (auto)
SELECT name, symbol, admin, block_timestamp
FROM tokens
WHERE block_timestamp > EXTRACT(EPOCH FROM NOW() - INTERVAL '24 hours')
ORDER BY block_timestamp DESC;
SELECT admin, COUNT(*) as token_count
FROM tokens
GROUP BY admin
ORDER BY token_count DESC
LIMIT 20;
SELECT recipient, amount, block_timestamp
FROM fee_claims
WHERE token = '0x...'
ORDER BY block_timestamp DESC;
MIT
substreams gui clanker-substreams@v0.2.0 map_clanker_eventssubstreams gui clanker-substreams@v0.2.0 map_token_transferssubstreams gui clanker-substreams@v0.2.0 db_outsubstreams gui clanker-substreams@v0.2.0 store_tokenssubstreams gui clanker-substreams@v0.2.0 store_token_volumesubstreams gui clanker-substreams@v0.2.0 store_token_transfer_countssubstreams gui clanker-substreams@v0.2.0 store_creator_feessubstreams gui clanker-substreams@v0.2.0 store_creator_token_countsmessage
FileDescriptorSet
message
FileDescriptorProto
message
DescriptorProto
message
ExtensionRangeOptions
message
FieldDescriptorProto
message
OneofDescriptorProto
message
EnumDescriptorProto
message
EnumValueDescriptorProto
message
ServiceDescriptorProto
message
MethodDescriptorProto
message
FileOptions
message
MessageOptions
message
FieldOptions
message
OneofOptions
message
EnumOptions
message
EnumValueOptions
message
ServiceOptions
message
MethodOptions
message
UninterpretedOption
message
SourceCodeInfo
message
GeneratedCodeInfo
message
Any
message
Timestamp
message
Modules
message
Binary
message
Module
message
Package
message
NetworkParams
message
PackageMetadata
message
ModuleMetadata
message
Clock
message
BlockRef
message
Request
message
Response
message
BlockUndoSignal
message
BlockScopedData
message
SessionInit
message
InitialSnapshotComplete
message
InitialSnapshotData
message
MapModuleOutput
message
StoreModuleOutput
message
OutputDebugInfo
message
ModulesProgress
message
ProcessedBytes
message
Error
message
Job
message
Stage
message
ModuleStats
message
ExternalCallMetric
message
StoreDelta
message
BlockRange
message
Block
message
BlockHeader
message
Uint64NestedArray
message
Uint64Array
message
BigInt
message
TransactionTrace
message
AccessTuple
message
SetCodeAuthorization
message
TransactionReceipt
message
Log
message
Call
message
StorageChange
message
BalanceChange
message
NonceChange
message
AccountCreation
message
CodeChange
message
GasChange
message
HeaderOnlyBlock
message
BlockWithRefs
message
TransactionTraceWithBlockRef
message
TransactionRefs
message
BlockRef
enum
TransactionTraceStatus
enum
CallType
message
DeployRequest
message
Parameter
message
DeployResponse
message
UpdateRequest
message
UpdateResponse
message
InfoRequest
message
InfoResponse
message
SinkProgress
message
PackageInfo
message
ListRequest
message
ListResponse
message
DeploymentWithStatus
message
RemoveRequest
message
RemoveResponse
message
PauseRequest
message
PauseResponse
message
StopRequest
message
StopResponse
message
ResumeRequest
message
ResumeResponse
enum
DeploymentStatus
message
DatabaseChanges
message
TableChange
message
CompositePrimaryKey
message
Field
message
RpcCalls
message
RpcCall
message
RpcResponses
message
RpcResponse
message
RpcGetBalanceRequest
message
RpcGetBalanceResponse
message
RpcGetBalanceRequests
message
RpcGetBalanceResponses
message
CombinedFilter
message
MultiLogFilter
message
LogFilter
message
MultiCallToFilter
message
CallToFilter
message
HeaderOnly
message
ClankerEvents
message
TokenCreated
message
Token
message
FeeClaim
message
ExtensionTriggered
message
TokenMetadataUpdate
message
TokenVerified
message
TokenTransfers
message
TokenTransfer