InIndexer is a NEAR indexer framework.
- Different sources of near data: neardata (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
.
neardata
: Neardata data sourcelake
: NEAR Lake data source
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, new-token-indexer, intear-oracle indexer). By the way, some of these repositories are libraries, so if you want the same functionality but with a different event handler, you can use them in your code by specifying them as git dependencies.
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.
If you use neardata, you can enable optimistic block retrieval if you don't care about finality and need to minimize latency, just call .optimistic()
on the data provider.