Drop-in replacement for subnet-evm that indexes blocks with receipts and traces locally. Exposes a WebSocket firehose starting at port 9090.
docker run -e VM_IDS=YourVmId1,YourVmId2 \
containerman17/indexing-subnet-evm:v0.8.0_v1.14.0 \
--network-id=fuji --track-subnets=YourSubnetId
The plugin binary ships under the canonical subnet-evm VM ID. Set VM_ID or VM_IDS (comma-separated) to copy it to your chain's VM ID at startup.
| Variable | Default | Description |
|---|---|---|
VM_ID | - | Single VM ID to register the plugin as |
VM_IDS | - | Comma-separated list of VM IDs |
INDEXER_SERVER_ADDR | :9090 | Firehose server base port (auto-increments if taken) |
Each chain instance starts its own HTTP server. If port 9090 is taken, it tries 9091, 9092, etc.
GET /infoReturns chain identity and sync status.
{"chainID":"2pGcTLh9Z5YCjmU871k2Z5waC8cCXYJnafYz1h7RJjz7u9Nmg2","latestBlock":12345678}
Use this to discover which chain is on which port when running multiple L1s.
GET /ws?from=NWebSocket endpoint. Streams blocks starting from height N (default: 1).
Protocol:
Frame format after decompression:
{"number":123,"hash":"0x...","receipts":[...],"traces":[...]}
{"number":124,"hash":"0x...","receipts":[...],"traces":[...]}
Client pseudocode:
ws = connect("ws://localhost:9090/ws?from=1")
decoder = zstd.decompressor()
while frame := ws.recv():
jsonl = decoder.decompress(frame)
for line in jsonl.split('\n'):
block = json.loads(line)
process(block)
Accept() callschainData/{chainID}/indexer/Data lives with the node. If you wipe chainData, the index goes with it.
Content type
Image
Digest
sha256:b690e48bc…
Size
104 MB
Last updated
9 months ago
docker pull containerman17/indexing-subnet-evm