#!/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() { run_electrum stop 2>/dev/null || 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}"; 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 wait