UTXO Set Snapshots#
At present, efforts are being focused on bootstrapping with a UTXO set snapshot. This allows for the operation of a node with a pruned UTXO set and full blocks, while concurrently facilitating bootstrapping with NiPoPoWs, and pruning headers in any mode.
This strategy ensures the acquisition of a verified UTXO set snapshot without the necessity of inspecting about 95% of the blockchain.
Motivation#
As the blockchain evolves, the requirements for downloading, storing, and processing the entire blockchain, including all full blocks, escalate. In blockchains like Ergo or Ethereum, where the UTXO set snapshot is authenticated, this resource strain can be mitigated. This can be achieved by downloading and applying a historical UTXO set snapshot (or accounts snapshot in the case of Ethereum) along with the full blocks succeeding it.
According to this research paper, this method can be as secure as processing all blocks, assuming an overwhelming probability function of the full-blocks suffix length.
This specification explains how bootstrapping with a UTXO set snapshot is implemented in the Ergo protocol reference client. It will be beneficial in understanding the implementation and in developing alternative clients compatible with the reference client.
Implementation Details#
The UTXO set is authenticated using an AVL+ tree. The design principles for constructing this tree can be found in this research paper, and the tree implementation is available in the Scrypto framework on GitHub.
Time is divided into epochs, with each epoch comprising 51,200 blocks (~72 days). A snapshot is taken after the last block of an epoch, specifically, after processing a block with a height where h % 51200 == 51199.
Chunk Format#
To be provided
Manifest Format#
To be provided
Networking Layer#
To be provided
Bootstrapping#
To be provided
Node Configuration#
The node uses bootstrapping with a UTXO set snapshot if ergo.node.utxoBootstrap = true is set in the configuration.
Sync Info V3#
To be provided
Resources#
Here are some relevant PRs on GitHub:
- Bootstrapping with UTXO set - Part 1: Snapshot creation #1444
- Preparation for bootstrapping with UTXO set snapshot, part 2 #1940
- Utxo set bootstrapping code part 3 #1947
- Utxo set bootstrapping preparation, part 5 #1985 (recently merged)
Additionally, there is a PR related to P2P networking support for bootstrapping with UTXO set snapshot:
- P2P networking support for bootstrapping with UTXO set snapshot #1444 (recently merged)