Built to be auditable
How IBCFlow turns raw IBC packets into numbers you can verify: no synthesized hashes, no failed transfers counted as volume, and no silent gaps in the index.
Correctness guarantees
Constraints the indexer enforces on every packet, not after the fact.
Real transaction hashes
Every tx hash is the SHA-256 of the real transaction bytes. We never synthesize a placeholder; if the bytes are missing the row is dropped rather than fabricated, so every hash verifies on-chain.
Failed transfers excluded
Timed-out and error-acknowledged packets never count toward completed volume. An in-flight send is counted once, and only as settled volume after it is acknowledged.
Key-based packet pairing
Sends and receives are matched on (chain, channel, sequence), not on timing or amount heuristics, so a transfer is counted exactly once across its full lifecycle.
Honest USD valuation
Volume is valued from on-chain amounts against a priced asset registry. Tokens with no known price still count toward transfer totals but never inflate USD volume.
No silent index gaps
If a block range fails to fetch, the indexer aborts the range before writing instead of advancing its cursor past the hole. There are no permanent gaps and no double counting on retry.
Data sources
Read directly from the chains, decoded from real on-chain events.
CometBFT RPC
IBC v1 packet lifecycle read directly from validator-operated full nodes across the indexed chains.
Ethereum ICS26 router
Eureka / IBC v2 packets decoded from real on-chain events emitted by the Ethereum settlement router.
Open feeds and APIs
The dashboard dogfoods exactly what external integrators consume.
Bridge-volume feed in DeFiLlama format, returning real non-zero data.
REST APIVersioned /v1 endpoints for chains, assets, channels, zones, relayers.
GraphQLA typed query surface for time series and aggregates.
OpenAPI docsInteractive schema with a try-it console.
PrometheusOperational /metrics for scraping into Grafana.