InIndexer is a NEAR indexer framework.
- Different sources of near data: neardata-server (implemented),
AWS Lake (only consecutive ascending ranges
are supported), local file storage for backfilling (planned), you can add your own sources by implementing
MessageStreamer
ormessage_provider::MessageProvider
trait. - Simple indexer interface: you only need to implement
Indexer
trait and handle receipts, blocks, transactions, or transactions with all receipts included, at a cost of some preprocessing overhead (around 1-2ms in release mode with 80-100 TPS on Slime's PC, this can be disabled inIndexerOptions::preprocess_transactions
). - Retries, performance warnings, skipped blocks handling, and other features are built-in, so you can focus on your indexer logic.
- Auto-Continue: the indexer will save the last processed block height to the file and continue from it on the next run. Includes a Ctrl+C handler for graceful shutdown.
- Some helper functions and types for working with logs, balances, and other commonly used functionality in
near_utils
.
This crate only works with tokio runtime.
If you want to see some examples, check minimal examples in examples/ or real indexers used in Intear infrastructure (nft-indexer, potlock-indexer, trade-indexer). By the way, these repositories are libraries, so if you want the same functionality but with a different event handler, you can use them in your code.
To run multiple indexers at once without making a new request for each indexer, use MultiIndexer
, with MapErrorIndexer
if your indexers have different error types.