#!/bin/sh set -e if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi echo "Using the following env:" echo "CERC_NETWORK: ${CERC_NETWORK}" echo "CERC_ALLOW_UNPROTECTED_TXS: ${CERC_ALLOW_UNPROTECTED_TXS}" echo "CERC_SYNCMODE: ${CERC_SYNCMODE}" echo "CERC_GCMODE: ${CERC_GCMODE}" echo "CERC_GETH_VERBOSITY: ${CERC_GETH_VERBOSITY}" echo "ETH_DATADIR: ${ETH_DATADIR}" # See https://linuxconfig.org/how-to-propagate-a-signal-to-child-processes-from-a-bash-script cleanup() { echo "Signal received, cleaning up..." # Kill the child process first (CERC_REMOTE_DEBUG=true uses dlv which starts geth as a child process) pkill -P ${geth_pid} sleep 2 kill $(jobs -p) wait echo "Done" } trap 'cleanup' SIGINT SIGTERM # Wait for the JWT secret to be generated jwtsecret_file_path=/root/secrets/jwtsecret retry_interval=3 while [ ! -f "$jwtsecret_file_path" ]; do echo "JWT secret not found, retrying after ${retry_interval}s..." sleep $retry_interval done echo "JWT secret found at $jwtsecret_file_path" NETWORK_OPT="" if [ "$CERC_NETWORK" = "sepolia" ] || [ "$CERC_NETWORK" = "holesky" ] || [ "$CERC_NETWORK" = "mainnet" ]; then NETWORK_OPT="--${CERC_NETWORK}" else NETWORK_OPT="--networkid ${CERC_NETWORK}" fi OTHER_OPTS="" if [ "$CERC_ALLOW_UNPROTECTED_TXS" == "true" ]; then # Allow for unprotected (non EIP155) txs to be submitted via RPC OTHER_OPTS="--rpc.allow-unprotected-txs" fi geth \ ${NETWORK_OPT} \ --datadir="${ETH_DATADIR}" \ --authrpc.addr="0.0.0.0" \ --authrpc.vhosts="*" \ --authrpc.jwtsecret="$jwtsecret_file_path" \ --http \ --http.addr="0.0.0.0" \ --http.vhosts="*" \ --http.api="eth,web3,net,admin,personal,debug" \ --http.corsdomain="*" \ --ws \ --ws.addr="0.0.0.0" \ --ws.origins="*" \ --ws.api="eth,web3,net,admin,personal,debug" \ --state.scheme hash \ --gcmode $CERC_GCMODE \ --syncmode=$CERC_SYNCMODE \ --metrics \ --metrics.addr="0.0.0.0" \ --verbosity=${CERC_GETH_VERBOSITY} \ ${OTHER_OPTS} \ & geth_pid=$! wait $geth_pid