#!/bin/bash # This script shows the steps to create an archive of the current UTXO Set # It will: # 1. Shutdown BTCPay Server # 2. Start bitcoind # 3. Prune it to up to 289 blocks from the tip # 4. Stop bitcoind # 5. Archive in a tarball the blocks and chainstate directories # 6. Restart BTCPay # 7. If AZURE_STORAGE_CONNECTION_STRING is set, then upload to azure storage and make the blob public, else print hash and tarball : "${AZURE_STORAGE_CONTAINER:=public}" if [[ "$AZURE_STORAGE_CONNECTION_STRING" ]] && ! [ -x "$(command -v az)" ]; then echo "You want to upload the utxoset to azure, but az is not installed. See https://docs.microsoft.com/en-us/cli/azure/ to install it." exit fi echo "Closing down btcpay... it can take a while" btcpay-down.sh for i in /var/lib/docker/volumes/generated_bitcoin_datadir/_data/utxo-snapshot-*; do echo "Deleting $i" rm $i done rm /var/lib/docker/volumes/generated_bitcoin_datadir/_data/utxo-snapshot-* # Run only bitcoind and connect to it SCRIPT="$(cat save-utxo-set-in-bitcoind.sh)" cd "`dirname $BTCPAY_ENV_FILE`" docker-compose -f $BTCPAY_DOCKER_COMPOSE run --rm -e "NBITCOIN_NETWORK=$NBITCOIN_NETWORK" bitcoind bash -c "$SCRIPT" btcpay-up.sh echo "Calculating the hash of the tar file..." TAR_FILE="$(echo /var/lib/docker/volumes/generated_bitcoin_datadir/_data/utxo-snapshot-*)" echo "Tar file of size $(ls -s -h $TAR_FILE)" TAR_FILE_HASH="$(sha256sum "$TAR_FILE" | cut -d " " -f 1)" if [[ "$AZURE_STORAGE_CONNECTION_STRING" ]]; then echo "Uploading to azure..." # Install az from https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest BLOB_NAME="$(basename -- $TAR_FILE)" az storage container create --name "$AZURE_STORAGE_CONTAINER" --public-access "blob" az storage blob upload -f "$TAR_FILE" \ -c "$AZURE_STORAGE_CONTAINER" \ -n "$BLOB_NAME" \ --content-type "application/x-tar" az storage blob metadata update --container-name "$AZURE_STORAGE_CONTAINER" --name "$BLOB_NAME" --metadata "sha256=$TAR_FILE_HASH" # Print the sha256sum. Downloaders will need to verify this STORAGE_URL="$(az storage blob url --container-name "$AZURE_STORAGE_CONTAINER" --name "$BLOB_NAME" --protocol "http")" echo "You can now download the UTXO on $STORAGE_URL" echo "Please, after download, verify the sha256 with:" echo "echo "$TAR_FILE_HASH $BLOB_NAME" | sha256sum -c -" rm "$TAR_FILE" else echo "SHA256: $TAR_FILE_HASH" echo "File at: $TAR_FILE" fi