-
Notifications
You must be signed in to change notification settings - Fork 35.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
script, assumeutxo: Enhance validations in utxo_snapshot.sh #28852
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -1,13 +1,15 @@ | ||||||||||
#!/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 | ||||||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||||||||
# | ||||||||||
export LC_ALL=C | ||||||||||
|
||||||||||
set -ueo pipefail | ||||||||||
|
||||||||||
NETWORK_DISABLED=false | ||||||||||
|
||||||||||
if (( $# < 3 )); then | ||||||||||
echo 'Usage: utxo_snapshot.sh <generate-at-height> <snapshot-out-path> <bitcoin-cli-call ...>' | ||||||||||
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. | ||||||||||
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}" | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note that once There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same as in the previous PR #27845. We could add more context in the output message and perhaps we could update the documentation as well: bitcoin/doc/design/assumeutxo.md Lines 42 to 45 in 5800c55
|
||||||||||
|
||||||||||
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 | ||||||||||
pablomartin4btc marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
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. | ||||||||||
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") | ||||||||||
${BITCOIN_CLI_CALL} invalidateblock "${PIVOT_BLOCKHASH}" | ||||||||||
|
||||||||||
|
@@ -39,6 +92,3 @@ 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}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "script: Enhance validations in utxo_snapshot.sh" (11b7269)
Assignment seems a little out of place here, would suggest moving it below
PRUNE=...
with other variable assignments.