git / moonbite-core / contrib/devtools/utxo_snapshot.sh · raw

#!/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=Cset -ueo pipefailif (( $# < 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 1fiGENERATE_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}"