fix wallet load/dump/list
This commit is contained in:
@@ -2,20 +2,25 @@
|
||||
|
||||
# RinCoin Wallet Restoration Script
|
||||
# Restores a wallet from a dump file on a new RinCoin node.
|
||||
# Prerequisites: New RinCoin node running in Docker, backup file available.
|
||||
# Prerequisites: RinCoin node running, backup file available.
|
||||
|
||||
set -euo pipefail
|
||||
set -eo pipefail
|
||||
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "Usage: $0 <path_to_backup_file>"
|
||||
if [[ $# -lt 1 ]] || [[ $# -gt 2 ]]; then
|
||||
echo "Usage: $0 <path_to_backup_file> [wallet_name]"
|
||||
echo "Example: $0 ~/rin_wallet_backups/rin_wallet_backup_20230923.txt"
|
||||
echo "Example: $0 ~/rin_wallet_backups/rin_wallet_backup_20230923.txt my_restored_wallet"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKUP_FILE="$1"
|
||||
CONTAINER="rincoin-node"
|
||||
WALLET_NAME="main" # Will be renamed to avoid conflicts
|
||||
NEW_WALLET_NAME="restored_main"
|
||||
NEW_WALLET_NAME="${2:-restored_main}" # Use provided name or default
|
||||
|
||||
# RPC Configuration
|
||||
RPC_USER="rinrpc"
|
||||
RPC_PASSWORD="745ce784d5d537fc06105a1b935b7657903cfc71a5fb3b90"
|
||||
RPC_HOST="localhost"
|
||||
RPC_PORT="9556"
|
||||
|
||||
# Verify backup file exists
|
||||
if [[ ! -f "$BACKUP_FILE" ]]; then
|
||||
@@ -23,41 +28,63 @@ if [[ ! -f "$BACKUP_FILE" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if container is running
|
||||
if ! sudo docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Error: ${CONTAINER} container is not running. Start it with 'sudo docker start ${CONTAINER}'."
|
||||
# Check if RIN node is running
|
||||
if ! pgrep -f "rincoind" > /dev/null; then
|
||||
echo "Error: RinCoin daemon is not running. Start it first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Stopping RinCoin node for safe restoration..."
|
||||
sudo docker stop "$CONTAINER"
|
||||
# Copy backup file to daemon's data directory
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
DAEMON_BACKUP_FILE="/data/restore_backup_${TIMESTAMP}.txt"
|
||||
SYSTEM_BACKUP_FILE="/mnt/data/docker_vol/rincoin/rincoin-node/data/restore_backup_${TIMESTAMP}.txt"
|
||||
|
||||
echo "Copying backup file into container..."
|
||||
sudo docker cp "$BACKUP_FILE" "$CONTAINER:/tmp/wallet_backup.txt"
|
||||
echo "Copying backup file to daemon directory..."
|
||||
cp "$BACKUP_FILE" "$SYSTEM_BACKUP_FILE"
|
||||
|
||||
echo "Starting RinCoin node..."
|
||||
sudo docker start "$CONTAINER"
|
||||
|
||||
# Wait for RPC to be ready
|
||||
echo "Waiting for node to fully start..."
|
||||
sleep 10
|
||||
echo "Backup file copied to: $DAEMON_BACKUP_FILE"
|
||||
|
||||
echo "Creating new wallet and importing keys..."
|
||||
|
||||
# Create a new wallet to avoid conflicts
|
||||
sudo docker exec "$CONTAINER" rincoin-cli -datadir=/data -conf=/data/rincoin.conf createwallet "$NEW_WALLET_NAME"
|
||||
CREATE_RESPONSE=$(curl -s -u "$RPC_USER:$RPC_PASSWORD" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc": "2.0", "id": "createwallet", "method": "createwallet", "params": ["'$NEW_WALLET_NAME'", false, false, "", false, false, true]}' \
|
||||
"http://$RPC_HOST:$RPC_PORT")
|
||||
|
||||
if echo "$CREATE_RESPONSE" | grep -q '"error":null'; then
|
||||
echo "✓ New wallet '$NEW_WALLET_NAME' created successfully"
|
||||
else
|
||||
echo "Error creating wallet: $CREATE_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Import the dump file
|
||||
sudo docker exec "$CONTAINER" rincoin-cli -datadir=/data -conf=/data/rincoin.conf -rpcwallet="$NEW_WALLET_NAME" importwallet /tmp/wallet_backup.txt
|
||||
echo "Importing wallet from backup file..."
|
||||
IMPORT_RESPONSE=$(curl -s -u "$RPC_USER:$RPC_PASSWORD" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc": "2.0", "id": "importwallet", "method": "importwallet", "params": ["'$DAEMON_BACKUP_FILE'"]}' \
|
||||
"http://$RPC_HOST:$RPC_PORT/wallet/$NEW_WALLET_NAME")
|
||||
|
||||
if echo "$IMPORT_RESPONSE" | grep -q '"error":null'; then
|
||||
echo "✓ Wallet imported successfully"
|
||||
else
|
||||
echo "Error importing wallet: $IMPORT_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Clean up
|
||||
sudo docker exec "$CONTAINER" rm /tmp/wallet_backup.txt
|
||||
echo "Cleaning up temporary files..."
|
||||
rm -f "$SYSTEM_BACKUP_FILE"
|
||||
|
||||
echo "✅ Wallet restored successfully!"
|
||||
echo "New wallet name: $NEW_WALLET_NAME"
|
||||
echo ""
|
||||
echo "Verify with:"
|
||||
echo "sudo docker exec $CONTAINER rincoin-cli -datadir=/data -conf=/data/rincoin.conf -rpcwallet=$NEW_WALLET_NAME getbalance"
|
||||
echo "curl -s -u \"$RPC_USER:$RPC_PASSWORD\" -H \"Content-Type: application/json\" -d '{\"jsonrpc\": \"2.0\", \"id\": \"getbalance\", \"method\": \"getbalance\", \"params\": []}' \"http://$RPC_HOST:$RPC_PORT/wallet/$NEW_WALLET_NAME\""
|
||||
echo ""
|
||||
echo "To use this wallet, update scripts to use -rpcwallet=$NEW_WALLET_NAME"
|
||||
echo "Or rename it back: unloadwallet $NEW_WALLET_NAME && loadwallet $WALLET_NAME"
|
||||
echo "Or check balance with:"
|
||||
echo "./rin/wallet/cmd/check_balance.sh"
|
||||
echo ""
|
||||
echo "To use this wallet as default, update scripts to use wallet name: $NEW_WALLET_NAME"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user