This project lets you set up a local replica of the Optimistic Ethereum chain (either the main one or the Kovan testnet). New
transactions are submitted either to the sequencer outside of Ethereum or to the Canonical Transaction Chain on
L1. To submit transactions via a replica, set
SEQUENCER_CLIENT_HTTP
to a sequencer URL.
You need two components to replicate Optimistic Ethereum:
-
data-transport-layer
, which retrieves and indexes blocks from L1. To access L1 you need an Ethereum Layer 1 provider, such as Infura. -
l2geth
, which provides an Ethereum node where you applications can connect and run API calls.
The data-transport-layer
should run with 1 CPU and 256Mb of memory.
The l2geth
process should run with 1 or 2 CPUs and between 4 and 8Gb of memory.
With this configuration a synchronization from block 0 to current height is expect to take about 8 hours.
These packages are required to run the replica:
To configure the project, clone this repository and copy either default-kovan.env
or default-mainnet.env
file to .env
.
Review the SHARED_ENV_PATH
configurations, no changes are required, but depending on the use case, you may need copy these examples to a new directory and make your changes.
!! Update DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT to a valid endpoint !!
Change any other settings required for your environment
Variable | Purpose | Default |
---|---|---|
COMPOSE_FILE | The yml files to use with docker-compose | replica.yml:replica-shared.yml |
ETH_NETWORK | Ethereum Layer1 and Layer2 network (mainnet,kovan) | kovan (change to mainnet for the production network) |
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT | An endpoint for the L1 network, either kovan or mainnet. | |
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT | Optimistic endpoint, such as https://kovan.optimism.io or https://mainnet.optimism.io | |
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER | The L2 endpoint to check the replica against | (typically the same as the DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT) |
SEQUENCER_CLIENT_HTTP | The L2 sequencer to forward tx to | (typically the same as the DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT) |
SHARED_ENV_PATH | Path to a directory containing env files | a directory under ./kustomize/replica/envs |
GCMODE | Whether to run l2geth as an archive or full node |
archive |
L2GETH_IMAGE_TAG | L2geth version | 0.5.8 (see below) |
DTL_IMAGE_TAG | Data transport layer version | latest (see below) |
HC_IMAGE_TAG | Health check version | latest (see below) |
L2GETH_HTTP_PORT | Port number for the l2geth RPC endpoint | 9991 |
L2GETH_WS_PORT | Port number for the l2geth WebSockets endpoint | 9992 |
DTL_PORT | Port number for the DTL endpoint, for troubleshooting | 7878 |
GETH_INIT_SCRIPT | The script name to run when initializing l2geth | A file under kustomize/replica/bases/configmaps/ |
We recommend using the latest versions of both docker images. Find them as GitHub tags here and as published Docker images linked in the badges:
Package | Docker |
---|---|
@eth-optimism/l2geth |
|
@eth-optimism/data-transport-layer |
|
@eth-optimism/replica-healthcheck |
Action | Command |
---|---|
Start the replica (after which you can access it at http://localhost:L2GETH_HTTP_PORT |
docker-compose up -d |
Get the logs for l2geth |
docker-compose logs -f l2geth-replica |
Get the logs for data-transport-layer |
docker-compose logs -f data-transport-layer |
Stop the replica | docker-compose down |
There is a sync check container. It fails at startup because at that point the replica is not running yet. It exposes metrics on port 3000, which you could pick up with a Prometheus. You can view its status with this command:
docker-compose logs -f replica-healthcheck
Register here to get announcements, such as notifications of when you're supposed to update your replica.