#!/bin/bash set -eu VERBOSITY=${GETH_VERBOSITY:-3} GETH_DATA_DIR=/data GETH_CHAINDATA_DIR="$GETH_DATA_DIR/geth/chaindata" OP_GETH_GENESIS_FILE_PATH="${OP_GETH_GENESIS_FILE_PATH:-/genesis.json}" CHAIN_ID=$(jq -r .config.chainId < "$OP_GETH_GENESIS_FILE_PATH") RPC_PORT="${RPC_PORT:-8545}" WS_PORT="${WS_PORT:-8546}" AUTHRPC_PORT="${AUTHRPC_PORT:-8551}" METRICS_PORT="${METRICS_PORT:-6060}" HOST_IP="0.0.0.0" P2P_PORT="${P2P_PORT:-30303}" ADDITIONAL_ARGS="" if [ ! -d "$GETH_CHAINDATA_DIR" ]; then echo "$GETH_CHAINDATA_DIR missing, running init" echo "Initializing genesis." ./geth --verbosity="$VERBOSITY" init \ --datadir="$GETH_DATA_DIR" \ "$OP_GETH_GENESIS_FILE_PATH" else echo "$GETH_CHAINDATA_DIR exists." fi echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" if [ "${OP_GETH_ETH_STATS+x}" = x ]; then ADDITIONAL_ARGS="$ADDITIONAL_ARGS --ethstats=$OP_GETH_ETH_STATS" fi if [ "${OP_GETH_ALLOW_UNPROTECTED_TXS+x}" = x ]; then ADDITIONAL_ARGS="$ADDITIONAL_ARGS --rpc.allow-unprotected-txs=$OP_GETH_ALLOW_UNPROTECTED_TXS" fi exec ./geth \ --datadir="$GETH_DATA_DIR" \ --verbosity="$VERBOSITY" \ --http \ --http.corsdomain="*" \ --http.vhosts="*" \ --http.addr=0.0.0.0 \ --http.port="$RPC_PORT" \ --http.api=web3,debug,eth,net,engine \ --authrpc.addr=0.0.0.0 \ --authrpc.port="$AUTHRPC_PORT" \ --authrpc.vhosts="*" \ --authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \ --ws \ --ws.addr=0.0.0.0 \ --ws.port="$WS_PORT" \ --ws.origins="*" \ --ws.api=debug,eth,net,engine \ --metrics \ --metrics.addr=0.0.0.0 \ --metrics.port="$METRICS_PORT" \ --syncmode=full \ --gcmode=${OP_GETH_GCMODE:-full} \ --state.scheme=${OP_GETH_STATE_SCHEME:-path} \ --db.engine=${GETH_DB_ENGINE:-pebble} \ --discovery.port=${P2P_PORT:-30303} \ --nodiscover \ --maxpeers=100 \ --nat=extip:$HOST_IP \ --networkid="$CHAIN_ID" \ --op-network="$CHAIN_NAME" \ --rollup.halt=major \ --rollup.sequencerhttp="$OP_GETH_SEQUENCER_HTTP" \ --port="$P2P_PORT" \ $ADDITIONAL_ARGS # intentionally unquoted