# Features

## **Works with any web3-compatible node**

As long as you have a web3-compatible node with an accessible JSON-RPC endpoint, you're good to go. It even works with Infura's API.

## **Automatic backfilling**

No matter if the tool has been offline for a period of time or it is the first time it starts, if the backfilling feature is enabled, it will automatically take care of queueing the necessary blocks for scraping.

* if the feature is enabled, when the process first starts, it will add all the blocks in the `[0, best block]` interval into the todo list
* if the process is stopped for a while, it will automatically add all the blocks in the `[highest DB block, best block]` interval into the todo list
* since the redis list used for task management is a sorted set, the highest blocks always have priority - this means new blocks will be processed as soon as they appear while the backfilling will be happening in the otherwise-idle time

## **Chain reorganisations (reorg) handling**

Whenever a reorg is detected we check the db for a block with the same number but different hash and replace it with the newest version. Note: this depends on the behavior of the node to which Memento is connected and it doesn't guarantee the data is 100% reorg-proof.

## **Lag function**

If you don't want to deal with reorgs, enable the lag function, set a value (default 10 blocks) and enjoy your reorg-free data.

* when this function is enabled, Memento will wait a number of blocks (or confirmations) before scraping and indexing a specific block
* for example, if the lag feature is enabled and the value is set to `value: 10`, Memento will only scrape the block `100` when the best block in the network is higher than `110`

## **Data validator**

The tool includes a validator that checks if the data makes sense from a logical integrity standpoint for every block scraped. This avoids any inconsistencies that may occur throughout the scraping process.

## **Automatic migrations**

If the feature is enabled, whenever the `run` function is called, it will automatically try to execute the database migrations. No need to worry when doing an upgrade.
