Files
nullcart/electrum-daemon/docker-entrypoint.sh
T

65 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
NETWORK_FLAG="--${ELECTRUM_NETWORK}"
WALLET_PATH="/electrum/wallet/${ELECTRUM_WALLET_NAME}"
DATA_DIR="/electrum/data"
LOAD_WALLET_MAX_ATTEMPTS=90
DAEMON_STARTUP_WAIT_SECONDS=5
run_electrum() { electrum "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
run_electrum_offline() { electrum --offline "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
maybe_stop_electrum() {
echo "Trying to stop Electrum if it may still be running..."
run_electrum stop >/dev/null 2>&1 || true
}
mkdir -p /electrum/wallet "${DATA_DIR}"
chmod 700 /electrum/wallet
if [[ ! -f "${WALLET_PATH}" ]]; then
echo "Creating ${ELECTRUM_NETWORK} wallet at ${WALLET_PATH}..."
run_electrum_offline create -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}"
chmod 600 "${WALLET_PATH}" 2>/dev/null || true
echo "Wallet created at ${WALLET_PATH}"
fi
maybe_stop_electrum
run_electrum_offline setconfig rpcuser "${ELECTRUM_DAEMON_RPC_USER}"
run_electrum_offline setconfig rpcpassword "${ELECTRUM_DAEMON_RPC_PASSWORD}"
run_electrum_offline setconfig rpchost 0.0.0.0
run_electrum_offline setconfig rpcport "${ELECTRUM_DAEMON_PORT}"
run_electrum_offline setconfig server "${ELECTRUM_SERVER}"
trap 'run_electrum stop || true' SIGTERM SIGINT
echo "Starting Electrum daemon..."
run_electrum daemon &
echo "Waiting for daemon connection (${DAEMON_STARTUP_WAIT_SECONDS}s)..."
sleep "${DAEMON_STARTUP_WAIT_SECONDS}"
load_wallet_attempt=0
echo "Loading wallet..."
until run_electrum load_wallet -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}" >/dev/null 2>&1; do
load_wallet_attempt=$((load_wallet_attempt + 1))
if [[ load_wallet_attempt -ge LOAD_WALLET_MAX_ATTEMPTS ]]; then
echo "Timed out waiting to load wallet into Electrum daemon" >&2
exit 1
fi
echo "Load wallet attempt ${load_wallet_attempt}/${LOAD_WALLET_MAX_ATTEMPTS} failed. Daemon may not be ready yet. Retrying in 1s..."
sleep 1
echo "Loading wallet..."
done
echo "Wallet loaded"
wait