support base

This commit is contained in:
Sebastian
2023-08-26 09:49:18 +02:00
parent 1d956f2ffb
commit 6ca3aa2d4b
12 changed files with 30007 additions and 5 deletions

View File

@@ -25,6 +25,8 @@ services:
- "traefik.http.services.avalanche.loadbalancer.server.port=9650" - "traefik.http.services.avalanche.loadbalancer.server.port=9650"
- "traefik.http.routers.avalanche.entrypoints=websecure" - "traefik.http.routers.avalanche.entrypoints=websecure"
- "traefik.http.routers.avalanche.tls.certresolver=myresolver" - "traefik.http.routers.avalanche.tls.certresolver=myresolver"
- "traefik.http.routers.avalanche.service=avalanche"
- "traefik.http.routers.avalanche-ws.rule=Host(`$DOMAIN`) && PathPrefix(`/avalanche-archive`)"
- "traefik.http.routers.avalanche.middlewares=avalanche-stripprefix, avalanche-replacepath, ipwhitelist" - "traefik.http.routers.avalanche.middlewares=avalanche-stripprefix, avalanche-replacepath, ipwhitelist"
- "traefik.http.middlewares.avalanche-ws-replacepath.replacepath.path=/ext/bc/C/ws" - "traefik.http.middlewares.avalanche-ws-replacepath.replacepath.path=/ext/bc/C/ws"
@@ -32,7 +34,8 @@ services:
- "traefik.http.services.avalanche-ws.loadbalancer.server.port=9650" - "traefik.http.services.avalanche-ws.loadbalancer.server.port=9650"
- "traefik.http.routers.avalanche-ws.entrypoints=websecure" - "traefik.http.routers.avalanche-ws.entrypoints=websecure"
- "traefik.http.routers.avalanche-ws.tls.certresolver=myresolver" - "traefik.http.routers.avalanche-ws.tls.certresolver=myresolver"
- "traefik.http.routers.avalanche-ws.rule=Host(`$DOMAIN`) && PathPrefix(`/avalanche-archive/ws`)" - "traefik.http.routers.avalanche-ws.service=avalanche"
- "traefik.http.routers.avalanche-ws.rule=Host(`$DOMAIN`) && PathPrefix(`/avalanche-archive-ws`)"
- "traefik.http.routers.avalanche-ws.middlewares=avalanche-ws-stripprefix, avalanche-ws-replacepath, ipwhitelist" - "traefik.http.routers.avalanche-ws.middlewares=avalanche-ws-stripprefix, avalanche-ws-replacepath, ipwhitelist"
- "prometheus-scrape.enabled=true" - "prometheus-scrape.enabled=true"

78
base-archive.yml Normal file
View File

@@ -0,0 +1,78 @@
version: '3.1'
services:
base-archive: # this is Optimism's geth client
build: ./base
expose:
- 8545 # RPC
- 8545 # websocket
- 48554 # P2P TCP (currently unused)
- 48554/udp # P2P UDP (currently unused)
- 6060 # metrics
ports:
- "48554:48554"
- "48554:48554/udp"
command: [ "sh", "./geth-entrypoint" ]
restart: always
stop_grace_period: 30s
volumes:
- 'arbitrum-nova-fullnode_data:/arbitrum-node'
volumes:
- base-archive:/data
environment:
- "OP_GETH_GENESIS_FILE_PATH=mainnet/genesis-l2.json"
- "OP_GETH_SEQUENCER_HTTP=https://mainnet-sequencer.base.org"
- "P2P_PORT=48554"
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.base-archive-stripprefix.stripprefix.prefixes=/base-archive"
- "traefik.http.services.base-archive.loadbalancer.server.port=8545"
- "traefik.http.routers.base-archive.entrypoints=websecure"
- "traefik.http.routers.base-archive.tls.certresolver=myresolver"
- "traefik.http.routers.base-archive.rule=Host(`$DOMAIN`) && PathPrefix(`/base-archive`)"
- "traefik.http.routers.base-archive.middlewares=base-archive-stripprefix, ipwhitelist"
networks:
- chains
base-node:
build: ./base
depends_on:
- base-archive
expose:
- 8545 # RPC
- 63839 # P2P TCP
- 63839/udp # P2P UDP
- 7300 # metrics
- 6060 # pprof
ports:
- "63839:63839"
- "63839:63839/udp"
command: [ "sh", "./op-node-entrypoint" ]
restart: always
stop_grace_period: 30s
environment:
- "OP_NODE_L1_ETH_RPC=${BASE_ETHEREUM_ENDPOINT}"
- "OP_NODE_L2_ENGINE_AUTH_RAW=688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a"
- "OP_NODE_L2_ENGINE_AUTH=/tmp/engine-auth-jwt"
- "OP_NODE_L2_ENGINE_RPC=http://base-archive:8551"
- "OP_NODE_LOG_LEVEL=info"
- "OP_NODE_METRICS_ADDR=0.0.0.0"
- "OP_NODE_METRICS_ENABLED=true"
- "OP_NODE_METRICS_PORT=7300"
- "OP_NODE_P2P_AGENT=base"
- "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"
- "OP_NODE_P2P_LISTEN_IP=0.0.0.0"
- "OP_NODE_P2P_LISTEN_TCP_PORT=63839"
- "OP_NODE_P2P_LISTEN_UDP_PORT=63839"
- "OP_NODE_ROLLUP_CONFIG=mainnet/rollup.json"
- "OP_NODE_RPC_ADDR=0.0.0.0"
- "OP_NODE_RPC_PORT=8545"
- "OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log"
- "OP_NODE_VERIFIER_L1_CONFS=4"
- "OP_NODE_L1_TRUST_RPC=${TRUST_BASE_ETHEREUM_ENPOINT:-false}"
networks:
- chains
volumes:
base-archive:

46
base/Dockerfile Normal file
View File

@@ -0,0 +1,46 @@
FROM golang:1.19 as op
WORKDIR /app
ENV REPO=https://github.com/ethereum-optimism/optimism.git
ENV VERSION=v1.1.1
# for verification:
ENV COMMIT=89ed69d80bbec7f2b1dd69e7e48cb7119839d58a
RUN git clone $REPO --branch op-node/$VERSION --single-branch . && \
git switch -c branch-$VERSION && \
bash -c '[ "$(git rev-parse HEAD)" = "$COMMIT" ]'
RUN cd op-node && \
make op-node
FROM golang:1.19 as geth
WORKDIR /app
ENV REPO=https://github.com/ethereum-optimism/op-geth.git
ENV VERSION=v1.101200.1-rc.2
# for verification:
ENV COMMIT=368310232f16b7697d3a79ea7f946f0b2b21ab3f
# avoid depth=1, so the geth build can read tags
RUN git clone $REPO --branch $VERSION --single-branch . && \
git switch -c branch-$VERSION && \
bash -c '[ "$(git rev-parse HEAD)" = "$COMMIT" ]'
RUN go run build/ci.go install -static ./cmd/geth
FROM golang:1.19
RUN apt-get update && \
apt-get install -y jq curl && \
rm -rf /var/lib/apt/lists
WORKDIR /app
COPY --from=op /app/op-node/bin/op-node ./
COPY --from=geth /app/build/bin/geth ./
COPY geth-entrypoint .
COPY op-node-entrypoint .
COPY goerli ./goerli
COPY mainnet ./mainnet

68
base/geth-entrypoint Executable file
View File

@@ -0,0 +1,68 @@
#!/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=""
mkdir -p $GETH_DATA_DIR
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=archive \
--nodiscover \
--maxpeers=100 \
--nat=extip:$HOST_IP \
--networkid="$CHAIN_ID" \
--rollup.sequencerhttp="$OP_GETH_SEQUENCER_HTTP" \
--port="$P2P_PORT" \
$ADDITIONAL_ARGS # intentionally unquoted

15253
base/goerli/genesis-l2.json Executable file

File diff suppressed because one or more lines are too long

29
base/goerli/rollup.json Executable file
View File

@@ -0,0 +1,29 @@
{
"genesis": {
"l1": {
"hash": "0x73d89754a1e0387b89520d989d3be9c37c1f32495a88faf1ea05c61121ab0d19",
"number": 8410981
},
"l2": {
"hash": "0xa3ab140f15ea7f7443a4702da64c10314eb04d488e72974e02e2d728096b4f76",
"number": 0
},
"l2_time": 1675193616,
"system_config": {
"batcherAddr": "0x2d679b567db6187c0c8323fa982cfb88b74dbcc7",
"overhead": "0x0000000000000000000000000000000000000000000000000000000000000834",
"scalar": "0x00000000000000000000000000000000000000000000000000000000000f4240",
"gasLimit": 25000000
}
},
"block_time": 2,
"max_sequencer_drift": 600,
"seq_window_size": 3600,
"channel_timeout": 300,
"l1_chain_id": 5,
"l2_chain_id": 84531,
"batch_inbox_address": "0x8453100000000000000000000000000000000000",
"deposit_contract_address": "0xe93c8cd0d409341205a592f8c4ac1a5fe5585cfa",
"l1_system_config_address": "0xb15eea247ece011c68a614e4a77ad648ff495bc1",
"regolith_time": 1683219600
}

14472
base/mainnet/genesis-l2.json Executable file

File diff suppressed because one or more lines are too long

29
base/mainnet/rollup.json Executable file
View File

@@ -0,0 +1,29 @@
{
"genesis": {
"l1": {
"hash": "0x5c13d307623a926cd31415036c8b7fa14572f9dac64528e857a470511fc30771",
"number": 17481768
},
"l2": {
"hash": "0xf712aa9241cc24369b143cf6dce85f0902a9731e70d66818a3a5845b296c73dd",
"number": 0
},
"l2_time": 1686789347,
"system_config": {
"batcherAddr": "0x5050f69a9786f081509234f1a7f4684b5e5b76c9",
"overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc",
"scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0",
"gasLimit": 30000000
}
},
"block_time": 2,
"max_sequencer_drift": 600,
"seq_window_size": 3600,
"channel_timeout": 300,
"l1_chain_id": 1,
"l2_chain_id": 8453,
"regolith_time": 0,
"batch_inbox_address": "0xff00000000000000000000000000000000008453",
"deposit_contract_address": "0x49048044d57e1c92a77f79988d21fa8faf74e97e",
"l1_system_config_address": "0x73a79fab69143498ed3712e519a88a918e1f4072"
}

16
base/op-node-entrypoint Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -eu
# wait until local geth comes up (authed so will return 401 without token)
until [ "$(curl -s -w '%{http_code}' -o /dev/null "$OP_NODE_L2_ENGINE_RPC")" -eq 401 ]; do
echo "waiting for geth to be ready"
sleep 5
done
# public-facing P2P node, advertise public IP address
PUBLIC_IP=$(curl -s v4.ident.me)
export OP_NODE_P2P_ADVERTISE_IP=$PUBLIC_IP
echo "$OP_NODE_L2_ENGINE_AUTH_RAW" > "$OP_NODE_L2_ENGINE_AUTH"
exec ./op-node

View File

@@ -19,7 +19,6 @@ services:
command: > command: >
--chain mainnet --chain mainnet
--prune=hrtc --prune=hrtc
--externalcl
--port=44081 --port=44081
--metrics --metrics.addr=0.0.0.0 --metrics.port=6060 --metrics --metrics.addr=0.0.0.0 --metrics.port=6060
--private.api.addr=0.0.0.0:9090 --private.api.addr=0.0.0.0:9090

View File

@@ -51,6 +51,7 @@ services:
BLOCK_SIGNER_ADDRESS: '0x000000b36A00872bAF079426e012Cf5Cd2A74E8b' BLOCK_SIGNER_ADDRESS: '0x000000b36A00872bAF079426e012Cf5Cd2A74E8b'
expose: expose:
- 8545 - 8545
- 8546
networks: networks:
- chains - chains
labels: labels:
@@ -62,6 +63,14 @@ services:
- "traefik.http.routers.mantle.rule=Host(`$DOMAIN`) && PathPrefix(`/mantle`)" - "traefik.http.routers.mantle.rule=Host(`$DOMAIN`) && PathPrefix(`/mantle`)"
- "traefik.http.routers.mantle.middlewares=mantle-stripprefix, ipwhitelist" - "traefik.http.routers.mantle.middlewares=mantle-stripprefix, ipwhitelist"
- "traefik.http.middlewares.mantle-ws-stripprefix.stripprefix.prefixes=/mantle-ws"
- "traefik.http.services.mantle-ws.loadbalancer.server.port=8545"
- "traefik.http.routers.mantle-ws.entrypoints=websecure"
- "traefik.http.routers.mantle-ws.tls.certresolver=myresolver"
- "traefik.http.routers.mantle-ws.rule=Host(`$DOMAIN`) && PathPrefix(`/mantle-ws`)"
- "traefik.http.routers.mantle-ws.middlewares=mantle-ws-stripprefix, ipwhitelist"
volumes: volumes:
mantle: mantle:

View File

@@ -10,7 +10,7 @@ services:
condition: service_healthy condition: service_healthy
zkevm-sync: zkevm-sync:
condition: service_started condition: service_started
image: hermeznetwork/zkevm-node:v0.2.1 image: hermeznetwork/zkevm-node:v0.2.5
deploy: deploy:
resources: resources:
limits: limits:
@@ -49,7 +49,7 @@ services:
depends_on: depends_on:
zkevm-state-db: zkevm-state-db:
condition: service_healthy condition: service_healthy
image: hermeznetwork/zkevm-node:v0.2.1 image: hermeznetwork/zkevm-node:v0.2.5
expose: expose:
- 9091 # needed if metrics enabled - 9091 # needed if metrics enabled
deploy: deploy:
@@ -146,7 +146,7 @@ services:
zkevm-prover: zkevm-prover:
restart: unless-stopped restart: unless-stopped
image: hermeznetwork/zkevm-prover:v2.0.1 image: hermeznetwork/zkevm-prover:v2.0.1-hotfix.1
depends_on: depends_on:
zkevm-state-db: zkevm-state-db:
condition: service_healthy condition: service_healthy