Skip to content

Instantly share code, notes, and snippets.

@liamzebedee
Forked from miguelmota/README.md
Created February 16, 2021 12:12
Show Gist options
  • Save liamzebedee/e311a6375501c295ae18a380ad8f5f4b to your computer and use it in GitHub Desktop.
Save liamzebedee/e311a6375501c295ae18a380ad8f5f4b to your computer and use it in GitHub Desktop.
Deploy custom Optimism rollup instructions

Instructions

Unofficial guide on deploying a custom Optimism rollup on Kovan

Clone optimism contracts:

git clone https://github.com/ethereum-optimism/contracts-v2.git

Build kovan contracts:

yarn build:kovan

Deploy optimism contracts to kovan (replace YOUR_PRIVATE_KEY and WEB3 URL to your own):

DEPLOYER_PRIVATE_KEY=YOUR_PRIVATE_KEY \
SEQUENCER_PRIVATE_KEY=YOUR_PRIVATE_KEY \
L1_NODE_WEB3_URL=https://kovan.infura.io \
WAIT_FOR_RECEIPTS=true \
WHITELIST_ALLOW_ARBITRARY_CONTRACT_DEPLOYMENT=true \
CHAIN_ID=69 \
RELAYER_PRIVATE_KEY=YOUR_PRIVATE_KEY \
yarn deploy

The deployment script will output a JSON object with the contract addresses (your addresses will be different):

{
  "AddressManager": "0x72e6F5244828C10737cbC9659378B207246D26B2",
  "OVM_Sequencer": "0x18394B52d3Cb931dfA76F63251919D051953413d",
  "Deployer": "0x18394B52d3Cb931dfA76F63251919D051953413d",
  "OVM_L2CrossDomainMessenger": "0x6f78cde001182d5DCBc63D3C4b8051f2059E79D8",
  "OVM_L1CrossDomainMessenger": "0x19da6C4945f18F5E720054FECC50D6b5E015bd40",
  "Proxy__OVM_L1CrossDomainMessenger": "0xb89065D5eB05Cac554FDB11fC764C679b4202322",
  "OVM_CanonicalTransactionChain": "0x11B74aEc18be2c55A4437e9b0dDA0A91f7419fa2",
  "OVM_StateCommitmentChain": "0x2AAbAf6799822Efc77865401E05CE02897ecf520",
  "OVM_DeployerWhitelist": "0xc300332CAD6C3e0a944f719a9D1983dED6dB9C2d",
  "OVM_L1MessageSender": "0xbe68122A80308fE29de20AEb8a56401a716737c5",
  "OVM_L2ToL1MessagePasser": "0x3B556B31af4ccEb097aDc2f461968382d22F00f0",
  "OVM_SafetyChecker": "0x69e33ba5d2745c9a245cD3b63e4e3f9252E75dBa",
  "OVM_ExecutionManager": "0x9fE09FF0d72E8874658b0D78BC578555a90Aaba2",
  "OVM_StateManager": "0x9679AB63023C123c94a6CA92e034111fB5faFD51",
  "OVM_StateManagerFactory": "0xc3ceD32D69614Ec53f3E130d74A0D5b67E9Ad5F5",
  "OVM_FraudVerifier": "0x2a57573D0711dB1f0aD595ca183F99aaBDa5cee0",
  "OVM_StateTransitionerFactory": "0x6165C66A6731817D549522b2bB62CB2b9B1508C9",
  "OVM_ECDSAContractAccount": "0xa90B029A19F6588062Bd882b6D4453bA96793dDf",
  "OVM_SequencerEntrypoint": "0xC7979B0D40C2782bCcc2d487B8B5DF8729C4a02F",
  "OVM_ProxySequencerEntrypoint": "0xf9828da515e0E607b2eEa9481Bc50418d0033632",
  "mockOVM_ECDSAContractAccount": "0x7642368e491537B920eE054ce22d1d9233A23895",
  "OVM_BondManager": "0x3Ff73EBc1d916a1A976521160ad92dFDF6a06d1f",
  "OVM_ETH": "0x6866755e74ded41C2A733b7233d8586306480E54",
  "OVM_ChainStorageContainer:CTC:batches": "0x095744753D5353C1FC43EFb1ab81D06f3e2F4630",
  "OVM_ChainStorageContainer:CTC:queue": "0xFCE31EC2Bc82553FaA4A9a6DF36c9b0DFDAdD4B8",
  "OVM_ChainStorageContainer:SCC:batches": "0xcFf7ed66bC3C1eA64c6394FEBb2408D16c6cBC5E"

}

Create docker-compose.yml:

version: '3'

services:
  geth_l2:
    image: ethereumoptimism/go-ethereum:latest
    restart: unless-stopped
    volumes:
      - geth:/root/.ethereum:rw
    env_file:
      - docker-compose.env
    ports:
      - 8545:8545
      - 8546:8546

  batch_submitter:
    image: ethereumoptimism/batch-submitter:latest
    restart: unless-stopped
    env_file:
      - docker-compose.env

volumes:
  geth:

Create docker-compose.env (replace YOUR_PRIVATE_KEY, YOUR_PRIVATE_KEY_PUBLIC_ADDRESS and ADDRES_GOES_HERE)

######### L2 GETH VARS #########
CHAIN_ID=69
NETWORK_ID=69
DEV=true
DATADIR=/root/.ethereum
RPC_ENABLE=true
RPC_ADDR=geth_l2
RPC_CORS_DOMAIN='*'
RPC_VHOSTS='*'
RPC_PORT=8545
WS=true
WS_ADDR=0.0.0.0
WS_PORT=8546
IPC_DISABLE=true
TARGET_GAS_LIMIT=9000000
RPC_API='eth,net,rollup,web3'
WS_API='eth,net,rollup,web3'
WS_ORIGINS='*'
GASPRICE=0
NO_USB=true
GCMODE=archive
NO_DISCOVER=true
USING_OVM='true'

ETH1_SYNC_SERVICE_ENABLE=true
ETH1_CTC_DEPLOYMENT_HEIGHT=23116357
ETH1_HTTP=https://kovan.infura.io
ETH1_CONFIRMATION_DEPTH=1
ETH1_CHAINID=42
ETH1_NETWORKID=42

# This is "AddressManager" address from deployed contracts
ETH1_ADDRESS_RESOLVER_ADDRESS=ADDRES_GOES_HERE

" This is "Proxy__OVM_L1CrossDomainMessenger" address from deployed contracts
ETH1_L1_CROSS_DOMAIN_MESSENGER_ADDRESS=ADDRES_GOES_HERE

# This should be public address of private key that deployed contracts
ROLLUP_ADDRESS_MANAGER_OWNER_ADDRESS=ADDRES_GOES_HERE

ROLLUP_STATE_DUMP_PATH=https://raw.githubusercontent.com/ethereum-optimism/regenesis/master/kovan/1.json
ROLLUP_DIFFDB_CACHE=1

######### Batch Submitter #########
# Logging
DEBUG=info*,error*,warn*,debug*
DEPLOYER_PRIVATE_KEY=YOUR_PRIVATE_KEY
SEQUENCER_PRIVATE_KEY=YOUR_PRIVATE_KEY
TX_INGESTION_SIGNER_KEY=YOUR_PRIVATE_KEY
TX_INGESTION_SIGNER_ADDRESS=YOUR_PRIVATE_KEY_PUBLIC_ADDRESS
MAX_TX_SIZE=90000
MIN_TX_SIZE=0
MAX_BATCH_SIZE=50
POLL_INTERVAL=15000
NUM_CONFIRMATIONS=0
RESUBMISSION_TIMEOUT=1000000
FINALITY_CONFIRMATIONS=0
RUN_TX_BATCH_SUBMITTER=true
RUN_STATE_BATCH_SUBMITTER=true
MAX_BATCH_SUBMISSION_TIME=0
SAFE_MINIMUM_ETHER_BALANCE=0

L1_NODE_WEB3_URL=https://kovan.infura.io
L2_NODE_WEB3_URL=http://geth_l2:8545
CLEAR_PENDING_TXS=true

Run docker compose services:

docker-compose up

L2 node will be accessible on http://localhost:8545

L2 messenger will be 0x4200000000000000000000000000000000000007

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment