Skip to content

Commit f0914f9

Browse files
committed
feat: replace op-node with base-consensus
1 parent 6a2a361 commit f0914f9

File tree

12 files changed

+176
-27
lines changed

12 files changed

+176
-27
lines changed

.env.mainnet

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# --------------------
66
RETH_CHAIN=base
77
OP_NODE_NETWORK=base-mainnet
8+
BASE_NODE_NETWORK=8453
89
OP_GETH_OP_NETWORK=base-mainnet
910

1011
# BASE SEQUENCER ENDPOINTS
@@ -14,13 +15,13 @@ OP_SEQUENCER_HTTP=https://mainnet-sequencer.base.org
1415
OP_GETH_SEQUENCER_HTTP=https://mainnet-sequencer.base.org
1516
OP_RETH_SEQUENCER_HTTP=https://mainnet-sequencer.base.org
1617

17-
# SYNC CONFIGURATION
18+
# SYNC CONFIGURATION (deprecated)
1819
# -----------------
1920
OP_NODE_SYNCMODE=execution-layer
2021
OP_NODE_VERIFIER_L1_CONFS=4
2122
OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
2223

23-
# [REQUIRED] L1 CONFIGURATION
24+
# [REQUIRED] L1 CONFIGURATION
2425
# --------------------------
2526
# Replace these values with your L1 (Ethereum) node endpoints
2627
OP_NODE_L1_ETH_RPC=<your-preferred-l1-rpc>
@@ -30,13 +31,21 @@ OP_NODE_L1_BEACON_FETCH_ALL_SIDECARS="true"
3031
OP_NODE_L1_RPC_KIND="debug_geth"
3132
OP_NODE_L1_TRUST_RPC="false"
3233

34+
BASE_NODE_L1_ETH_RPC=<your-preferred-l1-rpc>
35+
BASE_NODE_L1_BEACON=<your-preferred-l1-beacon>
36+
BASE_NODE_L1_TRUST_RPC="false"
37+
3338
# ENGINE CONFIGURATION
3439
# -------------------
3540
OP_NODE_L2_ENGINE_KIND=reth
3641
OP_NODE_L2_ENGINE_RPC=ws://execution:8551
3742
OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt
3843
OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a
3944

45+
BASE_NODE_L2_ENGINE_RPC=ws://execution:8551
46+
BASE_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt
47+
BASE_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a
48+
4049
# P2P CONFIGURATION
4150
# ---------------
4251
OP_NODE_P2P_AGENT=base
@@ -46,13 +55,18 @@ OP_NODE_P2P_LISTEN_UDP_PORT=9222
4655
OP_NODE_INTERNAL_IP="true"
4756
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
4857

58+
BASE_NODE_P2P_LISTEN_IP=0.0.0.0
59+
BASE_NODE_P2P_ADVERTISE_TCP_PORT=9222
60+
BASE_NODE_P2P_ADVERTISE_UDP_PORT=9222
61+
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
62+
4963
# RETH CONFIGURATION
5064
# ----------------
5165
OP_RETH_DISABLE_DISCOVERY="false"
5266
OP_RETH_DISABLE_TX_POOL_GOSSIP="true"
5367
OP_RETH_OP_NETWORK="base"
5468

55-
# RPC CONFIGURATION
69+
# RPC CONFIGURATION (deprecated)
5670
# ---------------
5771
OP_NODE_RPC_ADDR=0.0.0.0
5872
OP_NODE_RPC_PORT=8545
@@ -74,6 +88,12 @@ OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
7488
OP_NODE_METRICS_ENABLED="true"
7589
OP_NODE_METRICS_ADDR=0.0.0.0
7690
OP_NODE_METRICS_PORT="7300"
91+
92+
BASE_NODE_LOG_VERBOSITY=3
93+
BASE_NODE_LOG_FORMAT="json"
94+
BASE_NODE_METRICS_ENABLED="true"
95+
BASE_NODE_METRICS_ADDR=0.0.0.0
96+
BASE_NODE_METRICS_PORT="7300"
7797
STATSD_ADDRESS="172.17.0.1"
7898

7999
# OPTIONAL SETTINGS
@@ -85,7 +105,7 @@ STATSD_ADDRESS="172.17.0.1"
85105
# OP_NETHERMIND_ETHSTATS_NODE_NAME=NethermindNode
86106
# OP_NETHERMIND_ETHSTATS_ENDPOINT=ethstats_endpoint
87107

88-
# TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE)
108+
# TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE) (deprecated)
89109
# OP_NODE_L1_TRUST_RPC=true
90110

91111
# SNAP SYNC (OPTIONAL EXPERIMENTAL FEATURE - UNCOMMENT TO ENABLE)

.env.sepolia

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# --------------------
66
RETH_CHAIN=base-sepolia
77
OP_NODE_NETWORK=base-sepolia
8+
BASE_NODE_NETWORK=84532
89
OP_GETH_OP_NETWORK=base-sepolia
910

1011
# BASE SEQUENCER ENDPOINTS
@@ -14,13 +15,13 @@ OP_SEQUENCER_HTTP=https://sepolia-sequencer.base.org
1415
OP_GETH_SEQUENCER_HTTP=https://sepolia-sequencer.base.org
1516
OP_RETH_SEQUENCER_HTTP=https://sepolia-sequencer.base.org
1617

17-
# SYNC CONFIGURATION
18+
# SYNC CONFIGURATION (deprecated)
1819
# -----------------
1920
OP_NODE_SYNCMODE=execution-layer
2021
OP_NODE_VERIFIER_L1_CONFS=4
2122
OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
2223

23-
# [REQUIRED] L1 CONFIGURATION
24+
# [REQUIRED] L1 CONFIGURATION
2425
# --------------------------
2526
# Replace these values with your L1 (Ethereum) node endpoints
2627
OP_NODE_L1_ETH_RPC=<your-preferred-l1-rpc>
@@ -30,13 +31,21 @@ OP_NODE_L1_BEACON_FETCH_ALL_SIDECARS="true"
3031
OP_NODE_L1_RPC_KIND="debug_geth"
3132
OP_NODE_L1_TRUST_RPC="false"
3233

34+
BASE_NODE_L1_ETH_RPC=<your-preferred-l1-rpc>
35+
BASE_NODE_L1_BEACON=<your-preferred-l1-beacon>
36+
BASE_NODE_L1_TRUST_RPC="false"
37+
3338
# ENGINE CONFIGURATION
3439
# -------------------
3540
OP_NODE_L2_ENGINE_KIND=reth
3641
OP_NODE_L2_ENGINE_RPC=ws://execution:8551
3742
OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt
3843
OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a
3944

45+
BASE_NODE_L2_ENGINE_RPC=ws://execution:8551
46+
BASE_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt
47+
BASE_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a
48+
4049
# P2P CONFIGURATION
4150
# ---------------
4251
OP_NODE_P2P_AGENT=base
@@ -46,13 +55,18 @@ OP_NODE_P2P_LISTEN_UDP_PORT=9222
4655
OP_NODE_INTERNAL_IP="true"
4756
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
4857

58+
BASE_NODE_P2P_LISTEN_IP=0.0.0.0
59+
BASE_NODE_P2P_ADVERTISE_TCP_PORT=9222
60+
BASE_NODE_P2P_ADVERTISE_UDP_PORT=9222
61+
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
62+
4963
# RETH CONFIGURATION
5064
# ----------------
5165
OP_RETH_DISABLE_DISCOVERY="false"
5266
OP_RETH_DISABLE_TX_POOL_GOSSIP="true"
5367
OP_RETH_OP_NETWORK="base-sepolia"
5468

55-
# RPC CONFIGURATION
69+
# RPC CONFIGURATION (deprecated)
5670
# ---------------
5771
OP_NODE_RPC_ADDR=0.0.0.0
5872
OP_NODE_RPC_PORT=8545
@@ -74,6 +88,12 @@ OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
7488
OP_NODE_METRICS_ENABLED="true"
7589
OP_NODE_METRICS_ADDR=0.0.0.0
7690
OP_NODE_METRICS_PORT="7300"
91+
92+
BASE_NODE_LOG_VERBOSITY=3
93+
BASE_NODE_LOG_FORMAT="json"
94+
BASE_NODE_METRICS_ENABLED="true"
95+
BASE_NODE_METRICS_ADDR=0.0.0.0
96+
BASE_NODE_METRICS_PORT="7300"
7797
STATSD_ADDRESS="172.17.0.1"
7898

7999
# OPTIONAL SETTINGS
@@ -85,7 +105,7 @@ STATSD_ADDRESS="172.17.0.1"
85105
# OP_NETHERMIND_ETHSTATS_NODE_NAME=NethermindNode
86106
# OP_NETHERMIND_ETHSTATS_ENDPOINT=ethstats_endpoint
87107

88-
# TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE)
108+
# TRUSTED RPC MODE (OPTIONAL - UNCOMMENT TO ENABLE) (deprecated)
89109
# OP_NODE_L1_TRUST_RPC=true
90110

91111
# SNAP SYNC (OPTIONAL EXPERIMENTAL FEATURE - UNCOMMENT TO ENABLE)

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
/reth-data/
44
/nethermind-data/
55
/dependency_updater/dependency_updater
6-
.DS_Store
6+
.DS_Store

base-consensus-entrypoint

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/bash
2+
set -eu
3+
4+
get_public_ip() {
5+
# Define a list of HTTP-based providers
6+
local PROVIDERS=(
7+
"http://ifconfig.me"
8+
"http://api.ipify.org"
9+
"http://ipecho.net/plain"
10+
"http://v4.ident.me"
11+
)
12+
# Iterate through the providers until an IP is found or the list is exhausted
13+
for provider in "${PROVIDERS[@]}"; do
14+
local IP
15+
IP=$(curl -s --max-time 10 --connect-timeout 5 "$provider")
16+
# Check if IP contains a valid format (simple regex for an IPv4 address)
17+
if [[ $IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
18+
echo "$IP"
19+
return 0
20+
fi
21+
done
22+
return 1
23+
}
24+
25+
if [[ -z "${BASE_NODE_NETWORK:-}" ]]; then
26+
echo "expected BASE_NODE_NETWORK to be set" 1>&2
27+
exit 1
28+
fi
29+
30+
# wait until local execution client comes up (authed so will return 401 without token)
31+
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
32+
echo "waiting for execution client to be ready"
33+
sleep 5
34+
done
35+
36+
# public-facing P2P node, advertise public IP address
37+
if PUBLIC_IP=$(get_public_ip); then
38+
echo "fetched public IP is: $PUBLIC_IP"
39+
else
40+
echo "Could not retrieve public IP."
41+
exit 8
42+
fi
43+
export BASE_NODE_P2P_ADVERTISE_IP=$PUBLIC_IP
44+
45+
echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH"
46+
47+
if [[ -n "${BASE_NODE_SOURCE_L2_RPC:-}" ]]; then
48+
exec ./base-consensus follow
49+
fi
50+
51+
exec ./base-consensus node

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ services:
2828
- "9222:9222/udp" # P2P UDP
2929
- "7300:7300" # metrics
3030
- "6060:6060" # pprof
31-
command: ["bash", "./op-node-entrypoint"]
31+
command: ["bash", "./base-consensus-entrypoint"]
3232
env_file:
3333
- ${NETWORK_ENV:-.env.mainnet} # Use .env.mainnet by default, override with .env.sepolia for testnet

geth/Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@ RUN . /tmp/versions.env && git clone $OP_NODE_REPO --branch $OP_NODE_TAG --singl
1313
RUN . /tmp/versions.env && cd op-node && \
1414
make VERSION=$OP_NODE_TAG op-node
1515

16+
FROM rust:1.88 AS base-consensus
17+
18+
WORKDIR /app
19+
20+
COPY versions.env /tmp/versions.env
21+
22+
RUN apt-get update && apt-get -y upgrade && \
23+
apt-get install -y git libclang-dev pkg-config curl build-essential && \
24+
rm -rf /var/lib/apt/lists/*
25+
26+
RUN . /tmp/versions.env && git clone $BASE_NODE_REPO . && \
27+
git checkout tags/$BASE_NODE_TAG && \
28+
bash -c '[ "$(git rev-parse HEAD)" = "$BASE_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1)
29+
30+
RUN cargo build --bin base-consensus --profile maxperf
31+
1632
FROM golang:1.24 AS geth
1733

1834
WORKDIR /app
@@ -35,9 +51,11 @@ RUN mkdir -p /var/log/supervisor
3551
WORKDIR /app
3652

3753
COPY --from=op /app/op-node/bin/op-node ./
54+
COPY --from=base-consensus /app/target/maxperf/base-consensus ./
3855
COPY --from=geth /app/build/bin/geth ./
3956
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
4057
COPY geth/geth-entrypoint ./execution-entrypoint
4158
COPY op-node-entrypoint .
59+
COPY base-consensus-entrypoint .
4260

4361
CMD ["/usr/bin/supervisord"]

geth/geth-entrypoint

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ fi
2828

2929
mkdir -p $GETH_DATA_DIR
3030

31-
echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH"
31+
echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH"
3232

3333
if [ "${OP_GETH_ETH_STATS+x}" = x ]; then
3434
ADDITIONAL_ARGS="$ADDITIONAL_ARGS --ethstats=$OP_GETH_ETH_STATS"
@@ -48,7 +48,7 @@ fi
4848

4949
if [ "${HOST_IP:+x}" = x ]; then
5050
ADDITIONAL_ARGS="$ADDITIONAL_ARGS --nat=extip:$HOST_IP"
51-
fi
51+
fi
5252

5353
exec ./geth \
5454
--datadir="$GETH_DATA_DIR" \
@@ -62,7 +62,7 @@ exec ./geth \
6262
--authrpc.addr=0.0.0.0 \
6363
--authrpc.port="$AUTHRPC_PORT" \
6464
--authrpc.vhosts="*" \
65-
--authrpc.jwtsecret="$OP_NODE_L2_ENGINE_AUTH" \
65+
--authrpc.jwtsecret="$BASE_NODE_L2_ENGINE_AUTH" \
6666
--ws \
6767
--ws.addr=0.0.0.0 \
6868
--ws.port="$WS_PORT" \

nethermind/Dockerfile

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@ RUN . /tmp/versions.env && git clone $OP_NODE_REPO --branch $OP_NODE_TAG --singl
1313
RUN . /tmp/versions.env && cd op-node && \
1414
just VERSION=$OP_NODE_TAG op-node
1515

16+
FROM rust:1.88 AS base-consensus
17+
18+
WORKDIR /app
19+
20+
COPY versions.env /tmp/versions.env
21+
22+
RUN apt-get update && apt-get -y upgrade && \
23+
apt-get install -y git libclang-dev pkg-config curl build-essential && \
24+
rm -rf /var/lib/apt/lists/*
25+
26+
RUN . /tmp/versions.env && git clone $BASE_NODE_REPO . && \
27+
git checkout tags/$BASE_NODE_TAG && \
28+
bash -c '[ "$(git rev-parse HEAD)" = "$BASE_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1)
29+
30+
RUN cargo build --bin base-consensus --profile maxperf
31+
1632
FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS build
1733

1834
ARG BUILD_CONFIG=release
@@ -25,7 +41,7 @@ COPY versions.env /tmp/versions.env
2541
RUN . /tmp/versions.env && git clone $NETHERMIND_REPO --branch $NETHERMIND_TAG --single-branch . && \
2642
git switch -c $NETHERMIND_TAG && \
2743
bash -c '[ "$(git rev-parse HEAD)" = "$NETHERMIND_COMMIT" ]'
28-
44+
2945
RUN TARGETARCH=${TARGETARCH#linux/} && \
3046
arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \
3147
echo "Using architecture: $arch" && \
@@ -43,8 +59,10 @@ WORKDIR /app
4359

4460
COPY --from=build /publish ./
4561
COPY --from=op /app/op-node/bin/op-node ./
62+
COPY --from=base-consensus /app/target/maxperf/base-consensus ./
4663
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
4764
COPY nethermind/nethermind-entrypoint ./execution-entrypoint
4865
COPY op-node-entrypoint .
66+
COPY base-consensus-entrypoint .
4967

5068
CMD ["/usr/bin/supervisord"]

nethermind/nethermind-entrypoint

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ fi
2323
mkdir -p "$NETHERMIND_DATA_DIR"
2424

2525
# Write the JWT secret
26-
if [[ -z "$OP_NODE_L2_ENGINE_AUTH_RAW" ]]; then
27-
echo "Expected OP_NODE_L2_ENGINE_AUTH_RAW to be set" 1>&2
26+
if [[ -z "$BASE_NODE_L2_ENGINE_AUTH_RAW" ]]; then
27+
echo "Expected BASE_NODE_L2_ENGINE_AUTH_RAW to be set" 1>&2
2828
exit 1
2929
fi
30-
echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH"
30+
echo "$BASE_NODE_L2_ENGINE_AUTH_RAW" > "$BASE_NODE_L2_ENGINE_AUTH"
3131

3232
# Additional arguments based on environment variables
3333
if [[ -n "${OP_NETHERMIND_BOOTNODES:-}" ]]; then
@@ -52,7 +52,7 @@ exec ./nethermind \
5252
--JsonRpc.Host=0.0.0.0 \
5353
--JsonRpc.WebSocketsPort="$WS_PORT" \
5454
--JsonRpc.Port="$RPC_PORT" \
55-
--JsonRpc.JwtSecretFile="$OP_NODE_L2_ENGINE_AUTH" \
55+
--JsonRpc.JwtSecretFile="$BASE_NODE_L2_ENGINE_AUTH" \
5656
--JsonRpc.EngineHost=0.0.0.0 \
5757
--JsonRpc.EnginePort="$AUTHRPC_PORT" \
5858
--HealthChecks.Enabled=true \

reth/Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ RUN . /tmp/versions.env && git clone $BASE_RETH_NODE_REPO . && \
5252
git checkout tags/$BASE_RETH_NODE_TAG && \
5353
bash -c '[ "$(git rev-parse HEAD)" = "$BASE_RETH_NODE_COMMIT" ]' || (echo "Commit hash verification failed" && exit 1)
5454

55-
RUN cargo build --bin base-reth-node --profile maxperf
55+
RUN cargo build --bin base-reth-node --bin base-consensus --profile maxperf
5656

5757
FROM ubuntu:24.04
5858

@@ -64,9 +64,11 @@ RUN mkdir -p /var/log/supervisor
6464
WORKDIR /app
6565

6666
COPY --from=op /app/op-node/bin/op-node ./
67+
COPY --from=reth-base /app/target/maxperf/base-consensus ./
6768
COPY --from=reth-base /app/target/maxperf/base-reth-node ./
6869
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
6970
COPY ./reth/reth-entrypoint ./execution-entrypoint
7071
COPY op-node-entrypoint .
72+
COPY base-consensus-entrypoint .
7173

7274
CMD ["/usr/bin/supervisord"]

0 commit comments

Comments
 (0)