make a metis node

This commit is contained in:
Sebastian
2024-01-27 12:14:12 +01:00
parent e5e064687d
commit cefe892917
3 changed files with 197 additions and 0 deletions

94
metis.yml Normal file
View File

@@ -0,0 +1,94 @@
version: "3.1"
services:
metis-dtl:
image: metisdao/data-transport-layer:20230713210754
restart: unless-stopped
stop_grace_period: 30s
environment:
URL: https://metisprotocol.github.io/metis-networks/andromeda-mainnet/addresses.json
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: "${METIS_L1_RPC:-https://eth.llamarpc.com}"
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: "https://andromeda.metis.io/?owner=1088"
DATA_TRANSPORT_LAYER__SYNC_FROM_L1: "false"
DATA_TRANSPORT_LAYER__SYNC_FROM_L2: "true"
DATA_TRANSPORT_LAYER__L2_CHAIN_ID: "1088"
DATA_TRANSPORT_LAYER__DB_PATH: /data/db
DATA_TRANSPORT_LAYER__SERVER_PORT: "7878"
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL: "1000"
DATA_TRANSPORT_LAYER__CONFIRMATIONS: "0"
DATA_TRANSPORT_LAYER__POLLING_INTERVAL: "100"
DATA_TRANSPORT_LAYER__LOGS_PER_POLLING_INTERVAL: "2000"
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS: "true"
DATA_TRANSPORT_LAYER__SERVER_HOSTNAME: "0.0.0.0"
expose:
- 7878
volumes:
- metis-dtl:/data
healthcheck:
test: ["CMD-SHELL", "curl http://127.0.0.1:7878"]
interval: 5s
timeout: 3s
retries: 6
networks:
- chains
metis:
image: metisdao/l2geth:20230713220744
entrypoint: ["sh", "/scripts/geth.sh"]
restart: unless-stopped
stop_grace_period: 2m
env_file:
- ./metis/geth.env
depends_on:
dtl:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl http://127.0.0.1:8545"]
interval: 5s
timeout: 3s
retries: 6
environment:
L2GETH_GENESIS_URL: https://metisprotocol.github.io/metis-networks/andromeda-mainnet/state-dump.latest.json
ROLLUP_CLIENT_HTTP: http://metis-dtl:7878
L2_URL: https://andromeda.metis.io
SEQUENCER_CLIENT_HTTP: https://andromeda.metis.io
ETH1_CTC_DEPLOYMENT_HEIGHT: 13626959
CHAIN_ID: 1088
NETWORK_ID: 1088
TARGET_GAS_LIMIT: 1100000000
volumes:
- metis-l2geth:/root/.ethereum
- ./metis/scripts:/scripts
expose:
- 8546
- 8545
networks:
- chains
metis-proxy:
restart: unless-stopped
image: nginx
depends_on:
- mantle-fullnode
expose:
- 80
environment:
PROXY_HOST: metis
RPC_PORT: 8545
WS_PORT: 8546
networks:
- chains
volumes:
- ./nginx-proxy:/etc/nginx/templates
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.metis-stripprefix.stripprefix.prefixes=/metis"
- "traefik.http.services.metis.loadbalancer.server.port=80"
- "traefik.http.routers.metis.entrypoints=websecure"
- "traefik.http.routers.metis.tls.certresolver=myresolver"
- "traefik.http.routers.metis.rule=Host(`$DOMAIN`) && PathPrefix(`/metis`)"
- "traefik.http.routers.metis.middlewares=metis-stripprefix, ipwhitelist"
Volumes:
- metis-l2geth
- metis-dtl

37
metis/geth.env Normal file
View File

@@ -0,0 +1,37 @@
USING_OVM=true
DATADIR=/root/.ethereum
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=full
# only used internally to sign blocks,no need to keep this secret
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=password
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
ROLLUP_BACKEND=l2
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
ROLLUP_POLL_INTERVAL_FLAG=200ms
ETH1_SYNC_SERVICE_ENABLE=true
ETH1_CONFIRMATION_DEPTH=0
ETH1_CTC_DEPLOYMENT_HEIGHT=8
RPC_ADDR=0.0.0.0
RPC_API=eth,net,web3
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
RPC_GAS_CAP=11000000
RPC_WRITE_TIMEOUT=5m
WS_ADDR=0.0.0.0
WS_API=eth,net,web3
WS_ORIGINS=*
WS=true

66
metis/scripts/geth.sh Normal file
View File

@@ -0,0 +1,66 @@
#!/bin/sh
set -eou
RETRIES=${RETRIES:-40}
VERBOSITY=${VERBOSITY:-3}
if [ -z "$DATADIR" ]; then
echo "Must pass DATADIR"
exit 1
fi
if [ -z "$BLOCK_SIGNER_PRIVATE_KEY" ]; then
echo "Must pass BLOCK_SIGNER_PRIVATE_KEY"
exit 1
fi
if [ -z "$BLOCK_SIGNER_PRIVATE_KEY_PASSWORD" ]; then
echo "Must pass BLOCK_SIGNER_PRIVATE_KEY_PASSWORD"
exit 1
fi
if [ -z "$L2GETH_GENESIS_URL" ]; then
echo "Must pass L2GETH_GENESIS_URL"
exit 1
fi
if [[ -z $BLOCK_SIGNER_ADDRESS ]]; then
echo "Must pass BLOCK_SIGNER_ADDRESS"
exit 1
fi
echo "Running geth init"
echo "Retrieving genesis file $L2GETH_GENESIS_URL"
TEMP_DIR=$(mktemp -d)
wget -O "$TEMP_DIR"/genesis.json "$L2GETH_GENESIS_URL"
geth init --datadir=/"$DATADIR" "$TEMP_DIR"/genesis.json
# Delete temp dir
rm -rf $TEMP_DIR
# Check for an existing keystore folder.
# If it exists, assume it's correct and skip geth acount import step
GETH_KEYSTORE_DIR=$DATADIR/keystore
mkdir -p "$GETH_KEYSTORE_DIR"
GETH_KEYSTORE_KEYS=$(find "$GETH_KEYSTORE_DIR" -type f)
if [ ! -z "$GETH_KEYSTORE_KEYS" ]; then
echo "$GETH_KEYSTORE_KEYS exist, skipping account import if any keys are present"
else
echo "$GETH_KEYSTORE_DIR missing, running account import"
echo -n "$BLOCK_SIGNER_PRIVATE_KEY_PASSWORD" >"$DATADIR"/password
echo -n "$BLOCK_SIGNER_PRIVATE_KEY" >"$DATADIR"/block-signer-key
geth account import \
--datadir "$DATADIR" \
--password "$DATADIR"/password \
"$DATADIR"/block-signer-key
fi
echo "l2geth setup complete"
echo "Starting replica node"
exec geth \
--datadir "$DATADIR" \
--verbosity "$VERBOSITY" \
--password "$DATADIR/password" \
--allow-insecure-unlock \
--unlock $BLOCK_SIGNER_ADDRESS \
--mine \
--miner.etherbase $BLOCK_SIGNER_ADDRESS \
"$@"