diff --git a/.env.mainnet b/.env.mainnet index ee9354265..4ab883fc3 100644 --- a/.env.mainnet +++ b/.env.mainnet @@ -4,8 +4,9 @@ # NETWORK CONFIGURATION # -------------------- RETH_CHAIN=base -OP_NODE_NETWORK=base-mainnet +BASE_NODE_NETWORK=8453 OP_GETH_OP_NETWORK=base-mainnet +OP_NETHERMIND_NETWORK=base-mainnet # BASE SEQUENCER ENDPOINTS # ----------------------- @@ -14,37 +15,25 @@ OP_SEQUENCER_HTTP=https://mainnet-sequencer.base.org OP_GETH_SEQUENCER_HTTP=https://mainnet-sequencer.base.org OP_RETH_SEQUENCER_HTTP=https://mainnet-sequencer.base.org -# SYNC CONFIGURATION -# ----------------- -OP_NODE_SYNCMODE=execution-layer -OP_NODE_VERIFIER_L1_CONFS=4 -OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - # [REQUIRED] L1 CONFIGURATION # -------------------------- # Replace these values with your L1 (Ethereum) node endpoints -OP_NODE_L1_ETH_RPC= -OP_NODE_L1_BEACON= -OP_NODE_L1_BEACON_ARCHIVER= -OP_NODE_L1_BEACON_FETCH_ALL_SIDECARS="true" -OP_NODE_L1_RPC_KIND="debug_geth" -OP_NODE_L1_TRUST_RPC="false" +BASE_NODE_L1_ETH_RPC= +BASE_NODE_L1_BEACON= +BASE_NODE_L1_TRUST_RPC="false" # ENGINE CONFIGURATION # ------------------- -OP_NODE_L2_ENGINE_KIND=reth -OP_NODE_L2_ENGINE_RPC=ws://execution:8551 -OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt -OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a +BASE_NODE_L2_ENGINE_RPC=ws://execution:8551 +BASE_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt +BASE_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a # P2P CONFIGURATION # --------------- -OP_NODE_P2P_AGENT=base -OP_NODE_P2P_LISTEN_IP=0.0.0.0 -OP_NODE_P2P_LISTEN_TCP_PORT=9222 -OP_NODE_P2P_LISTEN_UDP_PORT=9222 -OP_NODE_INTERNAL_IP="true" -OP_NODE_P2P_BOOTNODES=enr:-J24QNz9lbrKbN4iSmmjtnr7SjUMk4zB7f1krHZcTZx-JRKZd0kA2gjufUROD6T3sOWDVDnFJRvqBBo62zuF-hYCohOGAYiOoEyEgmlkgnY0gmlwhAPniryHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQKNVFlCxh_B-716tTs-h1vMzZkSs1FTu_OYTNjgufplG4N0Y3CCJAaDdWRwgiQG,enr:-J24QH-f1wt99sfpHy4c0QJM-NfmsIfmlLAMMcgZCUEgKG_BBYFc6FwYgaMJMQN5dsRBJApIok0jFn-9CS842lGpLmqGAYiOoDRAgmlkgnY0gmlwhLhIgb2Hb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJ9FTIv8B9myn1MWaC_2lJ-sMoeCDkusCsk4BYHjjCq04N0Y3CCJAaDdWRwgiQG,enr:-J24QDXyyxvQYsd0yfsN0cRr1lZ1N11zGTplMNlW4xNEc7LkPXh0NAJ9iSOVdRO95GPYAIc6xmyoCCG6_0JxdL3a0zaGAYiOoAjFgmlkgnY0gmlwhAPckbGHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJwoS7tzwxqXSyFL7g0JM-KWVbgvjfB8JA__T7yY_cYboN0Y3CCJAaDdWRwgiQG,enr:-J24QHmGyBwUZXIcsGYMaUqGGSl4CFdx9Tozu-vQCn5bHIQbR7On7dZbU61vYvfrJr30t0iahSqhc64J46MnUO2JvQaGAYiOoCKKgmlkgnY0gmlwhAPnCzSHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQINc4fSijfbNIiGhcgvwjsjxVFJHUstK9L1T8OTKUjgloN0Y3CCJAaDdWRwgiQG,enr:-J24QG3ypT4xSu0gjb5PABCmVxZqBjVw9ca7pvsI8jl4KATYAnxBmfkaIuEqy9sKvDHKuNCsy57WwK9wTt2aQgcaDDyGAYiOoGAXgmlkgnY0gmlwhDbGmZaHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQIeAK_--tcLEiu7HvoUlbV52MspE0uCocsx1f_rYvRenIN0Y3CCJAaDdWRwgiQG +BASE_NODE_P2P_LISTEN_IP=0.0.0.0 +BASE_NODE_P2P_ADVERTISE_TCP_PORT=9222 +BASE_NODE_P2P_ADVERTISE_UDP_PORT=9222 +BASE_NODE_P2P_BOOTNODES=enr:-J24QNz9lbrKbN4iSmmjtnr7SjUMk4zB7f1krHZcTZx-JRKZd0kA2gjufUROD6T3sOWDVDnFJRvqBBo62zuF-hYCohOGAYiOoEyEgmlkgnY0gmlwhAPniryHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQKNVFlCxh_B-716tTs-h1vMzZkSs1FTu_OYTNjgufplG4N0Y3CCJAaDdWRwgiQG,enr:-J24QH-f1wt99sfpHy4c0QJM-NfmsIfmlLAMMcgZCUEgKG_BBYFc6FwYgaMJMQN5dsRBJApIok0jFn-9CS842lGpLmqGAYiOoDRAgmlkgnY0gmlwhLhIgb2Hb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJ9FTIv8B9myn1MWaC_2lJ-sMoeCDkusCsk4BYHjjCq04N0Y3CCJAaDdWRwgiQG,enr:-J24QDXyyxvQYsd0yfsN0cRr1lZ1N11zGTplMNlW4xNEc7LkPXh0NAJ9iSOVdRO95GPYAIc6xmyoCCG6_0JxdL3a0zaGAYiOoAjFgmlkgnY0gmlwhAPckbGHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJwoS7tzwxqXSyFL7g0JM-KWVbgvjfB8JA__T7yY_cYboN0Y3CCJAaDdWRwgiQG,enr:-J24QHmGyBwUZXIcsGYMaUqGGSl4CFdx9Tozu-vQCn5bHIQbR7On7dZbU61vYvfrJr30t0iahSqhc64J46MnUO2JvQaGAYiOoCKKgmlkgnY0gmlwhAPnCzSHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQINc4fSijfbNIiGhcgvwjsjxVFJHUstK9L1T8OTKUjgloN0Y3CCJAaDdWRwgiQG,enr:-J24QG3ypT4xSu0gjb5PABCmVxZqBjVw9ca7pvsI8jl4KATYAnxBmfkaIuEqy9sKvDHKuNCsy57WwK9wTt2aQgcaDDyGAYiOoGAXgmlkgnY0gmlwhDbGmZaHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQIeAK_--tcLEiu7HvoUlbV52MspE0uCocsx1f_rYvRenIN0Y3CCJAaDdWRwgiQG # RETH CONFIGURATION # ---------------- @@ -52,11 +41,6 @@ OP_RETH_DISABLE_DISCOVERY="false" OP_RETH_DISABLE_TX_POOL_GOSSIP="true" OP_RETH_OP_NETWORK="base" -# RPC CONFIGURATION -# --------------- -OP_NODE_RPC_ADDR=0.0.0.0 -OP_NODE_RPC_PORT=8545 - # GETH CACHE SETTINGS # ----------------- GETH_CACHE="20480" # 20GB @@ -68,12 +52,11 @@ OP_GETH_NET_RESTRICT="10.0.0.0/8" # LOGGING & MONITORING # ------------------ -OP_NODE_LOG_LEVEL=info -OP_NODE_LOG_FORMAT="json" -OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log -OP_NODE_METRICS_ENABLED="true" -OP_NODE_METRICS_ADDR=0.0.0.0 -OP_NODE_METRICS_PORT="7300" +BASE_NODE_LOG_VERBOSITY=3 +BASE_NODE_LOG_FORMAT="json" +BASE_NODE_METRICS_ENABLED="true" +BASE_NODE_METRICS_ADDR=0.0.0.0 +BASE_NODE_METRICS_PORT="7300" STATSD_ADDRESS="172.17.0.1" # OPTIONAL SETTINGS @@ -86,7 +69,7 @@ STATSD_ADDRESS="172.17.0.1" # OP_NETHERMIND_ETHSTATS_ENDPOINT=ethstats_endpoint # TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE) -# OP_NODE_L1_TRUST_RPC=true +# BASE_NODE_L1_TRUST_RPC=true # SNAP SYNC (OPTIONAL EXPERIMENTAL FEATURE - UNCOMMENT TO ENABLE) # NOTE: This feature is experimental and may lead to syncing issues diff --git a/.env.sepolia b/.env.sepolia index b78fc8722..247ca4a0c 100644 --- a/.env.sepolia +++ b/.env.sepolia @@ -4,8 +4,9 @@ # NETWORK CONFIGURATION # -------------------- RETH_CHAIN=base-sepolia -OP_NODE_NETWORK=base-sepolia +BASE_NODE_NETWORK=84532 OP_GETH_OP_NETWORK=base-sepolia +OP_NETHERMIND_NETWORK=base-sepolia # BASE SEQUENCER ENDPOINTS # ----------------------- @@ -14,37 +15,25 @@ OP_SEQUENCER_HTTP=https://sepolia-sequencer.base.org OP_GETH_SEQUENCER_HTTP=https://sepolia-sequencer.base.org OP_RETH_SEQUENCER_HTTP=https://sepolia-sequencer.base.org -# SYNC CONFIGURATION -# ----------------- -OP_NODE_SYNCMODE=execution-layer -OP_NODE_VERIFIER_L1_CONFS=4 -OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - # [REQUIRED] L1 CONFIGURATION # -------------------------- # Replace these values with your L1 (Ethereum) node endpoints -OP_NODE_L1_ETH_RPC= -OP_NODE_L1_BEACON= -OP_NODE_L1_BEACON_ARCHIVER= -OP_NODE_L1_BEACON_FETCH_ALL_SIDECARS="true" -OP_NODE_L1_RPC_KIND="debug_geth" -OP_NODE_L1_TRUST_RPC="false" +BASE_NODE_L1_ETH_RPC= +BASE_NODE_L1_BEACON= +BASE_NODE_L1_TRUST_RPC="false" # ENGINE CONFIGURATION # ------------------- -OP_NODE_L2_ENGINE_KIND=reth -OP_NODE_L2_ENGINE_RPC=ws://execution:8551 -OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt -OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a +BASE_NODE_L2_ENGINE_RPC=ws://execution:8551 +BASE_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt +BASE_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a # P2P CONFIGURATION # --------------- -OP_NODE_P2P_AGENT=base -OP_NODE_P2P_LISTEN_IP=0.0.0.0 -OP_NODE_P2P_LISTEN_TCP_PORT=9222 -OP_NODE_P2P_LISTEN_UDP_PORT=9222 -OP_NODE_INTERNAL_IP="true" -OP_NODE_P2P_BOOTNODES=enr:-J24QNz9lbrKbN4iSmmjtnr7SjUMk4zB7f1krHZcTZx-JRKZd0kA2gjufUROD6T3sOWDVDnFJRvqBBo62zuF-hYCohOGAYiOoEyEgmlkgnY0gmlwhAPniryHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQKNVFlCxh_B-716tTs-h1vMzZkSs1FTu_OYTNjgufplG4N0Y3CCJAaDdWRwgiQG,enr:-J24QH-f1wt99sfpHy4c0QJM-NfmsIfmlLAMMcgZCUEgKG_BBYFc6FwYgaMJMQN5dsRBJApIok0jFn-9CS842lGpLmqGAYiOoDRAgmlkgnY0gmlwhLhIgb2Hb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJ9FTIv8B9myn1MWaC_2lJ-sMoeCDkusCsk4BYHjjCq04N0Y3CCJAaDdWRwgiQG,enr:-J24QDXyyxvQYsd0yfsN0cRr1lZ1N11zGTplMNlW4xNEc7LkPXh0NAJ9iSOVdRO95GPYAIc6xmyoCCG6_0JxdL3a0zaGAYiOoAjFgmlkgnY0gmlwhAPckbGHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJwoS7tzwxqXSyFL7g0JM-KWVbgvjfB8JA__T7yY_cYboN0Y3CCJAaDdWRwgiQG,enr:-J24QHmGyBwUZXIcsGYMaUqGGSl4CFdx9Tozu-vQCn5bHIQbR7On7dZbU61vYvfrJr30t0iahSqhc64J46MnUO2JvQaGAYiOoCKKgmlkgnY0gmlwhAPnCzSHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQINc4fSijfbNIiGhcgvwjsjxVFJHUstK9L1T8OTKUjgloN0Y3CCJAaDdWRwgiQG,enr:-J24QG3ypT4xSu0gjb5PABCmVxZqBjVw9ca7pvsI8jl4KATYAnxBmfkaIuEqy9sKvDHKuNCsy57WwK9wTt2aQgcaDDyGAYiOoGAXgmlkgnY0gmlwhDbGmZaHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQIeAK_--tcLEiu7HvoUlbV52MspE0uCocsx1f_rYvRenIN0Y3CCJAaDdWRwgiQG +BASE_NODE_P2P_LISTEN_IP=0.0.0.0 +BASE_NODE_P2P_ADVERTISE_TCP_PORT=9222 +BASE_NODE_P2P_ADVERTISE_UDP_PORT=9222 +BASE_NODE_P2P_BOOTNODES=enr:-J24QNz9lbrKbN4iSmmjtnr7SjUMk4zB7f1krHZcTZx-JRKZd0kA2gjufUROD6T3sOWDVDnFJRvqBBo62zuF-hYCohOGAYiOoEyEgmlkgnY0gmlwhAPniryHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQKNVFlCxh_B-716tTs-h1vMzZkSs1FTu_OYTNjgufplG4N0Y3CCJAaDdWRwgiQG,enr:-J24QH-f1wt99sfpHy4c0QJM-NfmsIfmlLAMMcgZCUEgKG_BBYFc6FwYgaMJMQN5dsRBJApIok0jFn-9CS842lGpLmqGAYiOoDRAgmlkgnY0gmlwhLhIgb2Hb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJ9FTIv8B9myn1MWaC_2lJ-sMoeCDkusCsk4BYHjjCq04N0Y3CCJAaDdWRwgiQG,enr:-J24QDXyyxvQYsd0yfsN0cRr1lZ1N11zGTplMNlW4xNEc7LkPXh0NAJ9iSOVdRO95GPYAIc6xmyoCCG6_0JxdL3a0zaGAYiOoAjFgmlkgnY0gmlwhAPckbGHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQJwoS7tzwxqXSyFL7g0JM-KWVbgvjfB8JA__T7yY_cYboN0Y3CCJAaDdWRwgiQG,enr:-J24QHmGyBwUZXIcsGYMaUqGGSl4CFdx9Tozu-vQCn5bHIQbR7On7dZbU61vYvfrJr30t0iahSqhc64J46MnUO2JvQaGAYiOoCKKgmlkgnY0gmlwhAPnCzSHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQINc4fSijfbNIiGhcgvwjsjxVFJHUstK9L1T8OTKUjgloN0Y3CCJAaDdWRwgiQG,enr:-J24QG3ypT4xSu0gjb5PABCmVxZqBjVw9ca7pvsI8jl4KATYAnxBmfkaIuEqy9sKvDHKuNCsy57WwK9wTt2aQgcaDDyGAYiOoGAXgmlkgnY0gmlwhDbGmZaHb3BzdGFja4OFQgCJc2VjcDI1NmsxoQIeAK_--tcLEiu7HvoUlbV52MspE0uCocsx1f_rYvRenIN0Y3CCJAaDdWRwgiQG # RETH CONFIGURATION # ---------------- @@ -52,11 +41,6 @@ OP_RETH_DISABLE_DISCOVERY="false" OP_RETH_DISABLE_TX_POOL_GOSSIP="true" OP_RETH_OP_NETWORK="base-sepolia" -# RPC CONFIGURATION -# --------------- -OP_NODE_RPC_ADDR=0.0.0.0 -OP_NODE_RPC_PORT=8545 - # GETH CACHE SETTINGS # ----------------- GETH_CACHE="20480" # 20GB @@ -68,12 +52,11 @@ OP_GETH_NET_RESTRICT="10.0.0.0/8" # LOGGING & MONITORING # ------------------ -OP_NODE_LOG_LEVEL=info -OP_NODE_LOG_FORMAT="json" -OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log -OP_NODE_METRICS_ENABLED="true" -OP_NODE_METRICS_ADDR=0.0.0.0 -OP_NODE_METRICS_PORT="7300" +BASE_NODE_LOG_VERBOSITY=3 +BASE_NODE_LOG_FORMAT="json" +BASE_NODE_METRICS_ENABLED="true" +BASE_NODE_METRICS_ADDR=0.0.0.0 +BASE_NODE_METRICS_PORT="7300" STATSD_ADDRESS="172.17.0.1" # OPTIONAL SETTINGS @@ -86,7 +69,7 @@ STATSD_ADDRESS="172.17.0.1" # OP_NETHERMIND_ETHSTATS_ENDPOINT=ethstats_endpoint # TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE) -# OP_NODE_L1_TRUST_RPC=true +# BASE_NODE_L1_TRUST_RPC=true # SNAP SYNC (OPTIONAL EXPERIMENTAL FEATURE - UNCOMMENT TO ENABLE) # NOTE: This feature is experimental and may lead to syncing issues diff --git a/.gitignore b/.gitignore index daa8017b0..f1f66e5b9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /reth-data/ /nethermind-data/ /dependency_updater/dependency_updater -.DS_Store \ No newline at end of file +.DS_Store +.env.sepolia-alpha \ No newline at end of file diff --git a/base-consensus-entrypoint b/base-consensus-entrypoint new file mode 100755 index 000000000..d7ca3c455 --- /dev/null +++ b/base-consensus-entrypoint @@ -0,0 +1,47 @@ +#!/bin/bash +set -eu + +get_public_ip() { + # Define a list of HTTP-based providers + local PROVIDERS=( + "http://ifconfig.me" + "http://api.ipify.org" + "http://ipecho.net/plain" + "http://v4.ident.me" + ) + # Iterate through the providers until an IP is found or the list is exhausted + for provider in "${PROVIDERS[@]}"; do + local IP + IP=$(curl -s --max-time 10 --connect-timeout 5 "$provider") + # Check if IP contains a valid format (simple regex for an IPv4 address) + if [[ $IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "$IP" + return 0 + fi + done + return 1 +} + +if [[ -z "${BASE_NODE_NETWORK:-}" ]]; then + echo "expected BASE_NODE_NETWORK to be set" 1>&2 + exit 1 +fi + +# wait until local execution client comes up (authed so will return 401 without token) +until [ "$(curl -s --max-time 10 --connect-timeout 5 -w '%{http_code}' -o /dev/null "${BASE_NODE_L2_ENGINE_RPC/ws/http}")" -eq 401 ]; do + echo "waiting for execution client to be ready" + sleep 5 +done + +# public-facing P2P node, advertise public IP address +if PUBLIC_IP=$(get_public_ip); then + echo "fetched public IP is: $PUBLIC_IP" +else + echo "Could not retrieve public IP." + exit 8 +fi +export BASE_NODE_P2P_ADVERTISE_IP=$PUBLIC_IP + +echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH" + +exec ./base-consensus node diff --git a/docker-compose.yml b/docker-compose.yml index fc7cebe1d..3b55d0f6f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,6 @@ services: - "9222:9222/udp" # P2P UDP - "7300:7300" # metrics - "6060:6060" # pprof - command: ["bash", "./op-node-entrypoint"] + command: ["bash", "./base-consensus-entrypoint"] env_file: - ${NETWORK_ENV:-.env.mainnet} # Use .env.mainnet by default, override with .env.sepolia for testnet diff --git a/geth/Dockerfile b/geth/Dockerfile index e9312e2f1..76dcaccc4 100644 --- a/geth/Dockerfile +++ b/geth/Dockerfile @@ -1,17 +1,18 @@ -FROM golang:1.24 AS op - -RUN curl -sSfL 'https://just.systems/install.sh' | bash -s -- --to /usr/local/bin +FROM rust:1.88 AS base-consensus WORKDIR /app COPY versions.env /tmp/versions.env -RUN . /tmp/versions.env && git clone $OP_NODE_REPO --branch $OP_NODE_TAG --single-branch . && \ - git switch -c branch-$OP_NODE_TAG && \ - bash -c '[ "$(git rev-parse HEAD)" = "$OP_NODE_COMMIT" ]' +RUN apt-get update && apt-get -y upgrade && \ + apt-get install -y git libclang-dev pkg-config curl build-essential && \ + rm -rf /var/lib/apt/lists/* + +RUN . /tmp/versions.env && git clone $BASE_NODE_REPO . && \ + git checkout tags/$BASE_NODE_TAG && \ + bash -c '[ "$(git rev-parse HEAD)" = "$BASE_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1) -RUN . /tmp/versions.env && cd op-node && \ - make VERSION=$OP_NODE_TAG op-node +RUN cargo build --bin base-consensus --profile maxperf FROM golang:1.24 AS geth @@ -34,10 +35,10 @@ RUN mkdir -p /var/log/supervisor WORKDIR /app -COPY --from=op /app/op-node/bin/op-node ./ +COPY --from=base-consensus /app/target/maxperf/base-consensus ./ COPY --from=geth /app/build/bin/geth ./ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY geth/geth-entrypoint ./execution-entrypoint -COPY op-node-entrypoint . +COPY base-consensus-entrypoint . CMD ["/usr/bin/supervisord"] diff --git a/geth/geth-entrypoint b/geth/geth-entrypoint index 7180e8337..3c23b4cf4 100755 --- a/geth/geth-entrypoint +++ b/geth/geth-entrypoint @@ -21,14 +21,14 @@ GETH_CACHE_GC="${GETH_CACHE_GC:-12}" GETH_CACHE_SNAPSHOT="${GETH_CACHE_SNAPSHOT:-24}" GETH_CACHE_TRIE="${GETH_CACHE_TRIE:-44}" -if [[ -z "$OP_NODE_NETWORK" ]]; then - echo "expected OP_NODE_NETWORK to be set" 1>&2 +if [[ -z "$BASE_NODE_NETWORK" ]]; then + echo "expected BASE_NODE_NETWORK to be set" 1>&2 exit 1 fi mkdir -p $GETH_DATA_DIR -echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" +echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH" if [ "${OP_GETH_ETH_STATS+x}" = x ]; then ADDITIONAL_ARGS="$ADDITIONAL_ARGS --ethstats=$OP_GETH_ETH_STATS" @@ -62,7 +62,7 @@ exec ./geth \ --authrpc.addr=0.0.0.0 \ --authrpc.port="$AUTHRPC_PORT" \ --authrpc.vhosts="*" \ - --authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \ + --authrpc.jwtsecret="$BASE_NODE_L2_ENGINE_AUTH" \ --ws \ --ws.addr=0.0.0.0 \ --ws.port="$WS_PORT" \ @@ -76,7 +76,7 @@ exec ./geth \ --maxpeers=100 \ --rollup.sequencerhttp="$OP_GETH_SEQUENCER_HTTP" \ --rollup.halt=major \ - --op-network="$OP_NODE_NETWORK" \ + --op-network="$OP_GETH_OP_NETWORK" \ --discovery.port="$DISCOVERY_PORT" \ --port="$P2P_PORT" \ --rollup.disabletxpoolgossip=true \ diff --git a/nethermind/Dockerfile b/nethermind/Dockerfile index f03032f76..3f6ed5ebf 100644 --- a/nethermind/Dockerfile +++ b/nethermind/Dockerfile @@ -1,17 +1,18 @@ -FROM golang:1.24 AS op - -RUN curl -sSfL 'https://just.systems/install.sh' | bash -s -- --to /usr/local/bin +FROM rust:1.88 AS base-consensus WORKDIR /app COPY versions.env /tmp/versions.env -RUN . /tmp/versions.env && git clone $OP_NODE_REPO --branch $OP_NODE_TAG --single-branch . && \ - git switch -c branch-$OP_NODE_TAG && \ - bash -c '[ "$(git rev-parse HEAD)" = "$OP_NODE_COMMIT" ]' +RUN apt-get update && apt-get -y upgrade && \ + apt-get install -y git libclang-dev pkg-config curl build-essential && \ + rm -rf /var/lib/apt/lists/* + +RUN . /tmp/versions.env && git clone $BASE_NODE_REPO . && \ + git checkout tags/$BASE_NODE_TAG && \ + bash -c '[ "$(git rev-parse HEAD)" = "$BASE_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1) -RUN . /tmp/versions.env && cd op-node && \ - just VERSION=$OP_NODE_TAG op-node +RUN cargo build --bin base-consensus --profile maxperf FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build @@ -42,9 +43,9 @@ RUN mkdir -p /var/log/supervisor WORKDIR /app COPY --from=build /publish ./ -COPY --from=op /app/op-node/bin/op-node ./ +COPY --from=base-consensus /app/target/maxperf/base-consensus ./ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY nethermind/nethermind-entrypoint ./execution-entrypoint -COPY op-node-entrypoint . +COPY base-consensus-entrypoint . CMD ["/usr/bin/supervisord"] diff --git a/nethermind/nethermind-entrypoint b/nethermind/nethermind-entrypoint index d818d92fc..13d1f52e8 100755 --- a/nethermind/nethermind-entrypoint +++ b/nethermind/nethermind-entrypoint @@ -14,8 +14,8 @@ P2P_PORT="${P2P_PORT:-30303}" ADDITIONAL_ARGS="" # Check if required variables are set -if [[ -z "$OP_NODE_NETWORK" ]]; then - echo "Expected OP_NODE_NETWORK to be set" 1>&2 +if [[ -z "$BASE_NODE_NETWORK" ]]; then + echo "Expected BASE_NODE_NETWORK to be set" 1>&2 exit 1 fi @@ -23,11 +23,11 @@ fi mkdir -p "$NETHERMIND_DATA_DIR" # Write the JWT secret -if [[ -z "$OP_NODE_L2_ENGINE_AUTH_RAW" ]]; then - echo "Expected OP_NODE_L2_ENGINE_AUTH_RAW to be set" 1>&2 +if [[ -z "$BASE_NODE_L2_ENGINE_AUTH_RAW" ]]; then + echo "Expected BASE_NODE_L2_ENGINE_AUTH_RAW to be set" 1>&2 exit 1 fi -echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" +echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH" # Additional arguments based on environment variables if [[ -n "${OP_NETHERMIND_BOOTNODES:-}" ]]; then @@ -44,7 +44,7 @@ fi # Execute Nethermind exec ./nethermind \ - --config="$OP_NODE_NETWORK" \ + --config="$OP_NETHERMIND_NETWORK" \ --datadir="$NETHERMIND_DATA_DIR" \ --Optimism.SequencerUrl=$OP_SEQUENCER_HTTP \ --log="$NETHERMIND_LOG_LEVEL" \ @@ -52,7 +52,7 @@ exec ./nethermind \ --JsonRpc.Host=0.0.0.0 \ --JsonRpc.WebSocketsPort="$WS_PORT" \ --JsonRpc.Port="$RPC_PORT" \ - --JsonRpc.JwtSecretFile="$OP_NODE_L2_ENGINE_AUTH" \ + --JsonRpc.JwtSecretFile="$BASE_NODE_L2_ENGINE_AUTH" \ --JsonRpc.EngineHost=0.0.0.0 \ --JsonRpc.EnginePort="$AUTHRPC_PORT" \ --HealthChecks.Enabled=true \ diff --git a/reth/Dockerfile b/reth/Dockerfile index a0138937f..04df8778b 100644 --- a/reth/Dockerfile +++ b/reth/Dockerfile @@ -1,19 +1,4 @@ -FROM golang:1.24 AS op - -RUN curl -sSfL 'https://just.systems/install.sh' | bash -s -- --to /usr/local/bin - -WORKDIR /app - -COPY versions.env /tmp/versions.env - -RUN . /tmp/versions.env && git clone $OP_NODE_REPO --branch $OP_NODE_TAG --single-branch . && \ - git switch -c branch-$OP_NODE_TAG && \ - bash -c '[ "$(git rev-parse HEAD)" = "$OP_NODE_COMMIT" ]' - -RUN . /tmp/versions.env && cd op-node && \ - make VERSION=$OP_NODE_TAG op-node - -FROM rust:1.88 AS reth-base +FROM rust:1.88 AS base WORKDIR /app @@ -23,11 +8,11 @@ RUN apt-get update && apt-get -y upgrade && \ apt-get install -y git libclang-dev pkg-config curl build-essential && \ rm -rf /var/lib/apt/lists/* -RUN . /tmp/versions.env && git clone $BASE_RETH_NODE_REPO . && \ - git checkout tags/$BASE_RETH_NODE_TAG && \ - bash -c '[ "$(git rev-parse HEAD)" = "$BASE_RETH_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1) +RUN . /tmp/versions.env && git clone $BASE_NODE_REPO . && \ + git checkout tags/$BASE_NODE_TAG && \ + bash -c '[ "$(git rev-parse HEAD)" = "$BASE_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1) -RUN cargo build --bin base-reth-node --profile maxperf +RUN cargo build --bin base-reth-node --bin base-consensus --profile maxperf FROM ubuntu:24.04 @@ -38,10 +23,10 @@ RUN mkdir -p /var/log/supervisor WORKDIR /app -COPY --from=op /app/op-node/bin/op-node ./ -COPY --from=reth-base /app/target/maxperf/base-reth-node ./ +COPY --from=base /app/target/maxperf/base-consensus ./ +COPY --from=base /app/target/maxperf/base-reth-node ./ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY ./reth/reth-entrypoint ./execution-entrypoint -COPY op-node-entrypoint . +COPY base-consensus-entrypoint . CMD ["/usr/bin/supervisord"] diff --git a/reth/reth-entrypoint b/reth/reth-entrypoint index 12d9b9cf8..9aae6733f 100755 --- a/reth/reth-entrypoint +++ b/reth/reth-entrypoint @@ -108,7 +108,7 @@ fi mkdir -p "$RETH_DATA_DIR" echo "Starting reth with additional args: $ADDITIONAL_ARGS" -echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH" +echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH" exec "$BINARY" node \ -$LOG_LEVEL \ @@ -127,7 +127,7 @@ exec "$BINARY" node \ --ipcpath="$IPC_PATH" \ --authrpc.addr=0.0.0.0 \ --authrpc.port="$AUTHRPC_PORT" \ - --authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \ + --authrpc.jwtsecret="$BASE_NODE_L2_ENGINE_AUTH" \ --metrics=0.0.0.0:"$METRICS_PORT" \ --max-outbound-peers=100 \ --chain "$RETH_CHAIN" \ diff --git a/supervisord.conf b/supervisord.conf index 8021dce12..0f54c67ca 100644 --- a/supervisord.conf +++ b/supervisord.conf @@ -3,8 +3,8 @@ nodaemon=true logfile=/dev/null logfile_maxbytes=0 -[program:op-node] -command=/app/op-node-entrypoint +[program:base-consensus] +command=/app/base-consensus-entrypoint stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true diff --git a/versions.env b/versions.env index a4431f1d7..dd49398ef 100644 --- a/versions.env +++ b/versions.env @@ -1,12 +1,9 @@ -export BASE_RETH_NODE_COMMIT=6e54e8cbcbd27cb86bde54d3a5b0e9b4e9ea960a -export BASE_RETH_NODE_REPO=https://github.com/base/base.git -export BASE_RETH_NODE_TAG=v0.5.1 +export BASE_NODE_COMMIT=6e54e8cbcbd27cb86bde54d3a5b0e9b4e9ea960a +export BASE_NODE_REPO=https://github.com/base/base.git +export BASE_NODE_TAG=v0.5.1 export NETHERMIND_COMMIT=31cb81b7328026791cdfaccd9db230c82f1db02d export NETHERMIND_REPO=https://github.com/NethermindEth/nethermind.git export NETHERMIND_TAG=1.36.0 export OP_GETH_COMMIT=32cc3b8caf8647dbefbd29b2c3ed862132e53ad2 export OP_GETH_REPO=https://github.com/ethereum-optimism/op-geth.git export OP_GETH_TAG=v1.101608.0 -export OP_NODE_COMMIT=b66cc587b4185089e6f81bf6a4fc4233f2a7505d -export OP_NODE_REPO=https://github.com/ethereum-optimism/optimism.git -export OP_NODE_TAG=op-node/v1.16.6 \ No newline at end of file