mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-01 19:21:28 +02:00
Merge bitcoin/bitcoin#29553: assumeutxo: Add dumptxoutset height param, remove shell scripts
94b0adcc37
rpc, refactor: Prevent potential race conditions in dumptxoutset (Fabian Jahr)e868a6e070
doc: Improve assumeutxo guide and add more docs/comments (Fabian Jahr)b29c21fc92
assumeutxo: Remove devtools/utxo_snapshot.sh (Fabian Jahr)20a1c77aa7
contrib: Remove test_utxo_snapshots.sh (Fabian Jahr)8426850352
test: Test for dumptxoutset at specific height (Fabian Jahr)993cafe7e4
RPC: Add type parameter to dumptxoutset (Fabian Jahr)fccf4f91d2
RPC: Extract ReconsiderBlock helper (Fabian Jahr)446ce51c21
RPC: Extract InvalidateBlock helper (Fabian Jahr) Pull request description: This adds a height parameter to the `dumptxoutset` RPC. This internalizes the workflow that was previously done by scripts: roll back the chain to the height we actually want the snapshot from, create the snapshot, roll forward to the real tip again. The nice thing about internalizing this functionality is that we can write tests for the code and it gives us more options to make the functionality robust. The shell scripts we have so far will be more cumbersome to maintain in the long run, especially since we will only notice later when we have broken them. I think it's safe to remove these `test_utxo_snapshots.sh` as well when we have this option in `dumptxoutset` because we have also added some good additional functional test coverage for this functionality. ACKs for top commit: Sjors: re-utACK94b0adcc37
achow101: ACK94b0adcc37
mzumsande: ACK94b0adcc37
pablomartin4btc: re-ACK94b0adcc37
Tree-SHA512: a4c9af5f687d1ca7bfb579a36f363882823386b5fa80c05de531b05a2782b5da6ff5baf3ada4bca8f32f63975d86f1948175abed9affe51fc958472b5f838dab
This commit is contained in:
@ -1,47 +1,6 @@
|
||||
# assumeutxo
|
||||
# Assumeutxo Design
|
||||
|
||||
Assumeutxo is a feature that allows fast bootstrapping of a validating bitcoind
|
||||
instance.
|
||||
|
||||
## Loading a snapshot
|
||||
|
||||
There is currently no canonical source for snapshots, but any downloaded snapshot
|
||||
will be checked against a hash that's been hardcoded in source code.
|
||||
|
||||
Once you've obtained the snapshot, you can use the RPC command `loadtxoutset` to
|
||||
load it.
|
||||
|
||||
### Pruning
|
||||
|
||||
A pruned node can load a snapshot. To save space, it's possible to delete the
|
||||
snapshot file as soon as `loadtxoutset` finishes.
|
||||
|
||||
The minimum `-prune` setting is 550 MiB, but this functionality ignores that
|
||||
minimum and uses at least 1100 MiB.
|
||||
|
||||
As the background sync continues there will be temporarily two chainstate
|
||||
directories, each multiple gigabytes in size (likely growing larger than the
|
||||
downloaded snapshot).
|
||||
|
||||
### Indexes
|
||||
|
||||
Indexes work but don't take advantage of this feature. They always start building
|
||||
from the genesis block. Once the background validation reaches the snapshot block,
|
||||
indexes will continue to build all the way to the tip.
|
||||
|
||||
For indexes that support pruning, note that no pruning will take place between
|
||||
the snapshot and the tip, until the background sync has completed - after which
|
||||
everything is pruned. Depending on how old the snapshot is, this may temporarily
|
||||
use a significant amount of disk space.
|
||||
|
||||
## Generating a snapshot
|
||||
|
||||
The RPC command `dumptxoutset` can be used to generate a snapshot. This can be used
|
||||
to create a snapshot on one node that you wish to load on another node.
|
||||
It can also be used to verify the hardcoded snapshot hash in the source code.
|
||||
|
||||
The utility script
|
||||
`./contrib/devtools/utxo_snapshot.sh` may be of use.
|
||||
For notes on the usage of Assumeutxo, please refer to [the usage doc](/doc/assumeutxo.md).
|
||||
|
||||
## General background
|
||||
|
||||
@ -79,7 +38,7 @@ data.
|
||||
### "Normal" operation via initial block download
|
||||
|
||||
`ChainstateManager` manages a single Chainstate object, for which
|
||||
`m_snapshot_blockhash` is null. This chainstate is (maybe obviously)
|
||||
`m_from_snapshot_blockhash` is `std::nullopt`. This chainstate is (maybe obviously)
|
||||
considered active. This is the "traditional" mode of operation for bitcoind.
|
||||
|
||||
| | |
|
||||
|
Reference in New Issue
Block a user