mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
Merge bitcoin/bitcoin#28852: script, assumeutxo: Enhance validations in utxo_snapshot.sh
11b7269d83a56f919f9dddb7f7c72a96d428627f script: Enhance validations in utxo_snapshot.sh (pablomartin4btc) Pull request description: This PR resolves #27841 and some more: - Ensure that the snapshot height is higher than the pruned block height when the node is pruned (Suggested by @Sjors [here](https://github.com/bitcoin/bitcoin/pull/28553#issuecomment-1804941396)). - Validate the correctness of the file path and check if the file already exists (@hazeycode's [#27845](https://github.com/bitcoin/bitcoin/pull/27845)). - Make network activity disablement optional for the user (Suggested by @Sjors [here](https://github.com/bitcoin/bitcoin/pull/16899#discussion_r342735815) and [here](https://github.com/bitcoin/bitcoin/pull/16899#issuecomment-536520911)). - Ensure the `reconsiderblock` command is triggered on exit (@hazeycode's same PR as above), even in the case of user interruption (Ctrl-C). In order to perform some testing please follow the instructions in the description of previous @hazeycode's PR #27845. ACKs for top commit: Sjors: tACK 11b7269d83a56f919f9dddb7f7c72a96d428627f ryanofsky: Code review ACK 11b7269d83a56f919f9dddb7f7c72a96d428627f Tree-SHA512: 2b699894c6f732ad5104f5a2bcf5dc86ed31edcc9d664690cab55b94a8ab00e2ca5bde901ee1d63acddca7ea80ad1734d8cfe78f9c02f8470f264fe93a2af759
This commit is contained in:
parent
fd2e88d6f3
commit
8cd85d311f
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 The Bitcoin Core developers
|
# Copyright (c) 2019-2023 The Bitcoin Core developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
#
|
#
|
||||||
@ -8,6 +8,8 @@ export LC_ALL=C
|
|||||||
|
|
||||||
set -ueo pipefail
|
set -ueo pipefail
|
||||||
|
|
||||||
|
NETWORK_DISABLED=false
|
||||||
|
|
||||||
if (( $# < 3 )); then
|
if (( $# < 3 )); then
|
||||||
echo 'Usage: utxo_snapshot.sh <generate-at-height> <snapshot-out-path> <dash-cli-call ...>'
|
echo 'Usage: utxo_snapshot.sh <generate-at-height> <snapshot-out-path> <dash-cli-call ...>'
|
||||||
echo
|
echo
|
||||||
@ -26,9 +28,60 @@ OUTPUT_PATH="${1}"; shift;
|
|||||||
# Most of the calls we make take a while to run, so pad with a lengthy timeout.
|
# Most of the calls we make take a while to run, so pad with a lengthy timeout.
|
||||||
BITCOIN_CLI_CALL="${*} -rpcclienttimeout=9999999"
|
BITCOIN_CLI_CALL="${*} -rpcclienttimeout=9999999"
|
||||||
|
|
||||||
|
# Check if the node is pruned and get the pruned block height
|
||||||
|
PRUNED=$( ${BITCOIN_CLI_CALL} getblockchaininfo | awk '/pruneheight/ {print $2}' | tr -d ',' )
|
||||||
|
|
||||||
|
if (( GENERATE_AT_HEIGHT < PRUNED )); then
|
||||||
|
echo "Error: The requested snapshot height (${GENERATE_AT_HEIGHT}) should be greater than the pruned block height (${PRUNED})."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Early exit if file at OUTPUT_PATH already exists
|
||||||
|
if [[ -e "$OUTPUT_PATH" ]]; then
|
||||||
|
(>&2 echo "Error: $OUTPUT_PATH already exists or is not a valid path.")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Validate that the path is correct
|
||||||
|
if [[ "${OUTPUT_PATH}" != "-" && ! -d "$(dirname "${OUTPUT_PATH}")" ]]; then
|
||||||
|
(>&2 echo "Error: The directory $(dirname "${OUTPUT_PATH}") does not exist.")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
function cleanup {
|
||||||
|
(>&2 echo "Restoring chain to original height; this may take a while")
|
||||||
|
${BITCOIN_CLI_CALL} reconsiderblock "${PIVOT_BLOCKHASH}"
|
||||||
|
|
||||||
|
if $NETWORK_DISABLED; then
|
||||||
|
(>&2 echo "Restoring network activity")
|
||||||
|
${BITCOIN_CLI_CALL} setnetworkactive true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function early_exit {
|
||||||
|
(>&2 echo "Exiting due to Ctrl-C")
|
||||||
|
cleanup
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prompt the user to disable network activity
|
||||||
|
read -p "Do you want to disable network activity (setnetworkactive false) before running invalidateblock? (Y/n): " -r
|
||||||
|
if [[ "$REPLY" =~ ^[Yy]*$ || -z "$REPLY" ]]; then
|
||||||
|
# User input is "Y", "y", or Enter key, proceed with the action
|
||||||
|
NETWORK_DISABLED=true
|
||||||
|
(>&2 echo "Disabling network activity")
|
||||||
|
${BITCOIN_CLI_CALL} setnetworkactive false
|
||||||
|
else
|
||||||
|
(>&2 echo "Network activity remains enabled")
|
||||||
|
fi
|
||||||
|
|
||||||
# Block we'll invalidate/reconsider to rewind/fast-forward the chain.
|
# Block we'll invalidate/reconsider to rewind/fast-forward the chain.
|
||||||
PIVOT_BLOCKHASH=$($BITCOIN_CLI_CALL getblockhash $(( GENERATE_AT_HEIGHT + 1 )) )
|
PIVOT_BLOCKHASH=$($BITCOIN_CLI_CALL getblockhash $(( GENERATE_AT_HEIGHT + 1 )) )
|
||||||
|
|
||||||
|
# Trap for normal exit and Ctrl-C
|
||||||
|
trap cleanup EXIT
|
||||||
|
trap early_exit INT
|
||||||
|
|
||||||
(>&2 echo "Rewinding chain back to height ${GENERATE_AT_HEIGHT} (by invalidating ${PIVOT_BLOCKHASH}); this may take a while")
|
(>&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}"
|
${BITCOIN_CLI_CALL} invalidateblock "${PIVOT_BLOCKHASH}"
|
||||||
|
|
||||||
@ -39,6 +92,3 @@ else
|
|||||||
(>&2 echo "Generating UTXO snapshot...")
|
(>&2 echo "Generating UTXO snapshot...")
|
||||||
${BITCOIN_CLI_CALL} dumptxoutset "${OUTPUT_PATH}"
|
${BITCOIN_CLI_CALL} dumptxoutset "${OUTPUT_PATH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
(>&2 echo "Restoring chain to original height; this may take a while")
|
|
||||||
${BITCOIN_CLI_CALL} reconsiderblock "${PIVOT_BLOCKHASH}"
|
|
||||||
|
Loading…
Reference in New Issue
Block a user