diff --git a/optimism-archive.yml b/optimism-archive.yml new file mode 100644 index 00000000..34834466 --- /dev/null +++ b/optimism-archive.yml @@ -0,0 +1,48 @@ +version: '3.1' + +services: + optimism-dtl: + image: ethereumoptimism/data-transport-layer:${IMAGE_TAG__DTL:-latest} + restart: unless-stopped + entrypoint: + - /bin/sh + - -c + - "/scripts/dtl-start.sh" + env_file: + - ./optimism/env/dtl.env + - .env + volumes: + - optimism-dtl:/db + - ./optimism/scripts/:/scripts/ + environment: + - "SYNC_SOURCE=l1" + - "DATA_TRANSPORT_LAYER__RPC_ENDPOINT=${OPTIMISM_L1_URL}" + networks: + - chains + + optimism-l2geth: + image: ethereumoptimism/l2geth:${IMAGE_TAG__L2GETH:-latest} + restart: unless-stopped + stop_grace_period: 3m + entrypoint: + - /bin/sh + - -c + - "/scripts/l2geth-init.sh && /scripts/l2geth-start.sh" + env_file: + - ./omptimism/env/l2geth.env + - .env + volumes: + - optimism-geth:/geth + - ./optimism/scripts/:/scripts/ + expose: + - 9991 # http + - 9992 # ws + environment: + - "NODE_TYPE=archive" + - "SYNC_SOURCE=l1" + networks: + - chains + +volumes: + optimism-dtl: + optimism-geth: diff --git a/optimism/env/dtl.env b/optimism/env/dtl.env new file mode 100644 index 00000000..380d0167 --- /dev/null +++ b/optimism/env/dtl.env @@ -0,0 +1,16 @@ + +DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F +DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466 +DATA_TRANSPORT_LAYER__CONFIRMATIONS=12 +DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true +DATA_TRANSPORT_LAYER__DB_PATH=/db +DATA_TRANSPORT_LAYER__ENABLE_METRICS=true +DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet +DATA_TRANSPORT_LAYER__L2_CHAIN_ID=10 +DATA_TRANSPORT_LAYER__LOGS_PER_POLLING_INTERVAL=2000 +DATA_TRANSPORT_LAYER__NODE_ENV=production +DATA_TRANSPORT_LAYER__POLLING_INTERVAL=500 +DATA_TRANSPORT_LAYER__SENTRY_TRACE_RATE=0.05 +DATA_TRANSPORT_LAYER__SERVER_HOSTNAME=0.0.0.0 +DATA_TRANSPORT_LAYER__SERVER_PORT=7878 +DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000 \ No newline at end of file diff --git a/optimism/env/l2geth.env b/optimism/env/l2geth.env new file mode 100644 index 00000000..1093f99c --- /dev/null +++ b/optimism/env/l2geth.env @@ -0,0 +1,39 @@ +############################################################################### +# ↓ OPTIMISM OPTIONS ↓ # +############################################################################### + +USING_OVM=true +SEQUENCER_CLIENT_HTTP=https://mainnet.optimism.io +BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F +BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27 +BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd +ETH1_CTC_DEPLOYMENT_HEIGHT=13596466 +ETH1_SYNC_SERVICE_ENABLE=true +L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-berlin.json +L2GETH_GENESIS_HASH=0x106b0a3247ca54714381b1109e82cc6b7e32fd79ae56fbcc2e7b1541122f84ea +ROLLUP_CLIENT_HTTP=http://optimism-dtl:7878 +ROLLUP_MAX_CALLDATA_SIZE=40000 +ROLLUP_POLL_INTERVAL_FLAG=1s +ROLLUP_VERIFIER_ENABLE=true + +############################################################################### +# ↓ STANDARD OPTIONS ↓ # +############################################################################### + +DATADIR=/geth +CHAIN_ID=10 +NETWORK_ID=10 +NO_DISCOVER=true +NO_USB=true +GASPRICE=0 +TARGET_GAS_LIMIT=15000000 +RPC_ADDR=0.0.0.0 +RPC_API=eth,rollup,net,web3,debug +RPC_CORS_DOMAIN=* +RPC_ENABLE=true +RPC_PORT=8545 +RPC_VHOSTS=* +WS_ADDR=0.0.0.0 +WS_API=eth,rollup,net,web3,debug +WS_ORIGINS=* +WS=true diff --git a/optimism/scripts/dlt-start.sh b/optimism/scripts/dlt-start.sh new file mode 100644 index 00000000..cb84df09 --- /dev/null +++ b/optimism/scripts/dlt-start.sh @@ -0,0 +1,24 @@ +#!/bin/sh +set -eou + +# Setting both endpoints doesn't hurt +export DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=$DATA_TRANSPORT_LAYER__RPC_ENDPOINT +export DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=$DATA_TRANSPORT_LAYER__RPC_ENDPOINT + +# Set the backend depending on given sync source +export DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=$SYNC_SOURCE +export DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=$SYNC_SOURCE + +# Also tell the DTL to sync from the right place +if [ $SYNC_SOURCE == "l1" ]; then + export DATA_TRANSPORT_LAYER__SYNC_FROM_L1=true + export DATA_TRANSPORT_LAYER__SYNC_FROM_L2=false +else + export DATA_TRANSPORT_LAYER__SYNC_FROM_L1=false + export DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true +fi + +# Run the DTL +exec node \ + dist/src/services/run.js \ + $@ diff --git a/optimism/scripts/l2geth-init.sh b/optimism/scripts/l2geth-init.sh new file mode 100644 index 00000000..66e2359c --- /dev/null +++ b/optimism/scripts/l2geth-init.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -exu + +echo running "${0}" + +GETH_DATA_DIR=/geth +GETH_CHAINDATA_DIR=$GETH_DATA_DIR/geth/chaindata +GETH_KEYSTORE_DIR=$GETH_DATA_DIR/keystore + +if [ ! -d "$GETH_KEYSTORE_DIR" ]; then + echo "$GETH_KEYSTORE_DIR missing, running account import" + echo -n "$BLOCK_SIGNER_PRIVATE_KEY_PASSWORD" > "$GETH_DATA_DIR"/password + echo -n "$BLOCK_SIGNER_PRIVATE_KEY" > "$GETH_DATA_DIR"/block-signer-key + geth account import \ + --datadir="$GETH_DATA_DIR" \ + --password="$GETH_DATA_DIR"/password \ + "$GETH_DATA_DIR"/block-signer-key + echo "get account import complete" +fi + +if [ ! -d "$GETH_CHAINDATA_DIR" ]; then + echo "$GETH_CHAINDATA_DIR missing, running init" + geth init --datadir="$GETH_DATA_DIR" "$L2GETH_GENESIS_URL" "$L2GETH_GENESIS_HASH" + echo "geth init complete" +else + echo "$GETH_CHAINDATA_DIR exists, checking for hardfork." + echo "Chain config:" + geth dump-chain-cfg --datadir="$GETH_DATA_DIR" +fi diff --git a/optimism/scripts/l2geth-start.sh b/optimism/scripts/l2geth-start.sh new file mode 100644 index 00000000..78c3a8a2 --- /dev/null +++ b/optimism/scripts/l2geth-start.sh @@ -0,0 +1,21 @@ +#!/bin/sh +set -eou + +# Set rollup backend to match sync source +export ROLLUP_BACKEND=$SYNC_SOURCE + +# Run geth +exec geth \ + --vmodule=eth/*=5,miner=4,rpc=5,rollup=4,consensus/clique=1 \ + --datadir=$DATADIR \ + --password=$DATADIR/password \ + --allow-insecure-unlock \ + --unlock=$BLOCK_SIGNER_ADDRESS \ + --mine \ + --miner.etherbase=$BLOCK_SIGNER_ADDRESS \ + --gcmode=$NODE_TYPE \ +# --metrics \ +# --metrics.influxdb \ +# --metrics.influxdb.endpoint=http://influxdb:8086 \ +# --metrics.influxdb.database=l2geth \ + $@