Commit 08188b67 authored by Ben Wilson's avatar Ben Wilson

Infra repo, add op-replica

parent ccd98811
# op-replica infra
Deployment examples and resources for running an Optimism replica.
[./envs](./envs) contains working example environmenatal files to configure a replica for different networks.
[./scripts](./scripts/) contains helper scripts to prepare or verify an environment.
[./docker-compose](./docker-compose/) provides working docker-compose example deployments
[./kustomize](./kustomize/) has kubernetes base overlays and network examples
# Running a Network Node
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](https://research.paradigm.xyz/optimism#data-availability-batches). To submit transactions via a replica, set
`SEQUENCER_CLIENT_HTTP` to a sequencer URL.
## Architecture
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](https://infura.io/).
- `l2geth`, which provides an Ethereum node where you applications can connect and run API calls.
## Resource requirements
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.
## Software Packages
These packages are required to run the replica:
1. [Docker](https://www.docker.com/)
1. [Docker compose](https://docs.docker.com/compose/install/)
## Configuration
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 !!
### Settings
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](https://github.com/optimisticben/op-replica/tree/main/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/
### Docker Image Versions
We recommend using the latest versions of both docker images. Find them as GitHub tags
[here](https://github.com/ethereum-optimism/optimism/tags) and as published Docker images linked in the badges:
| Package                                                                                                                         | Docker                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`@eth-optimism/l2geth`](https://github.com/ethereum-optimism/optimism/tree/master/l2geth)                                      | [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/ethereumoptimism/l2geth)](https://hub.docker.com/r/ethereumoptimism/l2geth/tags?page=1&ordering=last_updated)                             |
| [`@eth-optimism/data-transport-layer`](https://github.com/ethereum-optimism/optimism/tree/master/packages/data-transport-layer) | [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/ethereumoptimism/data-transport-layer)](https://hub.docker.com/r/ethereumoptimism/data-transport-layer/tags?page=1&ordering=last_updated) |
| [`@eth-optimism/replica-healthcheck`](https://github.com/ethereum-optimism/optimism/tree/master/packages/replica-healthcheck) | [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/ethereumoptimism/replica-healthcheck)](https://hub.docker.com/r/ethereumoptimism/replica-healthcheck/tags?page=1&ordering=last_updated) |
## Usage
| 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` |
## Sync Check
 
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:
```sh
docker-compose logs -f replica-healthcheck
```
## Registration
[Register here](https://groups.google.com/a/optimism.io/g/optimism-announce) to get announcements, such as notifications of when you're supposed to update your replica.
# Overview
These files allow you to expose the l2geth RPC/WS ports to the Internet, TLS-encrypted,
via a traefik reverse proxy and Let's Encrypt Certs.
Instructions for the CloudFlare and AWS options are kept up-to-date at https://eth-docker.net/docs/Usage/ReverseProxy
Please open issues for this contribution in the fork at https://github.com/CryptoManufaktur-io/op-replica
## Usage
The `.env` in the main project directory needs to contain traefik-specific variables. Make a backup copy with
`cp .env .env.bak`, then bring in the `default.env` from this directory: `cp contrib/traefik-haproxy/default.env .env`.
Adjust replica variables to match what they were and add either `contrib/traefik-haproxy/traefik-cf.yml` or
`contrib/traefik-haproxy/traefik-aws.yml` to `COMPOSE_FILE`.
Then edit traefik-specific variables for CloudFlare or AWS as per above-linked instructions.
Alternatively, if you have traefik running in its own stack, you can add `contrib/traefik-haproxy/ext-network.yml`
and adjust it for the network traefik runs in.
The haproxy files are examples taken from a docker swarm mode installation. They should work
with minor modifications in k8s via kompose or Portainer.
`optimism-haproxy.cfg` is the configuration file for haproxy, adjust the host and domain names you'll
use in there
`haproxy-docker-sample.yml` is an example docker-compose style deployment in docker swarm.
For example, you may have two replicas called `optimism-a.example.com` and `optimism-b.example.com`.
Both are configured in their `traefik.env` to respond to `optimism-lb.example.com`. Haproxy has
a local alias `optimism-lb.example.com` and will forward traffic to a and b servers, which know to respond
to the `optimism-lb` hostname.
`check-ecsync-optimism.sh` is an external check script to take a server out of rotation when it is not
in sync. It relies on the sequencer-health metrics being available via traefik, and assumes that
servers have `-a`, `-b`, `-c` etc suffixes. The maximum slot distance and name of the healthcheck host
without suffix are configured in the script.
#!/bin/sh
MAX_LAG=2
# Assumes that servers are labeled -a, -b, -c etc and contain their domain name, and that corresponding
# sequencer health hosts exist
HEALTH_HOST=optimismhealth
__domain=$(echo -n $HAPROXY_SERVER_NAME | cut -d '.' -f2-)
__host=$(echo -n $HAPROXY_SERVER_NAME | cut -d '.' -f1)
__dashcount=$(echo -n $__host | grep -o "-" | wc -w)
__suffix=$(echo -n $__host | cut -d '-' -f$(($__dashcount+1)))
__sequencerheight=$(curl -s -m2 -N -L "$HEALTH_HOST-$__suffix.$__domain/metrics" | grep ^replica_health_sequencer_height | cut -d' ' -f2)
__replicaheight=$(curl -s -m2 -N -L "$HEALTH_HOST-$__suffix.$__domain/metrics" | grep ^replica_health_height | cut -d' ' -f2)
if [ -z "$__sequencerheight" -o -z "$__replicaheight" ]; then
exit 1
fi
__distance=$(expr $__sequencerheight - $__replicaheight)
if [ $__distance -le $MAX_LAG ]; then
exit 0
else
exit 1
fi
COMPOSE_FILE=replica.yml:replica-shared.yml:replica-toml.yml
ETH_NETWORK=kovan
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=WONT_WORK_UNLESS_YOU_PROVIDE_A_VALID_ETHEREUM_L1_ENDPOINT
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=https://kovan.optimism.io
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=https://kovan.optimism.io
SEQUENCER_CLIENT_HTTP=https://kovan.optimism.io
SHARED_ENV_PATH=../envs/kovan
GCMODE=archive
L2GETH_IMAGE_TAG=0.5.12
DTL_IMAGE_TAG=
HC_IMAGE_TAG=
L2GETH_HTTP_PORT=9991
L2GETH_WS_PORT=9992
DTL_PORT=7878
GETH_INIT_SCRIPT=check-for-chaindata-berlin.sh
RESTART=unless-stopped
# Secure web proxy - advanced use, please see instructions at https://eth-docker.net/docs/Usage/ReverseProxy
DOMAIN=example.com
ACME_EMAIL=user@example.com
CF_EMAIL=user@example.com
CF_API_TOKEN=SECRETTOKEN
AWS_PROFILE=myprofile
AWS_HOSTED_ZONE_ID=myzoneid
L2GETH_HOST=optimism
L2GETH_LB=optimism-lb
L2GETH_WS_HOST=optimismws
L2GETH_WS_LB=optimismws-lb
L2GETH_HEALTH_HOST=optimismhealth
DDNS_SUBDOMAIN=
DDNS_PROXY=false
TRAEFIK_WEB_PORT=443
TRAEFIK_WEB_HTTP_PORT=80
COMPOSE_FILE=replica.yml:replica-shared.yml:replica-toml.yml
ETH_NETWORK=mainnet
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=WONT_WORK_UNLESS_YOU_PROVIDE_A_VALID_ETHEREUM_L1_ENDPOINT
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=https://mainnet.optimism.io
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=https://mainnet.optimism.io
SEQUENCER_CLIENT_HTTP=https://mainnet.optimism.io
SHARED_ENV_PATH=../envs/mainnet
GCMODE=archive
L2GETH_IMAGE_TAG=0.5.12
DTL_IMAGE_TAG=
HC_IMAGE_TAG=
L2GETH_HTTP_PORT=9991
L2GETH_WS_PORT=9992
DTL_PORT=7878
GETH_INIT_SCRIPT=check-for-chaindata-berlin.sh
RESTART=unless-stopped
# Secure web proxy - advanced use, please see instructions at https://eth-docker.net/docs/Usage/ReverseProxy
DOMAIN=example.com
ACME_EMAIL=user@example.com
CF_EMAIL=user@example.com
CF_API_TOKEN=SECRETTOKEN
AWS_PROFILE=myprofile
AWS_HOSTED_ZONE_ID=myzoneid
L2GETH_HOST=optimism
L2GETH_LB=optimism-lb
L2GETH_WS_HOST=optimismws
L2GETH_WS_LB=optimismws-lb
L2GETH_HEALTH_HOST=optimismhealth
DDNS_SUBDOMAIN=
DDNS_PROXY=false
TRAEFIK_WEB_PORT=443
TRAEFIK_WEB_HTTP_PORT=80
version: "3.4"
networks:
default:
external:
name: traefik_default
services:
l2geth-replica:
labels:
- traefik.enable=true
- traefik.http.routers.l2geth.service=l2geth
- traefik.http.routers.l2geth.entrypoints=websecure
- traefik.http.routers.l2geth.rule=Host(`${L2GETH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2geth.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethlb.service=l2geth
- traefik.http.routers.l2gethlb.entrypoints=websecure
- traefik.http.routers.l2gethlb.rule=Host(`${L2GETH_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethlb.tls.certresolver=letsencrypt
- traefik.http.services.l2geth.loadbalancer.server.port=8545
- traefik.http.routers.l2gethws.service=l2gethws
- traefik.http.routers.l2gethws.entrypoints=websecure
- traefik.http.routers.l2gethws.rule=Host(`${L2GETH_WS_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethws.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethwslb.service=l2gethws
- traefik.http.routers.l2gethwslb.entrypoints=websecure
- traefik.http.routers.l2gethwslb.rule=Host(`${L2GETH_WS_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethwslb.tls.certresolver=letsencrypt
- traefik.http.services.l2gethws.loadbalancer.server.port=8546
replica-healthcheck:
labels:
- traefik.enable=true
- traefik.http.routers.l2gethhealth.service=l2gethhealth
- traefik.http.routers.l2gethhealth.entrypoints=websecure
- traefik.http.routers.l2gethhealth.rule=Host(`${L2GETH_HEALTH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethhealth.tls.certresolver=letsencrypt
- traefik.http.services.l2gethhealth.loadbalancer.server.port=3000
version: "3.4"
x-logging: &logging
logging:
driver: json-file
options:
max-size: 20m
max-file: "3"
services:
optimism-haproxy:
image: haproxy:latest
user: root
entrypoint: ["/bin/sh", "-c"]
command:
- |
apt-get update
apt-get install --no-install-recommends -y curl jq bc ca-certificates
exec haproxy -f /usr/local/etc/haproxy/haproxy.cfg
networks:
default:
aliases:
- optimismws-lb.example.com
- optimism-lb.example.com
configs:
- source: optimism-haproxy.cfg
target: /usr/local/etc/haproxy/haproxy.cfg
- source: check-ecsync-optimism.sh
target: /var/lib/haproxy/check-ecsync.sh
mode: 0555
deploy:
mode: replicated
replicas: 2
placement:
constraints: ["node.role == worker"]
<<: *logging
configs:
optimism-haproxy.cfg:
external: true
check-ecsync-optimism.sh:
external: true
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log stdout format raw local0
maxconn 20000
user haproxy
group haproxy
ssl-default-server-options force-tlsv12
ssl-default-bind-options force-tlsv12
ca-base /etc/ssl/certs
external-check
insecure-fork-wanted
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode tcp
option tcplog
log global
option dontlognull
timeout client 5m
#---------------------------------------------------------------------
# dedicated stats page
#---------------------------------------------------------------------
listen stats
mode http
bind :22222
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth admin:YOURPW
stats refresh 30s
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main_https_listen
bind *:443
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
#---------------------------------------------------------------------
# Common HAProxy nodes configuration
#---------------------------------------------------------------------
# -------------------------------
# ACLs
# -------------------------------
acl acl_ec req.ssl_sni -i optimism-lb.example.com
acl acl_ecws req.ssl_sni -i optimismws-lb.example.com
# -------------------------------
# Conditions
# -------------------------------
use_backend backend_ec if acl_ec
use_backend backend_ecws if acl_ecws
#---------------------------------------------------------------------
# Backends
#---------------------------------------------------------------------
# RPC execution client
backend backend_ec
description Optimism L2Geth
default-server init-addr libc no-tls-tickets check inter 10000 on-marked-down shutdown-sessions
timeout connect 5s
timeout server 30s
retries 2
balance first
option external-check
external-check path "/usr/bin:/bin"
external-check command /var/lib/haproxy/check-ecsync.sh
server optimism-a.example.com optimism-a.example.com:443
server optimism-b.example.com optimism-b.example.com:443 backup
# WebSockets execution client
backend backend_ecws
description Optimism L2Geth WebSockets
default-server init-addr libc no-tls-tickets check inter 10000 on-marked-down shutdown-sessions
timeout connect 5s
timeout server 30s
timeout tunnel 3600s
retries 2
balance first
option external-check
external-check path "/usr/bin:/bin"
external-check command /var/lib/haproxy/check-ecsync.sh
server optimism-a.example.com optimismws-a.example.com:443
server optimism-b.example.com optimismws-b.example.com:443 backup
version: "3.4"
x-logging: &logging
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
services:
traefik:
image: traefik-aws
build:
context: ./contrib/traefik-haproxy/traefik
restart: ${RESTART}
command:
# - --log.level=DEBUG
# - --accesslog=true
# - --accesslog.format=json
# - --accesslog.fields.defaultmode=keep
# - --accesslog.fields.headers.defaultmode=keep
# - --certificatesResolvers.letsencrypt.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --certificatesresolvers.letsencrypt.acme.dnschallenge=true
- --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=route53
- --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL}
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --entrypoints.web.address=:${TRAEFIK_WEB_HTTP_PORT}
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.websecure.address=:${TRAEFIK_WEB_PORT}
ports:
- ${TRAEFIK_WEB_PORT}:${TRAEFIK_WEB_PORT}/tcp
- ${TRAEFIK_WEB_HTTP_PORT}:${TRAEFIK_WEB_HTTP_PORT}/tcp
environment:
- AWS_PROFILE=${AWS_PROFILE}
- AWS_HOSTED_ZONE_ID=${AWS_HOSTED_ZONE_ID}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/letsencrypt
- ~/.aws:/root/.aws:ro
- /etc/localtime:/etc/localtime:ro
<<: *logging
l2geth-replica:
labels:
- traefik.enable=true
- traefik.http.routers.l2geth.service=l2geth
- traefik.http.routers.l2geth.entrypoints=websecure
- traefik.http.routers.l2geth.rule=Host(`${L2GETH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2geth.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethlb.service=l2geth
- traefik.http.routers.l2gethlb.entrypoints=websecure
- traefik.http.routers.l2gethlb.rule=Host(`${L2GETH_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethlb.tls.certresolver=letsencrypt
- traefik.http.services.l2geth.loadbalancer.server.port=8545
- traefik.http.routers.l2gethws.service=l2gethws
- traefik.http.routers.l2gethws.entrypoints=websecure
- traefik.http.routers.l2gethws.rule=Host(`${L2GETH_WS_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethws.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethwslb.service=l2gethws
- traefik.http.routers.l2gethwslb.entrypoints=websecure
- traefik.http.routers.l2gethwslb.rule=Host(`${L2GETH_WS_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethwslb.tls.certresolver=letsencrypt
- traefik.http.services.l2gethws.loadbalancer.server.port=8546
replica-healthcheck:
labels:
- traefik.enable=true
- traefik.http.routers.l2gethhealth.service=l2gethhealth
- traefik.http.routers.l2gethhealth.entrypoints=websecure
- traefik.http.routers.l2gethhealth.rule=Host(`${L2GETH_HEALTH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethhealth.tls.certresolver=letsencrypt
- traefik.http.services.l2gethhealth.loadbalancer.server.port=3000
volumes:
certs:
version: "3.4"
x-logging: &logging
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
services:
traefik:
image: traefik:latest
restart: ${RESTART}
command:
# - --log.level=DEBUG
# - --accesslog=true
# - --accesslog.format=json
# - --accesslog.fields.defaultmode=keep
# - --accesslog.fields.headers.defaultmode=keep
# - --certificatesResolvers.letsencrypt.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --certificatesresolvers.letsencrypt.acme.dnschallenge=true
- --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
- --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL}
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --entrypoints.web.address=:${TRAEFIK_WEB_HTTP_PORT}
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.websecure.address=:${TRAEFIK_WEB_PORT}
ports:
- ${TRAEFIK_WEB_PORT}:${TRAEFIK_WEB_PORT}/tcp
- ${TRAEFIK_WEB_HTTP_PORT}:${TRAEFIK_WEB_HTTP_PORT}/tcp
environment:
- CLOUDFLARE_EMAIL=${CF_EMAIL}
- CLOUDFLARE_DNS_API_TOKEN=${CF_API_TOKEN}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/letsencrypt
- /etc/localtime:/etc/localtime:ro
<<: *logging
depends_on:
- cf-ddns
cf-ddns:
image: oznu/cloudflare-ddns:latest
restart: ${RESTART}
environment:
- API_KEY=${CF_API_TOKEN}
- ZONE=${DOMAIN}
- SUBDOMAIN=${DDNS_SUBDOMAIN}
- PROXIED=${DDNS_PROXY}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
<<: *logging
l2geth-replica:
labels:
- traefik.enable=true
- traefik.http.routers.l2geth.service=l2geth
- traefik.http.routers.l2geth.entrypoints=websecure
- traefik.http.routers.l2geth.rule=Host(`${L2GETH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2geth.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethlb.service=l2geth
- traefik.http.routers.l2gethlb.entrypoints=websecure
- traefik.http.routers.l2gethlb.rule=Host(`${L2GETH_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethlb.tls.certresolver=letsencrypt
- traefik.http.services.l2geth.loadbalancer.server.port=8545
- traefik.http.routers.l2gethws.service=l2gethws
- traefik.http.routers.l2gethws.entrypoints=websecure
- traefik.http.routers.l2gethws.rule=Host(`${L2GETH_WS_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethws.tls.certresolver=letsencrypt
- traefik.http.routers.l2gethwslb.service=l2gethws
- traefik.http.routers.l2gethwslb.entrypoints=websecure
- traefik.http.routers.l2gethwslb.rule=Host(`${L2GETH_WS_LB}.${DOMAIN}`)
- traefik.http.routers.l2gethwslb.tls.certresolver=letsencrypt
- traefik.http.services.l2gethws.loadbalancer.server.port=8546
replica-healthcheck:
labels:
- traefik.enable=true
- traefik.http.routers.l2gethhealth.service=l2gethhealth
- traefik.http.routers.l2gethhealth.entrypoints=websecure
- traefik.http.routers.l2gethhealth.rule=Host(`${L2GETH_HEALTH_HOST}.${DOMAIN}`)
- traefik.http.routers.l2gethhealth.tls.certresolver=letsencrypt
- traefik.http.services.l2gethhealth.loadbalancer.server.port=3000
volumes:
certs:
# Add AWS CLI to traefik image
FROM traefik:latest
RUN apk add --no-cache \
python3 \
py3-pip \
&& pip3 install --upgrade pip \
&& pip3 install \
awscli \
tzdata \
&& rm -rf /var/cache/apk/*
COMPOSE_PROJECT_NAME=op-replica
COMPOSE_FILE=replica.yml:replica-shared.yml:replica-toml.yml
ETH_NETWORK=kovan
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=WONT_WORK_UNLESS_YOU_PROVIDE_A_VALID_ETHEREUM_L1_ENDPOINT
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=https://kovan.optimism.io
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=https://kovan.optimism.io
SEQUENCER_CLIENT_HTTP=https://kovan.optimism.io
SHARED_ENV_PATH=../envs/kovan
GCMODE=archive
L2GETH_IMAGE_TAG=0.5.13
DTL_IMAGE_TAG=0.5.20
HC_IMAGE_TAG=
L2GETH_HTTP_PORT=9991
L2GETH_WS_PORT=9992
DTL_PORT=7878
GETH_INIT_SCRIPT=check-for-chaindata-berlin.sh
RESTART=unless-stopped
COMPOSE_PROJECT_NAME=op-replica
COMPOSE_FILE=replica.yml:replica-shared.yml:replica-toml.yml
ETH_NETWORK=mainnet
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=WONT_WORK_UNLESS_YOU_PROVIDE_A_VALID_ETHEREUM_L1_ENDPOINT
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=https://mainnet.optimism.io
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=https://mainnet.optimism.io
SEQUENCER_CLIENT_HTTP=https://mainnet.optimism.io
SHARED_ENV_PATH=../envs/mainnet
GCMODE=archive
L2GETH_IMAGE_TAG=0.5.12
DTL_IMAGE_TAG=0.5.20
HC_IMAGE_TAG=
L2GETH_HTTP_PORT=9991
L2GETH_WS_PORT=9992
DTL_PORT=7878
GETH_INIT_SCRIPT=check-for-chaindata-berlin.sh
RESTART=unless-stopped
version: "3.4"
services:
l2geth-replica:
ports:
- ${L2GETH_HTTP_PORT:-9991}:8545
- ${L2GETH_WS_PORT:-9992}:8546
data-transport-layer:
ports:
- ${DTL_PORT:-7878}:7878
---
version: "3.4"
services:
l2geth-replica:
entrypoint:
- /bin/sh
- -c
- "/scripts/$GETH_INIT_SCRIPT && /scripts/l2geth-replica-start.sh --config /scripts/l2geth.toml"
---
version: "3.4"
x-logging: &logging
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
services:
data-transport-layer:
image: ethereumoptimism/data-transport-layer:${DTL_IMAGE_TAG:-latest}
restart: ${RESTART}
env_file:
- ${SHARED_ENV_PATH}/data-transport-layer.env
- .env
volumes:
- dtl:/db
<<: *logging
l2geth-replica:
image: ethereumoptimism/l2geth:${L2GETH_IMAGE_TAG:-latest}
restart: ${RESTART}
stop_grace_period: 3m
entrypoint:
- /bin/sh
- -c
#- "sleep infinity"
- "/scripts/$GETH_INIT_SCRIPT && /scripts/l2geth-replica-start.sh"
env_file:
- ${SHARED_ENV_PATH}/l2geth-replica.env
- .env
volumes:
- geth:/geth
- ../scripts/:/scripts/
<<: *logging
replica-healthcheck:
image: ethereumoptimism/replica-healthcheck:${HC_IMAGE_TAG:-latest}
restart: ${RESTART}
env_file:
- ${SHARED_ENV_PATH}/replica-healthcheck.env
- .env
volumes:
- ../scripts/:/scripts/
<<: *logging
volumes:
dtl:
geth:
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x3AD1eeD551d26335caD030911C15d008abBe9825
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://failover-proxy.default:8000
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://failover-proxy.default:8000
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=69
DATADIR=/geth
DEV=true
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
ETH1_CTC_DEPLOYMENT_HEIGHT=25502591
ETH1_L1_FEE_WALLET_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x4361d0F75A0186C05f971c566dC6bEa5957483fD
ETH1_L1_ETH_GATEWAY_ADDRESS=
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x22F24361D548e5FaAfb36d1437839f080363982B
ETH1_SYNC_SERVICE_ENABLE=true
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x18394b52d3cb931dfa76f63251919d051953413d
ROLLUP_STATE_DUMP_PATH=https://storage.googleapis.com/optimism/kovan/v0.4.0-rc0.json
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_ENABLE_ARBITRARY_CONTRACT_DEPLOYMENT=true
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=11000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=kovan
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.9
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
#!/bin/sh
set -exu
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"
if geth dump-chain-cfg --datadir="$GETH_DATA_DIR" | grep -q "\"berlinBlock\": $L2GETH_BERLIN_ACTIVATION_HEIGHT"; then
echo "Hardfork already activated."
else
echo "Hardfork not activated, running init."
geth init --datadir="$GETH_DATA_DIR" "$L2GETH_GENESIS_URL" "$L2GETH_GENESIS_HASH"
echo "geth hardfork activation complete"
fi
fi
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=27989623
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
- name: geth-scripts
files:
- ./check-for-chaindata.sh
\ No newline at end of file
CHAIN_ID=69
DATADIR=/geth
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=27989623
ETH1_L1_FEE_WALLET_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x4361d0F75A0186C05f971c566dC6bEa5957483fD
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x22F24361D548e5FaAfb36d1437839f080363982B
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/kovan/kovan-berlin-genesis.json
L2GETH_GENESIS_HASH=0xaed938bc5dee7eb703658d4bec1f3e28f8b92bd9c032b2be779186eafc2b5a2a
L2GETH_BERLIN_ACTIVATION_HEIGHT=1138900
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
SEQUENCER_CLIENT_HTTP=https://kovan.optimism.io
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=kovan
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.9
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=27989623
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=69
DATADIR=/geth
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=27989623
ETH1_L1_FEE_WALLET_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x4361d0F75A0186C05f971c566dC6bEa5957483fD
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x22F24361D548e5FaAfb36d1437839f080363982B
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/kovan/v0.5.0-rc2.json
L2GETH_GENESIS_URL_SHA256SUM=17bc1ef020273bcaaa21b05666f912ebf330c0e99a7963b9e5ed61d649043fbd
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=kovan
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.9
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://failover-proxy.default:8000
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://failover-proxy.default:8000
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=69
DATADIR=/geth
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x27770a9694e4B4b1E130Ab91Bc327C36855f612E
BLOCK_SIGNER_PRIVATE_KEY=da5deb73dbc9dea2e3916929daaf079f75232d32a2cf37ff8b1f7140ef3fd9db
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=27989623
ETH1_L1_FEE_WALLET_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x4361d0F75A0186C05f971c566dC6bEa5957483fD
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x22F24361D548e5FaAfb36d1437839f080363982B
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/kovan/v0.5.0-rc2.json
L2GETH_GENESIS_URL_SHA256SUM=17bc1ef020273bcaaa21b05666f912ebf330c0e99a7963b9e5ed61d649043fbd
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_ENABLE_ARBITRARY_CONTRACT_DEPLOYMENT=true
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=kovan
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=prerelease-0.5.0-rc-7-ee217ce
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=27989623
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=69
DATADIR=/geth
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=27989623
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/kovan/kovan-berlin-genesis.json
L2GETH_GENESIS_HASH=0xaed938bc5dee7eb703658d4bec1f3e28f8b92bd9c032b2be779186eafc2b5a2a
L2GETH_BERLIN_ACTIVATION_HEIGHT=1138900
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
IPC_DISABLE=true
REPLICA_HEALTHCHECK__ETH_NETWORK=kovan
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.9
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
#!/bin/sh
set -exu
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"
if geth dump-chain-cfg --datadir="$GETH_DATA_DIR" | grep -q "\"berlinBlock\": $L2GETH_BERLIN_ACTIVATION_HEIGHT"; then
echo "Hardfork already activated."
else
echo "Hardfork not activated, running init."
geth init --datadir="$GETH_DATA_DIR" "$L2GETH_GENESIS_URL" "$L2GETH_GENESIS_HASH"
echo "geth hardfork activation complete"
fi
fi
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
L1_NODE_WEB3_URL=http://failover-proxyd.default:8080
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
- name: geth-scripts
files:
- ./check-for-chaindata.sh
\ No newline at end of file
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-berlin.json
L2GETH_GENESIS_HASH=0x106b0a3247ca54714381b1109e82cc6b7e32fd79ae56fbcc2e7b1541122f84ea
L2GETH_BERLIN_ACTIVATION_HEIGHT=3950000
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x7107142636C85c549690b1Aca12Bdb8052d26Ae6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.11
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
#!/bin/sh
set -exu
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"
if geth dump-chain-cfg --datadir="$GETH_DATA_DIR" | grep -q "\"berlinBlock\": $L2GETH_BERLIN_ACTIVATION_HEIGHT"; then
echo "Hardfork already activated."
else
echo "Hardfork not activated, running init."
geth init --datadir="$GETH_DATA_DIR" "$L2GETH_GENESIS_URL" "$L2GETH_GENESIS_HASH"
echo "geth hardfork activation complete"
fi
fi
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l1
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l1
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://failover-proxyd.default:8080
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=10
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=true
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=false
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
L1_NODE_WEB3_URL=http://failover-proxyd.default:8080
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
- name: geth-scripts
files:
- ./check-for-chaindata.sh
\ No newline at end of file
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-berlin.json
L2GETH_GENESIS_HASH=0x106b0a3247ca54714381b1109e82cc6b7e32fd79ae56fbcc2e7b1541122f84ea
L2GETH_BERLIN_ACTIVATION_HEIGHT=3950000
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l1
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x7107142636C85c549690b1Aca12Bdb8052d26Ae6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.13
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l1
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l1
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://failover-proxyd.default:8080
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=10
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=true
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=false
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://failover-proxyd.default:8080
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-v0.5.0.json
L2GETH_GENESIS_URL_SHA256SUM=361ff81fff4cc71e5f0bf43b0b982f5cfd08d068f730b9a61516fe1fa8fd914a
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l1
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x7107142636C85c549690b1Aca12Bdb8052d26Ae6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.0-rc3
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=66666
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
BLOCK_SIGNER_PRIVATE_KEY=da5deb73dbc9dea2e3916929daaf079f75232d32a2cf37ff8b1f7140ef3fd9db
BLOCK_SIGNER_ADDRESS=0x27770a9694e4B4b1E130Ab91Bc327C36855f612E
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
CHAIN_ID=66666
DATADIR=/geth
NETWORK_ID=66666
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
ETH1_CTC_DEPLOYMENT_HEIGHT=13462029
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_ETH_GATEWAY_ADDRESS=0xe681F80966a8b1fFadECf8068bD6F99034791c95
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet-trial/geth-init-input-v0.5.0-rc3.json
L2GETH_GENESIS_URL_SHA256SUM=75d0df222d96e19c9f8f4aae478a05e34b793848eae23ab98cb40f3afd57dfef
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x84f70449f90300997840eCb0918873745Ede7aE6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=11000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.8
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
#!/bin/sh
set -eou
echo running "${0}"
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 "$L2GETH_GENESIS_URL_SHA256SUM" ]; then
echo "Must pass L2GETH_GENESIS_URL_SHA256SUM"
exit 1
fi
# Check for an existing chaindata folder.
# If it exists, assume it's correct and skip geth init step
GETH_CHAINDATA_DIR=$DATADIR/geth/chaindata
if [ -d "$GETH_CHAINDATA_DIR" ]; then
echo "$GETH_CHAINDATA_DIR existing, skipping geth init"
else
echo "$GETH_CHAINDATA_DIR missing, running geth init"
echo "Retrieving genesis file $L2GETH_GENESIS_URL"
TEMP_DIR=$(mktemp -d)
wget -O "$TEMP_DIR"/genesis.json "$L2GETH_GENESIS_URL"
GENESIS_SHA256SUM=$(sha256sum "$TEMP_DIR"/genesis.json | awk '{print $1}')
if [ "$GENESIS_SHA256SUM" != "$L2GETH_GENESIS_URL_SHA256SUM" ];then
echo GENESIS_SHA256SUM: "$GENESIS_SHA256SUM" != L2GETH_GENESIS_URL_SHA256SUM: "$L2GETH_GENESIS_URL_SHA256SUM"
exit 1
fi
echo checksums match
echo GENESIS_SHA256SUM: "$GENESIS_SHA256SUM" == L2GETH_GENESIS_URL_SHA256SUM: "$L2GETH_GENESIS_URL_SHA256SUM"
geth init \
--datadir=/"$DATADIR" \
"$TEMP_DIR"/genesis.json
echo geth init complete
fi
# 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"
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://failover-proxyd.default:8080
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
- name: geth-scripts
files:
- ./check-for-chaindata.sh
\ No newline at end of file
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-v0.5.0.json
L2GETH_GENESIS_URL_SHA256SUM=361ff81fff4cc71e5f0bf43b0b982f5cfd08d068f730b9a61516fe1fa8fd914a
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x7107142636C85c549690b1Aca12Bdb8052d26Ae6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.0-rc3
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l1
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l1
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__SYNC_FROM_L1=true
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=false
DATA_TRANSPORT_LAYER__L1_START_HEIGHT=13596466
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-v0.5.0.json
L2GETH_GENESIS_URL_SHA256SUM=361ff81fff4cc71e5f0bf43b0b982f5cfd08d068f730b9a61516fe1fa8fd914a
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l1
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x648E3e8101BFaB7bf5997Bd007Fb473786019159
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.8
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://hardhat-fork.hardhat-fork-mainnet-13462000:8545
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=66666
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://hardhat-fork.hardhat-fork-mainnet-13462000:8545
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=66666
DATADIR=/geth
NETWORK_ID=66666
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x27770a9694e4B4b1E130Ab91Bc327C36855f612E
BLOCK_SIGNER_PRIVATE_KEY=da5deb73dbc9dea2e3916929daaf079f75232d32a2cf37ff8b1f7140ef3fd9db
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13462029
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet-trial/geth-init-input-v0.5.0-rc3.json
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x84f70449f90300997840eCb0918873745Ede7aE6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=11000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.0-rc3
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://hardhat-fork.mainnet-staging2-l1-13558000:8545
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=77777
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=http://sequencer.default:8545
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=http://hardhat-fork.mainnet-staging2-l1-13558000:8545
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=77777
DATADIR=/geth
NETWORK_ID=77777
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x27770a9694e4B4b1E130Ab91Bc327C36855f612E
BLOCK_SIGNER_PRIVATE_KEY=da5deb73dbc9dea2e3916929daaf079f75232d32a2cf37ff8b1f7140ef3fd9db
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13558005
ETH1_L1_FEE_WALLET_ADDRESS=0xB79f76EF2c5F0286176833E7B2eEe103b1CC3244
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet-trial-2/v0.5.0-rc3.json
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x84f70449f90300997840eCb0918873745Ede7aE6
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.5.0-rc3
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0xdE1FCfB0851916CA5101820A69b13a4E276bd81F
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=mainnet
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: data-transport-layer
envs:
- ./data-transport-layer.env
- name: l2geth-replica
envs:
- ./l2geth-replica.env
- name: replica-healthcheck
envs:
- ./replica-healthcheck.env
CHAIN_ID=10
DATADIR=/geth
NETWORK_ID=10
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
BLOCK_SIGNER_PRIVATE_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27
BLOCK_SIGNER_PRIVATE_KEY_PASSWORD=pwd
ETH1_CTC_DEPLOYMENT_HEIGHT=13596466
ETH1_L1_FEE_WALLET_ADDRESS=0x391716d440c151c42cdf1c95c1d83a5427bca52c
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1
ETH1_SYNC_SERVICE_ENABLE=true
L2GETH_GENESIS_URL=https://storage.googleapis.com/optimism/mainnet/genesis-berlin.json
L2GETH_GENESIS_HASH=0x106b0a3247ca54714381b1109e82cc6b7e32fd79ae56fbcc2e7b1541122f84ea
L2GETH_BERLIN_ACTIVATION_HEIGHT=3950000
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x648E3e8101BFaB7bf5997Bd007Fb473786019159
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=1s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=5m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=15000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
REPLICA_HEALTHCHECK__ETH_NETWORK=mainnet
REPLICA_HEALTHCHECK__L2GETH_IMAGE_TAG=0.4.8
REPLICA_HEALTHCHECK__ETH_NETWORK_RPC_PROVIDER=http://sequencer.default:8545
REPLICA_HEALTHCHECK__ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
# kovan-replica-deploy
## Prerequisites
- `kubectl` **Minimum version v1.20** [Install notes](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-on-linux)
- `kind` from a recent [kind release](https://github.com/kubernetes-sigs/kind/releases)
- Docker
## Create a cluster
```
kind create cluster --name kovan-replica
```
## Create the target namespace
```
kubectl create ns kovan-replica
```
## Diff and Apply
```
kubectl diff -k kustomize/replica/overlays/kind-kovan-replica/
kubectl apply -k kustomize/replica/overlays/kind-kovan-replica/
```
## Watch the pods start
```
kubectl -n kovan-replica get pods -w
```
### Watch the logs
```
kubectl -n kovan-replica logs -f l2geth-replica-0
```
### Check the replica status
```
kubectl logs -f -l app=replica-healthcheck
```
# kovan-replica
This README covers the features used in the [kovan replica overlay](./overlays/kovan-replica-0-4-3/kustomization.yaml)
The first 2 lines are required to be a valid kustomzation target and describe how the file will be processed.
```
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
```
---
The next line is a global namespace setting. This namespace will apply to, and override, the namespace on **all** generated resources.
This makes it very safe as you know the namespace affected by a deployment! But, can't always be used if you need to deploy to multiple namespaces. In that case the namespace can be applied by a referenced kustomization.
```
namespace: kovan-replica-0-4-3
```
---
Next we list the base resources we want to include in this overlay. Since we don't need all the components, we'll select the relevant directories.
```
resources:
- ../../bases/data-transport-layer
- ../../bases/l2geth-replica
- ../../bases/configmaps
- ../../bases/servicemonitors
- ../../bases/replica-healthcheck
```
In addition to the base resources, we also need to create some specific to this overlay.
```
- ./l2geth-volume.yaml
```
Kustomize will add these overlay resources to the build output.
----
The next feature is a `configMapGenerator`. A generator will collect the data from the files (in this case environmental files) and create a configMap with the contents.
**Generators also apply a hash to the configMap** to track changes! You don't have to worry too much about this as the process is automatic and kustomize updates the resources that reference the configMap with the hashed name.
```
configMapGenerator:
- name: data-transport-layer
envs:
- replica-data-transport-layer.env
- name: l2geth-replica
envs:
- replica-l2geth.env
```
This is nice because the files can stay in their native format and allows CI to check files for validity. For example you can run `shellcheck` on scripts that get included in configMaps.
---
Next are the image replacements. You can simply identify a target image you want to replace, provide a new image name and tag. Anywhere that image is found, it's replaced with the overlay setting.
```
images:
- name: ethereumoptimism/data-transport-layer
newName: ethereumoptimism/data-transport-layer
newTag: 0.4.3
- name: ethereumoptimism/l2geth
newName: ethereumoptimism/l2geth
newTag: 0.4.3
```
---
Now we start patching the resources. If you just want to override something, the `patchesStrategicMerge` feature is pretty simple. In the patch file you define the path to the values you want to replace
(kustomization.yaml)
```
patchesStrategicMerge:
- patch-l2geth-resources.yaml
```
(patch-l2geth-resources.yaml)
```
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: l2geth-replica
spec:
template:
spec:
containers:
- name: l2geth-replica
resources:
limits:
memory: 6Gi
requests:
memory: 6Gi
```
In this way we can easily update keys with brand new settings.
But, this method will not work if you want to add or replace a list item.
In these cases we define a target for the patch and a definition of the modification.
(kustomization.yaml)
```
patches:
- path: patch-l2geth-volumes.yaml
target:
group: apps
version: v1
kind: StatefulSet
name: l2geth-replica
```
(patch-l2geth-volumes.yaml)
```
- op: replace
path: /spec/template/spec/volumes/2
value:
name: l2geth-replica-data
persistentVolumeClaim:
claimName: l2geth-replica-data
```
This patch acts on the StatefuleSet `l2geth-replica` and replaces the 3rd volume with a `persistentVolumeClaim`.
We define the `persistentVolumeClaim` as a local resource in `l2geth-volume.yaml`
# Kustomize kubernetes deployments
[Kustomize](https://kustomize.io/) is a way to build custom kubernetes manifests in a template-free way.
This directory describes how to build and deploy Optimistic Ethereum software to a kubernetes cluster.
## Prerequisits
- `kubectl` **Minimum version v1.20** [Install notes](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-on-linux)
- a kubernetes cluster
## Structure
The kustomization starts from a folder in `./bases`. Directories under `bases` should describe components in their most generic form. It is possible to deploy directly from a `bases` directory if no resource modification is needed.
The other folders are "overlays", or configuration that will modify resources defined in `bases`.
## Kustomizing with a new overlay
Kustomize build resources based on `kustomization.yaml` files.
To create a new overlay, create a new directory with a new `kustomization.yaml` file that refers to the base resources to target.
Add any global modifers, the base resources to target and any modifications. **A valid base target is any directory with a `kustomization.yaml` file**.
See a detailed description of a kovan replica [here](./README-kovan-replica.md)
## Building
`kustomize` can be run in 2 different way, with the built in `kubectl` flag or using the stand alone binary. **The binary should be used for this repository** as the `kubectl` releases are lagging on the `envs` feature.
Using kubectl with the `-k` flag and a target directory will build and diff or apply the generated manifests.
```
kubectl diff -k ./bases/configmaps/
kubectl apply -k ./bases/configmaps/
```
Using a `kustomize` binary release, we simplay build the manifests and pipe them to `kubectl` on STDIN.
```
kustomize build ./bases/configmaps/ | kubectl diff -f -
kustomize build ./bases/configmaps/ | kubectl apply -f -
```
## Example deployment
See [./README-kovan-replica-deploy.md](README-kovan-replica-deploy.md)
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- statefulset.yaml
- service.yaml
commonLabels:
app: data-transport-layer
---
apiVersion: v1
kind: Service
metadata:
name: data-transport-layer
spec:
ports:
- name: http
port: 7878
protocol: TCP
targetPort: 7878
selector:
app: data-transport-layer
type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: data-transport-layer
spec:
replicas: 1
serviceName: data-transport-layer
template:
spec:
terminationGracePeriodSeconds: 10
restartPolicy: Always
initContainers:
- name: wait-for-l1
image: nicolaka/netshoot
command: ['bash', '-c', '/script/wait/wait-for-l1.sh']
volumeMounts:
- name: wait-scripts
mountPath: /script/wait
envFrom:
- configMapRef:
name: data-transport-layer
# - configMapRef:
# name: data-transport-layer-incluster
containers:
- name: data-transport-layer
image: ethereumoptimism/data-transport-layer
imagePullPolicy: Always
envFrom:
- configMapRef:
name: data-transport-layer
# - configMapRef:
# name: data-transport-layer-incluster
ports:
- containerPort: 7878
protocol: TCP
volumeMounts:
- name: liveliness-script
mountPath: /script/liveliness
- name: data-transport-layer
mountPath: /db
livenessProbe:
exec:
command:
- /script/liveliness/test.sh
- data-transport-layer.js
initialDelaySeconds: 15
periodSeconds: 10
resources: {}
volumes:
- name: data-transport-layer
emptyDir: {}
- name: liveliness-script
configMap:
name: liveliness-script
defaultMode: 0777
- name: wait-scripts
configMap:
name: wait-scripts
defaultMode: 0777
apiVersion: apps/v1
kind: Deployment
metadata:
name: eth-watcher
labels:
app: eth-watcher
spec:
replicas: 1
template:
metadata:
labels:
app: eth-watcher
spec:
serviceAccountName: replica-operator
containers:
- name: eth-watcher
image: ethereumoptimism/eth-watcher
command:
- eth-watcher
env:
- name: GETH_URL
value: http://l2geth-replica:8545
- name: STOP_HEIGHT
value: "1561000"
- name: NAMESPACE
value: kovan-replica-0-4-14
resources:
limits:
memory: 256Mi
cpu: 512m
requests:
memory: 128Mi
cpu: 256m
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./deployment.yaml
- ./serviceaccount.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
name: replica-operator
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: replica-operator
rules:
- apiGroups: ["apps"]
resources: ["statefulsets"]
verbs: ["get","list","watch","create","update","patch","delete"]
- apiGroups: ["apps"]
resources: ["statefulsets/scale"]
verbs: ["get","list","watch","create","update","patch"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "exec"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: replica-operator
roleRef:
apiGroup: ""
name: replica-operator
kind: Role
subjects:
- apiGroup: ""
kind: ServiceAccount
name: replica-operator
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./batch-submitter
- ./data-transport-layer
- ./failover-proxy
- ./sequencer
- ./configmaps
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- statefulset.yaml
- service.yaml
commonLabels:
app: l2geth-replica
---
apiVersion: v1
kind: Service
metadata:
name: l2geth-replica
spec:
selector:
app: l2geth-replica
type: ClusterIP
ports:
- name: rpc
port: 8545
- name: websocket
port: 8546
\ No newline at end of file
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: l2geth-replica
spec:
replicas: 1
serviceName: l2geth-replica
template:
spec:
terminationGracePeriodSeconds: 10
restartPolicy: Always
initContainers:
- name: geth-init
image: ethereumoptimism/l2geth
command:
- sh
- -c
- /geth-scripts/check-for-chaindata.sh
envFrom:
- configMapRef:
name: l2geth-replica
volumeMounts:
- name: geth-scripts
mountPath: /geth-scripts
- name: l2geth-replica-data
mountPath: /geth
- name: wait-for-dtl
image: nicolaka/netshoot
command: ['bash', '-c', '/script/wait/wait-for-dtl.sh']
envFrom:
- configMapRef:
name: l2geth-replica
volumeMounts:
- name: wait-scripts
mountPath: /script/wait
containers:
- name: l2geth-replica
image: ethereumoptimism/l2geth
command:
- geth
- --datadir=$(DATADIR)
- --password=$(DATADIR)/password
- --allow-insecure-unlock
- --unlock=$(BLOCK_SIGNER_ADDRESS)
- --mine
- --miner.etherbase=$(BLOCK_SIGNER_ADDRESS)
- --metrics
- --metrics.influxdb
- --metrics.influxdb.endpoint=http://influxdb.monitoring:8086
- --metrics.influxdb.database=$(NAMESPACE)
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8545
protocol: TCP
- containerPort: 8546
protocol: TCP
resources: {}
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
envFrom:
- configMapRef:
name: l2geth-replica
volumeMounts:
- name: liveliness-script
mountPath: /script/liveliness
- name: l2geth-replica-data
mountPath: /geth
- name: l2geth-config
mountPath: /l2geth-config
livenessProbe:
exec:
command:
- /script/liveliness/test.sh
- geth
initialDelaySeconds: 15
periodSeconds: 10
volumes:
- name: l2geth-replica-data
emptyDir: {}
- name: liveliness-script
configMap:
name: liveliness-script
defaultMode: 0777
- name: wait-scripts
configMap:
name: wait-scripts
defaultMode: 0777
- name: geth-scripts
configMap:
name: geth-scripts
defaultMode: 0777
- name: l2geth-config
configMap:
name: l2geth-config
apiVersion: apps/v1
kind: Deployment
metadata:
name: replica-healthcheck
spec:
replicas: 1
template:
spec:
containers:
- name: replica-healthcheck
image: ethereumoptimism/replica-healthcheck
envFrom:
- configMapRef:
name: replica-healthcheck
ports:
- containerPort: 3000
name: metrics
resources:
limits:
memory: 256Mi
cpu: 512m
requests:
memory: 128Mi
cpu: 256m
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
commonLabels:
app: replica-healthcheck
\ No newline at end of file
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: data-transport-layer
labels:
app: data-transport-layer
spec:
endpoints:
- port: http
selector:
matchLabels:
app: data-transport-layer
targetLabels:
- sync_source
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./data-transport-layer.yaml
- ./replica-healthcheck.yaml
\ No newline at end of file
---
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: replica-healthcheck
spec:
selector:
matchLabels:
app: replica-healthcheck
provider: internal
podMetricsEndpoints:
- port: metrics
podTargetLabels:
- network
- provider
- sync_source
\ No newline at end of file
DATA_TRANSPORT_LAYER__ADDRESS_MANAGER=0x100Dd3b414Df5BbA2B542864fF94aF8024aFdf3a
DATA_TRANSPORT_LAYER__CONFIRMATIONS=12
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS=true
DATA_TRANSPORT_LAYER__DB_PATH=/db
DATA_TRANSPORT_LAYER__DEFAULT_BACKEND=l2
DATA_TRANSPORT_LAYER__ENABLE_METRICS=true
DATA_TRANSPORT_LAYER__ETH_NETWORK_NAME=kovan
DATA_TRANSPORT_LAYER__L1_GAS_PRICE_BACKEND=l2
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=https://black-still-surf.kovan.quiknode.pro/5b5c461c3ec09dfa1aed3b9ac4c35516f1bb3d1e/
DATA_TRANSPORT_LAYER__L2_CHAIN_ID=69
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT=https://kovan-sequencer.optimism.io
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__SYNC_FROM_L1=false
DATA_TRANSPORT_LAYER__SYNC_FROM_L2=true
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL=1000
DEPLOYER_HTTP=
L1_NODE_WEB3_URL=https://black-still-surf.kovan.quiknode.pro/5b5c461c3ec09dfa1aed3b9ac4c35516f1bb3d1e/
CHAIN_ID=69
DATADIR=/geth
DEV=true
NETWORK_ID=69
NO_DISCOVER=true
NO_USB=true
GASPRICE=0
GCMODE=archive
IPC_DISABLE=true
ETH1_CTC_DEPLOYMENT_HEIGHT=25502591
ETH1_L1_FEE_WALLET_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=0x4361d0F75A0186C05f971c566dC6bEa5957483fD
ETH1_L1_ETH_GATEWAY_ADDRESS=
ETH1_L1_STANDARD_BRIDGE_ADDRESS=0x22F24361D548e5FaAfb36d1437839f080363982B
ETH1_SYNC_SERVICE_ENABLE=true
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=0x18394b52d3cb931dfa76f63251919d051953413d
ROLLUP_STATE_DUMP_PATH=https://storage.googleapis.com/optimism/kovan/v0.4.0-rc0.json
ROLLUP_BACKEND=l2
ROLLUP_CLIENT_HTTP=http://data-transport-layer:7878
ROLLUP_DISABLE_TRANSFERS=false
ROLLUP_ENABLE_L2_GAS_POLLING=false
ROLLUP_GAS_PRICE_ORACLE_OWNER_ADDRESS=0x18394B52d3Cb931dfA76F63251919D051953413d
ROLLUP_MAX_CALLDATA_SIZE=40000
ROLLUP_POLL_INTERVAL_FLAG=3s
ROLLUP_SYNC_SERVICE_ENABLE=true
ROLLUP_TIMESTAMP_REFRESH=3m
ROLLUP_VERIFIER_ENABLE=true
RPC_ADDR=0.0.0.0
RPC_API=eth,rollup,net,web3,debug
RPC_CORS_DOMAIN=*
RPC_ENABLE=true
RPC_PORT=8545
RPC_VHOSTS=*
TARGET_GAS_LIMIT=11000000
USING_OVM=true
WS_ADDR=0.0.0.0
WS_API=eth,rollup,net,web3,debug
WS_ORIGINS=*
WS=true
ETH_NETWORK=kovan
ETH_NETWORK_RPC_PROVIDER=https://kovan-sequencer.optimism.io
ETH_REPLICA_RPC_PROVIDER=http://l2geth-replica:8545
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: kovan-replica
bases:
- ../../bases/data-transport-layer
- ../../bases/l2geth-replica
- ../../bases/configmaps
- ../../bases/replica-healthcheck
configMapGenerator:
- name: data-transport-layer
envs:
- ./envs/data-transport-layer.env
- name: l2geth-replica
envs:
- ./envs/l2geth.env
- name: replica-healthcheck
envs:
- ./envs/replica-healthcheck.env
images:
- name: ethereumoptimism/data-transport-layer
newName: ethereumoptimism/data-transport-layer
newTag: 0.4.2
- name: ethereumoptimism/l2geth
newName: ethereumoptimism/l2geth
newTag: 0.4.6
- name: ethereumoptimism/replica-healthcheck
newName: optimisticben/replica-healthcheck@sha256
newTag: 3e8cc21f556ef8d06c0c781bb88a4f06ca0905194641becab6f302e442164140
patchesStrategicMerge:
- ./patches/dtl-remove-init.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: data-transport-layer
spec:
template:
spec:
initContainers:
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment