nimbus-eth2/scripts/start_geth_nodes.sh

70 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright (c) 2023 Status Research & Development GmbH.
# Licensed under either of:
# - Apache License, version 2.0
# - MIT license
# at your option. This file may not be copied, modified, or distributed
# except according to those terms.
set -euo pipefail
SCRIPTS_DIR="$(dirname "${BASH_SOURCE[0]}")"
source "${SCRIPTS_DIR}/geth_binaries.sh"
source "${SCRIPTS_DIR}/geth_vars.sh"
#These are used in the caller script
GETH_ENODES=()
log "Using ${GETH_BINARY}"
for GETH_NODE_IDX in $(seq 0 $GETH_LAST_NODE_IDX); do
mkdir -p "${GETH_DATA_DIRS[GETH_NODE_IDX]}"
GETH_LOG="${DATA_DIR}/logs/geth.${GETH_NODE_IDX}.txt"
${GETH_BINARY} version > "$GETH_LOG"
${GETH_BINARY} --datadir "${GETH_DATA_DIRS[GETH_NODE_IDX]}" init "${EXECUTION_GENESIS_JSON}" >> "$GETH_LOG" 2>&1
set -x
${GETH_BINARY} \
--syncmode full \
--datadir "${GETH_DATA_DIRS[GETH_NODE_IDX]}" \
${DISCOVER} \
--http \
--http.port ${GETH_RPC_PORTS[GETH_NODE_IDX]} \
--port ${GETH_NET_PORTS[GETH_NODE_IDX]} \
--authrpc.port ${GETH_AUTH_RPC_PORTS[GETH_NODE_IDX]} \
--authrpc.jwtsecret "${JWT_FILE}" \
>> "${GETH_LOG}" 2>&1 &
set +x
PID=$!
echo $PID > "${DATA_DIR}/pids/geth.${GETH_NODE_IDX}"
done
for GETH_NODE_IDX in $(seq 0 $GETH_LAST_NODE_IDX); do
GETH_RETRY=0
while :; do
if [[ -S "${GETH_DATA_DIRS[GETH_NODE_IDX]}/geth.ipc" ]]; then
echo "Geth ${GETH_NODE_IDX} started in $(( GETH_RETRY * 100 ))ms"
break
fi
if (( ++GETH_RETRY >= 300 )); then
echo "Geth ${GETH_NODE_IDX} failed to start"
exit 1
fi
sleep 0.1
done
NODE_ID=$(${GETH_BINARY} attach --datadir "${GETH_DATA_DIRS[GETH_NODE_IDX]}" --exec admin.nodeInfo.enode)
GETH_ENODES+=("${NODE_ID}")
done
#Add all nodes as peers
for dir in "${GETH_DATA_DIRS[@]}"
do
for enode in "${GETH_ENODES[@]}"
do
${GETH_BINARY} attach --datadir "${dir}" --exec "admin.addPeer(${enode})" &
done
done
log "GETH RPC Ports: ${GETH_AUTH_RPC_PORTS[*]}"