From 69d9ae1b66fb344bf88fe405b4631b5e768b58a5 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Tue, 13 Jun 2023 11:19:50 +0800 Subject: [PATCH] [wip] factor out eth genesis & add plugeth loaded stack fix geth flag refactors genesis generation into new image --- .../docker-compose-fixturenet-plugeth.yml | 26 ++-- .../fixturenet-plugeth/plugins/README.md | 1 - .../cerc-fixturenet-eth-genesis/Dockerfile | 28 ++++ .../cerc-fixturenet-eth-genesis/build.sh | 8 + .../genesis/Makefile | 0 .../genesis/accounts/import_keys.sh | 0 .../genesis/accounts/mnemonic_to_csv.py | 0 .../genesis/el/build_el.sh | 0 .../genesis/el/el-config.yaml | 0 .../cerc-fixturenet-eth-geth/Dockerfile | 39 ++--- .../cerc-fixturenet-eth-geth/run-el.sh | 2 +- .../cerc-fixturenet-eth-lighthouse/Dockerfile | 6 +- .../genesis/cl/vars.env | 2 +- .../cerc-fixturenet-eth-plugeth/Dockerfile | 29 ++-- .../cerc-fixturenet-eth-plugeth/build.sh | 9 -- .../cerc-fixturenet-eth-plugeth/run-el.sh | 141 ++++++++++++++++++ .../Dockerfile | 34 ----- .../build.sh | 20 --- .../Dockerfile | 40 ----- .../cerc-fixturenet-plugeth-plugeth/build.sh | 17 --- .../stacks/fixturenet-eth-loaded/stack.yml | 1 + app/data/stacks/fixturenet-eth-tx/stack.yml | 1 + app/data/stacks/fixturenet-eth/stack.yml | 1 + app/data/stacks/fixturenet-optimism/stack.yml | 1 + .../fixturenet-plugeth-loaded/README.md | 6 + .../fixturenet-plugeth-loaded/stack.yml | 29 ++++ .../stacks/fixturenet-plugeth-tx/stack.yml | 5 +- app/data/stacks/fixturenet-pocket/stack.yml | 1 + 28 files changed, 264 insertions(+), 183 deletions(-) delete mode 100644 app/data/config/fixturenet-plugeth/plugins/README.md create mode 100644 app/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile create mode 100755 app/data/container-build/cerc-fixturenet-eth-genesis/build.sh rename app/data/container-build/{cerc-fixturenet-eth-geth => cerc-fixturenet-eth-genesis}/genesis/Makefile (100%) rename app/data/container-build/{cerc-fixturenet-eth-geth => cerc-fixturenet-eth-genesis}/genesis/accounts/import_keys.sh (100%) rename app/data/container-build/{cerc-fixturenet-eth-geth => cerc-fixturenet-eth-genesis}/genesis/accounts/mnemonic_to_csv.py (100%) rename app/data/container-build/{cerc-fixturenet-eth-geth => cerc-fixturenet-eth-genesis}/genesis/el/build_el.sh (100%) rename app/data/container-build/{cerc-fixturenet-eth-geth => cerc-fixturenet-eth-genesis}/genesis/el/el-config.yaml (100%) create mode 100755 app/data/container-build/cerc-fixturenet-eth-plugeth/run-el.sh delete mode 100644 app/data/container-build/cerc-fixturenet-plugeth-lighthouse/Dockerfile delete mode 100755 app/data/container-build/cerc-fixturenet-plugeth-lighthouse/build.sh delete mode 100644 app/data/container-build/cerc-fixturenet-plugeth-plugeth/Dockerfile delete mode 100755 app/data/container-build/cerc-fixturenet-plugeth-plugeth/build.sh create mode 100644 app/data/stacks/fixturenet-plugeth-loaded/README.md create mode 100644 app/data/stacks/fixturenet-plugeth-loaded/stack.yml diff --git a/app/data/compose/docker-compose-fixturenet-plugeth.yml b/app/data/compose/docker-compose-fixturenet-plugeth.yml index 12b5888..b06440c 100644 --- a/app/data/compose/docker-compose-fixturenet-plugeth.yml +++ b/app/data/compose/docker-compose-fixturenet-plugeth.yml @@ -6,14 +6,23 @@ services: - ../config/fixturenet-eth/fixturenet-eth.env environment: RUN_BOOTNODE: "true" - image: cerc/fixturenet-plugeth-plugeth:local + image: cerc/fixturenet-eth-plugeth:local volumes: - fixturenet_plugeth_bootnode_geth_data:/root/ethdata - - ../config/fixturenet-plugeth/plugins:/root/ethdata/plugins ports: - "9898" - "30303" + # Workaround: since ethdata is mounted as a volume, we can't easily add the plugin lib as part of the image. + # Instead, this copies the lib from its image into the volume before running geth. + fixturenet-plugeth-plugin: + hostname: fixturenet-plugeth-plugin + image: cerc/plugeth-statediff:local + volumes: + - fixturenet_plugeth_geth_1_data:/root/ethdata + command: >- + sh -c "mkdir -p /root/ethdata/plugins && cp /usr/local/lib/statediff.so /root/ethdata/plugins/" + fixturenet-eth-geth-1: restart: always hostname: fixturenet-eth-geth-1 @@ -26,10 +35,9 @@ services: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} env_file: - ../config/fixturenet-eth/fixturenet-eth.env - image: cerc/fixturenet-plugeth-plugeth:local + image: cerc/fixturenet-eth-plugeth:local volumes: - fixturenet_plugeth_geth_1_data:/root/ethdata - - ../config/fixturenet-plugeth/plugins:/root/ethdata/plugins healthcheck: test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8545/"] interval: 30s @@ -37,6 +45,7 @@ services: retries: 10 start_period: 3s depends_on: + - fixturenet-plugeth-plugin - fixturenet-eth-bootnode-geth ports: - "8545" @@ -56,19 +65,18 @@ services: CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true" env_file: - ../config/fixturenet-eth/fixturenet-eth.env - image: cerc/fixturenet-plugeth-plugeth:local + image: cerc/fixturenet-eth-plugeth:local depends_on: - fixturenet-eth-bootnode-geth volumes: - fixturenet_plugeth_geth_2_data:/root/ethdata - - ../config/fixturenet-plugeth/plugins:/root/ethdata/plugins fixturenet-eth-bootnode-lighthouse: restart: always hostname: fixturenet-eth-bootnode-lighthouse environment: RUN_BOOTNODE: "true" - image: cerc/fixturenet-plugeth-lighthouse:local + image: cerc/fixturenet-eth-lighthouse:local fixturenet-eth-lighthouse-1: restart: always @@ -85,7 +93,7 @@ services: NODE_NUMBER: "1" ETH1_ENDPOINT: "http://fixturenet-eth-geth-1:8545" EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-1:8551" - image: cerc/fixturenet-plugeth-lighthouse:local + image: cerc/fixturenet-eth-lighthouse:local volumes: - fixturenet_plugeth_lighthouse_1_data:/opt/testnet/build/cl depends_on: @@ -112,7 +120,7 @@ services: ETH1_ENDPOINT: "http://fixturenet-eth-geth-2:8545" EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-2:8551" LIGHTHOUSE_GENESIS_STATE_URL: "http://fixturenet-eth-lighthouse-1:8001/eth/v2/debug/beacon/states/0" - image: cerc/fixturenet-plugeth-lighthouse:local + image: cerc/fixturenet-eth-lighthouse:local volumes: - fixturenet_plugeth_lighthouse_2_data:/opt/testnet/build/cl depends_on: diff --git a/app/data/config/fixturenet-plugeth/plugins/README.md b/app/data/config/fixturenet-plugeth/plugins/README.md deleted file mode 100644 index aa5aac1..0000000 --- a/app/data/config/fixturenet-plugeth/plugins/README.md +++ /dev/null @@ -1 +0,0 @@ -See: https://docs.plugeth.org/ diff --git a/app/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile new file mode 100644 index 0000000..97624f1 --- /dev/null +++ b/app/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile @@ -0,0 +1,28 @@ +FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen + +FROM golang:1.20-alpine as builder + +COPY genesis /opt/genesis + +COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/ +COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/ +COPY --from=ethgen /apps /apps + +# Install ethereum-genesis-generator +RUN apk add --no-cache python3 py3-pip +RUN cd /apps/el-gen && pip3 install -r requirements.txt +# web3==5.24.0 is broken on python 3.11 +RUN pip3 install --upgrade "web3==6.5.0" + +# Build genesis config +RUN apk add --no-cache bash envsubst jq +RUN apk add --no-cache make +RUN cd /opt/genesis && make genesis-el + +# Snag the genesis block info. +RUN go install github.com/cerc-io/eth-dump-genblock@latest +RUN eth-dump-genblock /opt/genesis/build/el/geth.json > /opt/genesis/build/el/genesis_block.json + +FROM alpine:latest + +COPY --from=builder /opt/genesis /opt/genesis diff --git a/app/data/container-build/cerc-fixturenet-eth-genesis/build.sh b/app/data/container-build/cerc-fixturenet-eth-genesis/build.sh new file mode 100755 index 0000000..e2fd112 --- /dev/null +++ b/app/data/container-build/cerc-fixturenet-eth-genesis/build.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# Build cerc/fixturenet-eth-genesis + +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +docker build -t cerc/fixturenet-eth-genesis:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/Makefile b/app/data/container-build/cerc-fixturenet-eth-genesis/genesis/Makefile similarity index 100% rename from app/data/container-build/cerc-fixturenet-eth-geth/genesis/Makefile rename to app/data/container-build/cerc-fixturenet-eth-genesis/genesis/Makefile diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh b/app/data/container-build/cerc-fixturenet-eth-genesis/genesis/accounts/import_keys.sh similarity index 100% rename from app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh rename to app/data/container-build/cerc-fixturenet-eth-genesis/genesis/accounts/import_keys.sh diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/mnemonic_to_csv.py b/app/data/container-build/cerc-fixturenet-eth-genesis/genesis/accounts/mnemonic_to_csv.py similarity index 100% rename from app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/mnemonic_to_csv.py rename to app/data/container-build/cerc-fixturenet-eth-genesis/genesis/accounts/mnemonic_to_csv.py diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/el/build_el.sh b/app/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh similarity index 100% rename from app/data/container-build/cerc-fixturenet-eth-geth/genesis/el/build_el.sh rename to app/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/el/el-config.yaml b/app/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml similarity index 100% rename from app/data/container-build/cerc-fixturenet-eth-geth/genesis/el/el-config.yaml rename to app/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile index dc81eb0..c3750e9 100644 --- a/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile +++ b/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile @@ -1,39 +1,22 @@ -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen - -# Using the same golang image as used to build geth: https://github.com/cerc-io/go-ethereum/blob/HEAD/Dockerfile -FROM golang:1.18-alpine as delve -RUN go install github.com/go-delve/delve/cmd/dlv@latest - +FROM cerc/fixturenet-eth-genesis:local as fnetgen FROM cerc/go-ethereum:local as geth +# Using the same golang image as used to build geth: https://github.com/cerc-io/go-ethereum/blob/HEAD/Dockerfile +FROM golang:1.20-alpine as delve +RUN go install github.com/go-delve/delve/cmd/dlv@latest + FROM alpine:3.17 -RUN apk add --no-cache python3 python3-dev py3-pip curl wget jq build-base gettext libintl openssl bash bind-tools postgresql-client -COPY --from=delve /go/bin/dlv /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/ -COPY --from=ethgen /apps /apps +RUN apk add --no-cache bash wget python3 +RUN apk add --no-cache bind-tools postgresql-client -RUN cd /apps/el-gen && pip3 install -r requirements.txt - -COPY genesis /opt/testnet COPY run-el.sh /opt/testnet/run.sh -RUN cd /opt/testnet && make genesis-el +COPY --from=delve /go/bin/dlv /usr/local/bin/ +COPY --from=geth /usr/local/bin/geth /usr/local/bin/ +COPY --from=fnetgen /opt/genesis /opt/testnet -COPY --from=geth /usr/local/bin/geth /usr/local/bin/ - -# Snag the genesis block info. +# Initialize the geth db with our config RUN geth --datadir ~/ethdata init /opt/testnet/build/el/geth.json && rm -f ~/ethdata/geth/nodekey -RUN cp -rp ~/ethdata ~/tmpeth && \ - geth --datadir ~/tmpeth init /opt/testnet/build/el/geth.json && \ - geth --datadir ~/tmpeth --http & \ - sleep 5 && \ - curl -q --location 'localhost:8545' \ - --header 'Content-Type: application/json' \ - --data '{ "jsonrpc": "2.0", "id": 14, "method": "eth_getBlockByNumber", "params": ["0x0", false] }' \ - -o /opt/testnet/build/el/genesis_block.json && \ - killall -9 geth && \ - rm -rf ~/tmpeth ENTRYPOINT ["/opt/testnet/run.sh"] diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh index 4c1a0ce..b5d19fc 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh @@ -124,7 +124,7 @@ else --metrics \ --metrics.addr="0.0.0.0" \ --verbosity=${CERC_GETH_VERBOSITY:-3} \ - --vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \ + --log.vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \ --miner.etherbase="${ETHERBASE}" ${STATEDIFF_OPTS} \ & diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile index 87f9bb6..eb791c6 100644 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile @@ -1,6 +1,6 @@ FROM cerc/lighthouse-cli:local AS lcli FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen -FROM cerc/fixturenet-eth-geth:local AS fnetgeth +FROM cerc/fixturenet-eth-genesis:local AS fnetgen FROM cerc/lighthouse:local @@ -19,8 +19,8 @@ COPY --from=lcli /usr/local/bin/lcli /usr/local/bin/lcli COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/eth2-testnet-genesis COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/eth2-val-tools COPY --from=ethgen /apps /apps -COPY --from=fnetgeth /opt/testnet/el /opt/testnet/el -COPY --from=fnetgeth /opt/testnet/build/el /opt/testnet/build/el +COPY --from=fnetgen /opt/genesis/el /opt/testnet/el +COPY --from=fnetgen /opt/genesis/build/el /opt/testnet/build/el RUN cd /opt/testnet && make genesis-cl diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env index f2060a9..081f8f7 100644 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env @@ -44,7 +44,7 @@ EXECUTION_ENDPOINT=${EXECUTION_ENDPOINT:-http://localhost:8551} ETH1_GENESIS_JSON=${ETH1_GENESIS_JSON:-"../build/el/geth.json"} ETH1_GENESIS_BLOCK_JSON=${ETH1_GENESIS_BLOCK_JSON:-"../build/el/genesis_block.json"} ETH1_CONFIG_YAML=${ETH1_CONFIG_YAML:-"../el/el-config.yaml"} -ETH1_BLOCK_HASH=${ETH1_BLOCK_HASH:-`cat $ETH1_GENESIS_BLOCK_JSON | jq -r '.result.hash' | cut -d'x' -f2`} +ETH1_BLOCK_HASH=${ETH1_BLOCK_HASH:-`cat $ETH1_GENESIS_BLOCK_JSON | jq -r '.hash' | cut -d'x' -f2`} ETH1_CHAIN_ID=${ETH1_CHAIN_ID:-`cat $ETH1_GENESIS_JSON | jq -r '.config.chainId'`} ETH1_TTD=${ETH1_TTD:-`cat $ETH1_GENESIS_JSON | jq -r '.config.terminalTotalDifficulty'`} diff --git a/app/data/container-build/cerc-fixturenet-eth-plugeth/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-plugeth/Dockerfile index 90cd38d..1046ea0 100644 --- a/app/data/container-build/cerc-fixturenet-eth-plugeth/Dockerfile +++ b/app/data/container-build/cerc-fixturenet-eth-plugeth/Dockerfile @@ -1,27 +1,20 @@ -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen +FROM cerc/fixturenet-eth-genesis:local as fnetgen -FROM golang:1.19.4-bullseye AS delve +# FIXME: DEV - patched build of plugeth +FROM cerc/plugeth:local as geth + +# Using the same golang image as used to build geth: https://github.com/cerc-io/go-ethereum/blob/HEAD/Dockerfile +FROM golang:1.20-alpine as delve RUN go install github.com/go-delve/delve/cmd/dlv@latest -FROM ubuntu:22.04 -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - python3 python3-dev python3-pip curl wget jq gettext gettext-base openssl bash dnsutils postgresql-client make iproute2 netcat && \ - rm -rf /var/lib/apt/lists/* +FROM alpine:3.17 -COPY --from=delve /go/bin/dlv /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/ -COPY --from=ethgen /apps /apps +RUN apk add --no-cache bash wget python3 -RUN wget -O /usr/local/bin/geth https://github.com/openrelayxyz/plugeth/releases/download/v1.11.6.1.0/geth-linux-amd64-v1.1.0-v1.11.6.1.0 && chmod a+x /usr/local/bin/geth -RUN cd /apps/el-gen && pip3 install -r requirements.txt - -COPY genesis /opt/testnet COPY run-el.sh /opt/testnet/run.sh -RUN cd /opt/testnet && make genesis-el - -RUN geth --datadir ~/ethdata init /opt/testnet/build/el/geth.json && rm -f ~/ethdata/geth/nodekey +COPY --from=delve /go/bin/dlv /usr/local/bin/ +COPY --from=geth /usr/local/bin/geth /usr/local/bin/ +COPY --from=fnetgen /opt/genesis /opt/testnet ENTRYPOINT ["/opt/testnet/run.sh"] diff --git a/app/data/container-build/cerc-fixturenet-eth-plugeth/build.sh b/app/data/container-build/cerc-fixturenet-eth-plugeth/build.sh index e81bc93..9ada7d4 100755 --- a/app/data/container-build/cerc-fixturenet-eth-plugeth/build.sh +++ b/app/data/container-build/cerc-fixturenet-eth-plugeth/build.sh @@ -1,17 +1,8 @@ #!/usr/bin/env bash # Build cerc/fixturenet-eth-plugeth -set -x source ${CERC_CONTAINER_BASE_DIR}/build-base.sh SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -if [ ! -d "${SCRIPT_DIR}/genesis" ]; then - cp -frp ${SCRIPT_DIR}/../cerc-fixturenet-eth-geth/genesis ${SCRIPT_DIR}/genesis -fi - -if [ ! -d "${SCRIPT_DIR}/run-el.sh" ]; then - cp -fp ${SCRIPT_DIR}/../cerc-fixturenet-eth-geth/run-el.sh ${SCRIPT_DIR}/ -fi - docker build -t cerc/fixturenet-eth-plugeth:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/container-build/cerc-fixturenet-eth-plugeth/run-el.sh b/app/data/container-build/cerc-fixturenet-eth-plugeth/run-el.sh new file mode 100755 index 0000000..346b56d --- /dev/null +++ b/app/data/container-build/cerc-fixturenet-eth-plugeth/run-el.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +ETHERBASE=`cat /opt/testnet/build/el/accounts.csv | head -1 | cut -d',' -f2` +NETWORK_ID=`cat /opt/testnet/el/el-config.yaml | grep 'chain_id' | awk '{ print $2 }'` +NETRESTRICT=`ip addr | grep inet | grep -v '127.0' | awk '{print $2}'` + +HOME_DIR=`pwd` +cd /opt/testnet/build/el +python3 -m http.server 9898 & +cd $HOME_DIR + +START_CMD="geth" +if [ "true" == "$CERC_REMOTE_DEBUG" ] && [ -x "/usr/local/bin/dlv" ]; then + START_CMD="/usr/local/bin/dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /usr/local/bin/geth --continue --" +fi + +# 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 + +if [ "true" == "$RUN_BOOTNODE" ]; then + $START_CMD \ + --datadir=~/ethdata \ + --nodekeyhex="${BOOTNODE_KEY}" \ + --nodiscover \ + --ipcdisable \ + --networkid=${NETWORK_ID} \ + --netrestrict="${NETRESTRICT}" \ + & + + geth_pid=$! +else + cd /opt/testnet/accounts + ./import_keys.sh + + echo -n "$JWT" > /opt/testnet/build/el/jwtsecret + + if [ "$CERC_RUN_STATEDIFF" == "detect" ] && [ -n "$CERC_STATEDIFF_DB_HOST" ]; then + dig_result=$(dig $CERC_STATEDIFF_DB_HOST +short) + dig_status_code=$? + if [[ $dig_status_code = 0 && -n $dig_result ]]; then + echo "Statediff DB at $CERC_STATEDIFF_DB_HOST" + CERC_RUN_STATEDIFF="true" + else + echo "No statediff DB available." + CERC_RUN_STATEDIFF="false" + fi + fi + + STATEDIFF_OPTS="" + if [ "$CERC_RUN_STATEDIFF" == "true" ]; then + ready=0 + echo "Waiting for statediff DB..." + while [ $ready -eq 0 ]; do + sleep 1 + export PGPASSWORD="$CERC_STATEDIFF_DB_PASSWORD" + result=$(psql -h "$CERC_STATEDIFF_DB_HOST" \ + -p "$CERC_STATEDIFF_DB_PORT" \ + -U "$CERC_STATEDIFF_DB_USER" \ + -d "$CERC_STATEDIFF_DB_NAME" \ + -t -c 'select max(version_id) from goose_db_version;' 2>/dev/null | awk '{ print $1 }') + if [ -n "$result" ]; then + echo "DB ready..." + if [ $result -ge $CERC_STATEDIFF_DB_GOOSE_MIN_VER ]; then + ready=1 + else + echo "DB not at required version (want $CERC_STATEDIFF_DB_GOOSE_MIN_VER, have $result)" + fi + fi + done + STATEDIFF_OPTS="--statediff \ + --statediff.db.host=$CERC_STATEDIFF_DB_HOST \ + --statediff.db.name=$CERC_STATEDIFF_DB_NAME \ + --statediff.db.nodeid=$CERC_STATEDIFF_DB_NODE_ID \ + --statediff.db.password=$CERC_STATEDIFF_DB_PASSWORD \ + --statediff.db.port=$CERC_STATEDIFF_DB_PORT \ + --statediff.db.user=$CERC_STATEDIFF_DB_USER \ + --statediff.db.logstatements=${CERC_STATEDIFF_DB_LOG_STATEMENTS:-false} \ + --statediff.db.copyfrom=${CERC_STATEDIFF_DB_COPY_FROM:-true} \ + --statediff.waitforsync=true \ + --statediff.workers=${CERC_STATEDIFF_WORKERS:-1} \ + --statediff.writing=true" + fi + + $START_CMD \ + --datadir=~/ethdata \ + --bootnodes="${ENODE}" \ + --allow-insecure-unlock \ + --http \ + --http.addr="0.0.0.0" \ + --http.vhosts="*" \ + --http.api="${CERC_GETH_HTTP_APIS:-eth,web3,net,admin,personal,debug,statediff}" \ + --http.corsdomain="*" \ + --authrpc.addr="0.0.0.0" \ + --authrpc.vhosts="*" \ + --authrpc.jwtsecret="/opt/testnet/build/el/jwtsecret" \ + --ws \ + --ws.addr="0.0.0.0" \ + --ws.origins="*" \ + --ws.api="${CERC_GETH_WS_APIS:-eth,web3,net,admin,personal,debug,statediff}" \ + --http.corsdomain="*" \ + --networkid="${NETWORK_ID}" \ + --netrestrict="${NETRESTRICT}" \ + --gcmode archive \ + --txlookuplimit=0 \ + --cache.preimages \ + --syncmode=full \ + --mine \ + --miner.threads=1 \ + --metrics \ + --metrics.addr="0.0.0.0" \ + --verbosity=${CERC_GETH_VERBOSITY:-3} \ + --log.vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \ + --miner.etherbase="${ETHERBASE}" \ + -- ${STATEDIFF_OPTS} \ + & + + geth_pid=$! +fi + +wait $geth_pid + +if [ "true" == "$CERC_KEEP_RUNNING_AFTER_GETH_EXIT" ]; then + while [ 1 -eq 1 ]; do + sleep 60 + done +fi diff --git a/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/Dockerfile b/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/Dockerfile deleted file mode 100644 index ba92294..0000000 --- a/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM cerc/lighthouse-cli:local AS lcli -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen -FROM cerc/fixturenet-plugeth-plugeth:local AS fnetgeth - -FROM cerc/lighthouse:local - -# cerc/lighthouse is based on Ubuntu -RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \ - libssl-dev ca-certificates \ - curl socat iproute2 telnet wget jq \ - build-essential python3 python3-dev python3-pip gettext-base \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -COPY genesis /opt/testnet -COPY run-cl.sh /opt/testnet/run.sh - -COPY --from=lcli /usr/local/bin/lcli /usr/local/bin/lcli -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/eth2-testnet-genesis -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/eth2-val-tools -COPY --from=ethgen /apps /apps -COPY --from=fnetgeth /opt/testnet/el /opt/testnet/el -COPY --from=fnetgeth /opt/testnet/build/el /opt/testnet/build/el - -RUN cd /opt/testnet && make genesis-cl - -# Work around some bugs in lcli where the default path is always used. -RUN mkdir -p /root/.lighthouse && cd /root/.lighthouse && ln -s /opt/testnet/build/cl/testnet - -RUN mkdir -p /scripts -COPY scripts/status-internal.sh /scripts -COPY scripts/status.sh /scripts - -ENTRYPOINT ["/opt/testnet/run.sh"] diff --git a/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/build.sh b/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/build.sh deleted file mode 100755 index dd823cd..0000000 --- a/app/data/container-build/cerc-fixturenet-plugeth-lighthouse/build.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# Build cerc/fixturenet-plugeth-lighthouse - -source ${CERC_CONTAINER_BASE_DIR}/build-base.sh - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -if [ ! -d "${SCRIPT_DIR}/genesis" ]; then - cp -frp ${SCRIPT_DIR}/../cerc-fixturenet-eth-lighthouse/genesis ${SCRIPT_DIR}/genesis -fi - -if [ ! -e "${SCRIPT_DIR}/run-cl.sh" ]; then - cp -fp ${SCRIPT_DIR}/../cerc-fixturenet-eth-lighthouse/run-cl.sh ${SCRIPT_DIR}/ -fi - -if [ ! -d "${SCRIPT_DIR}/scripts" ]; then - cp -frp ${SCRIPT_DIR}/../cerc-fixturenet-eth-lighthouse/scripts ${SCRIPT_DIR}/ -fi - -docker build -t cerc/fixturenet-plugeth-lighthouse:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/container-build/cerc-fixturenet-plugeth-plugeth/Dockerfile b/app/data/container-build/cerc-fixturenet-plugeth-plugeth/Dockerfile deleted file mode 100644 index 9936c3d..0000000 --- a/app/data/container-build/cerc-fixturenet-plugeth-plugeth/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen - -FROM golang:1.19.4-bullseye AS delve -RUN go install github.com/go-delve/delve/cmd/dlv@latest - -FROM ubuntu:22.04 -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - python3 python3-dev python3-pip curl wget jq gettext gettext-base openssl bash dnsutils postgresql-client make iproute2 netcat psmisc && \ - rm -rf /var/lib/apt/lists/* - -COPY --from=delve /go/bin/dlv /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/ -COPY --from=ethgen /apps /apps - -RUN wget -O /usr/local/bin/geth https://github.com/openrelayxyz/plugeth/releases/download/v1.11.6.1.0/geth-linux-amd64-v1.1.0-v1.11.6.1.0 && chmod a+x /usr/local/bin/geth -RUN cd /apps/el-gen && pip3 install -r requirements.txt - -COPY genesis /opt/testnet -COPY run-el.sh /opt/testnet/run.sh - -RUN cd /opt/testnet && make genesis-el - -RUN geth --datadir ~/ethdata init /opt/testnet/build/el/geth.json && rm -f ~/ethdata/geth/nodekey - -# Snag the genesis block info. -RUN geth --datadir ~/ethdata init /opt/testnet/build/el/geth.json && rm -f ~/ethdata/geth/nodekey -RUN cp -rp ~/ethdata ~/tmpeth && \ - geth --datadir ~/tmpeth init /opt/testnet/build/el/geth.json && \ - geth --datadir ~/tmpeth --http & \ - sleep 5 && \ - curl -q --location 'localhost:8545' \ - --header 'Content-Type: application/json' \ - --data '{ "jsonrpc": "2.0", "id": 14, "method": "eth_getBlockByNumber", "params": ["0x0", false] }' \ - -o /opt/testnet/build/el/genesis_block.json && \ - killall -9 geth && \ - rm -rf ~/tmpeth - -ENTRYPOINT ["/opt/testnet/run.sh"] diff --git a/app/data/container-build/cerc-fixturenet-plugeth-plugeth/build.sh b/app/data/container-build/cerc-fixturenet-plugeth-plugeth/build.sh deleted file mode 100755 index d1641bc..0000000 --- a/app/data/container-build/cerc-fixturenet-plugeth-plugeth/build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Build cerc/fixturenet-plugeth-plugeth -set -x - -source ${CERC_CONTAINER_BASE_DIR}/build-base.sh - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -if [ ! -d "${SCRIPT_DIR}/genesis" ]; then - cp -frp ${SCRIPT_DIR}/../cerc-fixturenet-eth-geth/genesis ${SCRIPT_DIR}/genesis -fi - -if [ ! -e "${SCRIPT_DIR}/run-el.sh" ]; then - cp -fp ${SCRIPT_DIR}/../cerc-fixturenet-eth-geth/run-el.sh ${SCRIPT_DIR}/ -fi - -docker build -t cerc/fixturenet-plugeth-plugeth:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/stacks/fixturenet-eth-loaded/stack.yml b/app/data/stacks/fixturenet-eth-loaded/stack.yml index dd7e05f..7f6684d 100644 --- a/app/data/stacks/fixturenet-eth-loaded/stack.yml +++ b/app/data/stacks/fixturenet-eth-loaded/stack.yml @@ -11,6 +11,7 @@ containers: - cerc/go-ethereum - cerc/lighthouse - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/ipld-eth-server diff --git a/app/data/stacks/fixturenet-eth-tx/stack.yml b/app/data/stacks/fixturenet-eth-tx/stack.yml index 35e4357..f8cdcfe 100644 --- a/app/data/stacks/fixturenet-eth-tx/stack.yml +++ b/app/data/stacks/fixturenet-eth-tx/stack.yml @@ -10,6 +10,7 @@ containers: - cerc/go-ethereum - cerc/lighthouse - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/tx-spammer diff --git a/app/data/stacks/fixturenet-eth/stack.yml b/app/data/stacks/fixturenet-eth/stack.yml index ae06e2d..5432e6d 100644 --- a/app/data/stacks/fixturenet-eth/stack.yml +++ b/app/data/stacks/fixturenet-eth/stack.yml @@ -9,6 +9,7 @@ containers: - cerc/go-ethereum - cerc/lighthouse - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/foundry diff --git a/app/data/stacks/fixturenet-optimism/stack.yml b/app/data/stacks/fixturenet-optimism/stack.yml index c483b8d..00ccd7f 100644 --- a/app/data/stacks/fixturenet-optimism/stack.yml +++ b/app/data/stacks/fixturenet-optimism/stack.yml @@ -11,6 +11,7 @@ containers: - cerc/go-ethereum - cerc/lighthouse - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/foundry diff --git a/app/data/stacks/fixturenet-plugeth-loaded/README.md b/app/data/stacks/fixturenet-plugeth-loaded/README.md new file mode 100644 index 0000000..ecb0430 --- /dev/null +++ b/app/data/stacks/fixturenet-plugeth-loaded/README.md @@ -0,0 +1,6 @@ +# fixturenet-plugeth-loaded + +A "loaded" version of `fixturenet-eth` that uses PluGeth instead of go-ethereum, +with all the bells and whistles enabled. + +See `stacks/fixturenet-eth/README.md` for more information. diff --git a/app/data/stacks/fixturenet-plugeth-loaded/stack.yml b/app/data/stacks/fixturenet-plugeth-loaded/stack.yml new file mode 100644 index 0000000..eeda0d0 --- /dev/null +++ b/app/data/stacks/fixturenet-plugeth-loaded/stack.yml @@ -0,0 +1,29 @@ +version: "1.0" +name: fixturenet-plugeth-loaded +decription: "Loaded Plugeth-based Ethereum Fixturenet" +repos: + - git.vdb.to/cerc-io/plugeth # fixme: dev + - git.vdb.to/cerc-io/plugeth-statediff + - github.com/cerc-io/tx-spammer + - github.com/cerc-io/ipld-eth-server + - github.com/cerc-io/ipld-eth-db + - github.com/cerc-io/lighthouse +containers: + - cerc/plugeth + - cerc/plugeth-statediff + - cerc/lighthouse + - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis + - cerc/fixturenet-eth-plugeth + - cerc/fixturenet-eth-lighthouse + - cerc/ipld-eth-server + - cerc/ipld-eth-db + - cerc/keycloak + - cerc/tx-spammer +pods: + - fixturenet-plugeth + - tx-spammer + - fixturenet-eth-metrics + - keycloak + - ipld-eth-server + - ipld-eth-db diff --git a/app/data/stacks/fixturenet-plugeth-tx/stack.yml b/app/data/stacks/fixturenet-plugeth-tx/stack.yml index e6d8c61..b66cb03 100644 --- a/app/data/stacks/fixturenet-plugeth-tx/stack.yml +++ b/app/data/stacks/fixturenet-plugeth-tx/stack.yml @@ -8,8 +8,9 @@ repos: containers: - cerc/lighthouse - cerc/lighthouse-cli - - cerc/fixturenet-plugeth-plugeth - - cerc/fixturenet-plugeth-lighthouse + - cerc/fixturenet-eth-genesis + - cerc/fixturenet-eth-plugeth + - cerc/fixturenet-eth-lighthouse - cerc/tx-spammer - cerc/foundry pods: diff --git a/app/data/stacks/fixturenet-pocket/stack.yml b/app/data/stacks/fixturenet-pocket/stack.yml index 0e39ed8..dc8fed1 100644 --- a/app/data/stacks/fixturenet-pocket/stack.yml +++ b/app/data/stacks/fixturenet-pocket/stack.yml @@ -10,6 +10,7 @@ containers: - cerc/go-ethereum - cerc/lighthouse - cerc/lighthouse-cli + - cerc/fixturenet-eth-genesis - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/pocket