zksync_snapshots_applier 0.1.0

Library for applying ZKsync state snapshots
Documentation
# `zksync_snapshots_applier`

Library responsible for recovering Postgres from a protocol-level snapshot.

## Recovery workflow

_(See [node docs](../../../docs/guides/external-node/07_snapshots_recovery.md) for a high-level snapshot recovery
overview and [snapshot creator docs](../../bin/snapshots_creator/README.md) for the snapshot format details)_

1. Recovery is started by querying the main node and determining the snapshot parameters. By default, recovery is
   performed from the latest snapshot, but it is possible to provide a manual override (L1 batch number of the
   snapshot).
2. Factory dependencies (= contract bytecodes) are downloaded from the object store and are atomically saved to Postgres
   together with the snapshot metadata (L1 batch number / L2 block numbers and timestamps, L1 batch state root hash, L2
   block hash etc.).
3. Storage log chunks are downloaded from the object store; each chunk is atomically saved to Postgres (`storage_logs`
   and `initial_writes` tables). This step has a configurable degree of concurrency to control speed – I/O load
   trade-off.
4. After all storage logs are restored, token information is fetched from the main node and saved in the corresponding
   table. Tokens are double-checked against storage logs.

Recovery is resilient to stops / failures; if the recovery process is interrupted, it will restart from the same
snapshot and will skip saving data that is already present in Postgres.

Recovery logic for node components (such as metadata calculator and state keeper) is intentionally isolated from
Postgres recovery. A component requiring recovery must organize it on its own. This is motivated by the fact that at
least some components requiring recovery may initialize after an arbitrary delay after Postgres recovery (or not run at
all) and/or may be instantiated multiple times for a single node. As an example, both of these requirements hold for
metadata calculator / Merkle tree.