#!/bin/bash # Script to export mining private key and wallet descriptors with private keys for backup # Author: 4NK Team # Date: 2026-01-23 set -e CONTAINER_NAME="bitcoin-signet-instance" DATADIR="/root/.bitcoin" WALLET_NAME="custom_signet" BACKUP_DIR="./backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.txt" # Create backup directory if it doesn't exist mkdir -p "${BACKUP_DIR}" echo "=== Exporting Bitcoin Signet Backup ===" echo "Container: ${CONTAINER_NAME}" echo "Backup file: ${BACKUP_FILE}" echo "" # Check if container is running if ! sudo docker ps --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then echo "Error: Container ${CONTAINER_NAME} is not running" exit 1 fi # Start backup file with header cat > "${BACKUP_FILE}" << EOF # Bitcoin Signet Backup # Generated: $(date -Iseconds) # Container: ${CONTAINER_NAME} # # WARNING: This file contains private keys. Keep it secure and encrypted. # ====================================================================== EOF # Export PRIVKEY (mining private key) echo "1. Exporting mining private key (PRIVKEY)..." PRIVKEY=$(sudo docker exec ${CONTAINER_NAME} cat ${DATADIR}/PRIVKEY.txt 2>/dev/null || echo "") if [[ -n "${PRIVKEY}" ]]; then cat >> "${BACKUP_FILE}" << EOF ## Mining Private Key (PRIVKEY) PRIVKEY=${PRIVKEY} EOF echo " ✓ PRIVKEY exported" else echo " ⚠ PRIVKEY not found in container" cat >> "${BACKUP_FILE}" << EOF ## Mining Private Key (PRIVKEY) # PRIVKEY not found in container EOF fi # Export SIGNETCHALLENGE echo "2. Exporting SIGNETCHALLENGE..." SIGNETCHALLENGE=$(sudo docker exec ${CONTAINER_NAME} cat ${DATADIR}/SIGNETCHALLENGE.txt 2>/dev/null || echo "") if [[ -n "${SIGNETCHALLENGE}" ]]; then cat >> "${BACKUP_FILE}" << EOF ## Signet Challenge SIGNETCHALLENGE=${SIGNETCHALLENGE} EOF echo " ✓ SIGNETCHALLENGE exported" else echo " ⚠ SIGNETCHALLENGE not found in container" cat >> "${BACKUP_FILE}" << EOF ## Signet Challenge # SIGNETCHALLENGE not found in container EOF fi # Export wallet descriptors with private keys echo "3. Exporting wallet descriptors with private keys..." cat >> "${BACKUP_FILE}" << EOF ## Wallet Descriptors (with private keys) # Wallet name: ${WALLET_NAME} # Command: bitcoin-cli -datadir=${DATADIR} listdescriptors true EOF # Get descriptors with private keys (true parameter includes private keys) DESCRIPTORS=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} listdescriptors true 2>/dev/null || echo "") if [[ -n "${DESCRIPTORS}" ]]; then echo "${DESCRIPTORS}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${DESCRIPTORS}" >> "${BACKUP_FILE}" echo " ✓ Wallet descriptors exported" else echo " ⚠ Failed to export wallet descriptors" cat >> "${BACKUP_FILE}" << EOF # Failed to export wallet descriptors # Make sure the wallet is loaded and accessible EOF fi # Export wallet info echo "4. Exporting wallet information..." cat >> "${BACKUP_FILE}" << EOF ## Wallet Information EOF WALLET_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getwalletinfo 2>/dev/null || echo "") if [[ -n "${WALLET_INFO}" ]]; then echo "${WALLET_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${WALLET_INFO}" >> "${BACKUP_FILE}" echo " ✓ Wallet info exported" else echo " ⚠ Failed to export wallet info" cat >> "${BACKUP_FILE}" << EOF # Failed to export wallet info EOF fi # Export network info echo "5. Exporting network information..." cat >> "${BACKUP_FILE}" << EOF ## Network Information EOF NETWORK_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getnetworkinfo 2>/dev/null || echo "") if [[ -n "${NETWORK_INFO}" ]]; then echo "${NETWORK_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${NETWORK_INFO}" >> "${BACKUP_FILE}" echo " ✓ Network info exported" else echo " ⚠ Failed to export network info" fi # Export blockchain info echo "6. Exporting blockchain information..." cat >> "${BACKUP_FILE}" << EOF ## Blockchain Information EOF BLOCKCHAIN_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getblockchaininfo 2>/dev/null || echo "") if [[ -n "${BLOCKCHAIN_INFO}" ]]; then echo "${BLOCKCHAIN_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${BLOCKCHAIN_INFO}" >> "${BACKUP_FILE}" echo " ✓ Blockchain info exported" else echo " ⚠ Failed to export blockchain info" fi # Add footer cat >> "${BACKUP_FILE}" << EOF # ====================================================================== # End of Backup # ====================================================================== EOF echo "" echo "=== Backup completed ===" echo "Backup file: ${BACKUP_FILE}" echo "File size: $(du -h "${BACKUP_FILE}" | cut -f1)" echo "" echo "⚠ WARNING: This file contains private keys. Keep it secure!" echo " Recommended: Encrypt this file before storing or transferring." echo "" echo "To encrypt the backup:" echo " gpg -c ${BACKUP_FILE}" echo ""