9 releases (4 stable)

new 1.2.0 Dec 12, 2024
1.1.1 Dec 8, 2024
1.0.0 Aug 9, 2024
0.2.0 Jul 12, 2024
0.1.0-alpha.3 May 9, 2024

#375 in Magic Beans

Download history 22/week @ 2024-09-15 22/week @ 2024-09-22 7/week @ 2024-09-29 2/week @ 2024-11-03 149/week @ 2024-12-01 390/week @ 2024-12-08

539 downloads per month

MIT/Apache

99KB
2K SLoC

crates-io Workflow Status

Indexer

InIndexer is a NEAR indexer framework.

Features

  • 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 or message_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 in IndexerOptions::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.

Feature flags

  • neardata: Neardata data source
  • lake: 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.

Dependencies

~23–39MB
~558K SLoC