You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.6 KiB
44 lines
1.6 KiB
#!/usr/bin/env bash |
|
# |
|
# Copyright (c) 2019 The Bitcoin Core developers |
|
# Distributed under the MIT software license, see the accompanying |
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
|
# |
|
export LC_ALL=C |
|
|
|
set -ueo pipefail |
|
|
|
if (( $# < 3 )); then |
|
echo 'Usage: utxo_snapshot.sh <generate-at-height> <snapshot-out-path> <bitcoin-cli-call ...>' |
|
echo |
|
echo " if <snapshot-out-path> is '-', don't produce a snapshot file but instead print the " |
|
echo " expected assumeutxo hash" |
|
echo |
|
echo 'Examples:' |
|
echo |
|
echo " ./contrib/devtools/utxo_snapshot.sh 570000 utxo.dat ./src/bitcoin-cli -datadir=\$(pwd)/testdata" |
|
echo ' ./contrib/devtools/utxo_snapshot.sh 570000 - ./src/bitcoin-cli' |
|
exit 1 |
|
fi |
|
|
|
GENERATE_AT_HEIGHT="${1}"; shift; |
|
OUTPUT_PATH="${1}"; shift; |
|
# Most of the calls we make take a while to run, so pad with a lengthy timeout. |
|
BITCOIN_CLI_CALL="${*} -rpcclienttimeout=9999999" |
|
|
|
# Block we'll invalidate/reconsider to rewind/fast-forward the chain. |
|
PIVOT_BLOCKHASH=$($BITCOIN_CLI_CALL getblockhash $(( GENERATE_AT_HEIGHT + 1 )) ) |
|
|
|
(>&2 echo "Rewinding chain back to height ${GENERATE_AT_HEIGHT} (by invalidating ${PIVOT_BLOCKHASH}); this may take a while") |
|
${BITCOIN_CLI_CALL} invalidateblock "${PIVOT_BLOCKHASH}" |
|
|
|
if [[ "${OUTPUT_PATH}" = "-" ]]; then |
|
(>&2 echo "Generating txoutset info...") |
|
${BITCOIN_CLI_CALL} gettxoutsetinfo | grep hash_serialized_2 | sed 's/^.*: "\(.\+\)\+",/\1/g' |
|
else |
|
(>&2 echo "Generating UTXO snapshot...") |
|
${BITCOIN_CLI_CALL} dumptxoutset "${OUTPUT_PATH}" |
|
fi |
|
|
|
(>&2 echo "Restoring chain to original height; this may take a while") |
|
${BITCOIN_CLI_CALL} reconsiderblock "${PIVOT_BLOCKHASH}"
|
|
|