#!/usr/bin/env zsh # Mempool.Space CKSolo Pool Start Script - PortlandHODL # # Options for base CKSolo config [No Failover / Proxy] # $1 - NETWORK # $2 - Port (optional, defaults to 3333) # Initialize variables DAEMON=$1 NETWORK=${DAEMON} # Context Alias COINBASE_PAYOUT_ADDRESS="" # Empty payout address because it will be overwritten by network based config, PORT=${2:-3333} # Use port provided as 3rd argument, or default to 3333 if not specified RPC_PORT=8332 # Default to mainnet RPC port, will be updated based on network # Check that the NETWORK provided is correct # 'bitcoin' is mainnet and needs an mainnet address if [ "$NETWORK" = "bitcoin" ] || [ "$NETWORK" = "testnet3" ] || [ "$NETWORK" = "testnet4" ]; then echo "Setting up Mempool.space CKPool with NETWORK $NETWORK" if [ "$NETWORK" = "bitcoin" ]; then RPC_PORT=8332 # Mainnet RPC port COINBASE_PAYOUT_ADDRESS="1wizSAYSbuyXbt9d8JV8ytm5acqq2TorC" elif [ "$NETWORK" = "testnet3" ]; then RPC_PORT=18332 # Testnet3 RPC port COINBASE_PAYOUT_ADDRESS="tb1qjfplwf7a2dpjj04cx96rysqeastvycc0j50cch" elif [ "$NETWORK" = "testnet4" ]; then RPC_PORT=48332 # Testnet4 RPC port COINBASE_PAYOUT_ADDRESS="tb1q548z58kqvwyjqwy8vc2ntmg33d7s2wyfv7ukq4" else echo "Network setting unsupported for magic coinbase payout address replacement" fi else echo "Invalid network selected: $NETWORK, please use bitcoin, testnet3, testnet4" exit 1 fi echo "Starting Mempool.space CKSolo using ${NETWORK} network with payout address ${COINBASE_PAYOUT_ADDRESS}" echo "Using Bitcoin RPC port: ${RPC_PORT} and CKPool port: ${PORT}" # Fetch Bitcoin node credentials from the Bitcoin.conf file DAEMON_CONF="/bitcoin/${DAEMON}.conf" echo "[*] Getting RPC credentials from ${DAEMON_CONF}" RPC_USER=$(grep 'rpcuser=' "${DAEMON_CONF}"|cut -d = -f2|head -1) RPC_PASS=$(grep 'rpcpassword=' "${DAEMON_CONF}"|cut -d = -f2|head -1) # Create ckpool config file CONFIG_DIR="${HOME}/.ckpool/${NETWORK}" CONFIG_FILE="${CONFIG_DIR}/ckpool.conf" mkdir -p "${CONFIG_DIR}" cat > "${CONFIG_FILE}" << EOF { "btcd" : [ { "url" : "127.0.0.1:${RPC_PORT}", "auth" : "${RPC_USER}", "pass" : "${RPC_PASS}", "notify" : true } ], "btcaddress" : "${COINBASE_PAYOUT_ADDRESS}", "btcsig" : "/@wiz/", "blockpoll" : 100, "nonce1length" : 4, "nonce2length" : 8, "update_interval" : 30, "version_mask" : "1fffe000", "serverurl" : [ "127.0.0.1:${PORT}" ], "mindiff" : 1, "startdiff" : 42, "maxdiff" : 0, "logdir" : "logs" } EOF echo "[*] Created config file at ${CONFIG_FILE}" # run in loop in case of crash until false do # reset CWD cd "${CONFIG_DIR}" # disable making core files ulimit -c 0 echo "[*] Starting ckpool..." # Run ckpool with the config ckpool "${CONFIG_FILE}" # Wait a bit before restarting echo "[*] ckpool exited, restarting in 1 second..." sleep 1 done