Skip to content

Files

This branch is 1625 commits behind ethereum-optimism/optimism:develop.

op-node

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Jul 21, 2024
Apr 19, 2024
Aug 20, 2024
Jul 30, 2024
Aug 14, 2024
Jan 23, 2023
Aug 14, 2024
Aug 14, 2024
Aug 13, 2024
Aug 20, 2024
Feb 13, 2023
Jun 4, 2024
Nov 7, 2023
May 16, 2022
Jul 19, 2024
Jul 22, 2024
Aug 14, 2024

Table of Contents generated with DocToc

op-node

This is the reference implementation of the rollup-node spec. It can be thought of like the consensus layer client of an OP Stack chain where it must run with an OP Stack execution layer client like op-geth.

Compiling

Compile a binary:

make op-node

Testing

Run op-node unit tests:

make test

Running

Configuration options can be reviewed with:

./bin/op-node --help

To start syncing the rollup:

Connect to one L1 Execution Client that supports the Ethereum JSON-RPC spec, an L1 Consensus Client that supports the Beacon Node API and an OP Stack based Execution Client that supports the Ethereum JSON-RPC spec:

  • L1: use any L1 client, RPC, websocket, or IPC (connection config may differ)
  • L2: use any OP Stack Execution Client like op-geth

Note that websockets or IPC is preferred for event notifications to improve sync, http RPC works with adaptive polling.

./bin/op-node \
  --l1=ws://localhost:8546 \
  --l1.beacon=http://localhost:4000 \
  --l2=ws://localhost:9001 \
  --rollup.config=./path-to-network-config/rollup.json \
  --rpc.addr=127.0.0.1 \
  --rpc.port=7000

L2 Genesis Generation

The op-node can generate geth compatible genesis.json files. These files can be used with geth init to initialize the StateDB with accounts, storage, code and balances. The L2 state must be initialized with predeploy contracts that exist in the state and act as system level contracts. The op-node can generate a genesis file with these predeploys configured correctly given an L1 RPC URL, a deploy config, L2 genesis allocs and a L1 deployments artifact.

The deploy config contains all of the config required to deploy the system. Examples can be found in packages/contracts-bedrock/deploy-config. Each deploy config file is a JSON file. The L2 allocs can be generated using a forge script in the contracts-bedrock package and the L1 deployments are a JSON file that is the output of doing a L1 contracts deployment.

Example usage:

$ ./bin/op-node genesis l2 \
  --l1-rpc $ETH_RPC_URL \
  --deploy-config <PATH_TO_MY_DEPLOY_CONFIG> \
  --l2-allocs <PATH_TO_L2_ALLOCS> \
  --l1-deployments <PATH_TO_L1_DEPLOY_ARTIFACT> \
  --outfile.l2 <PATH_TO_WRITE_L2_GENESIS> \
  --outfile.rollup <PATH_TO_WRITE_OP_NODE_CONFIG>

L1 Devnet Genesis Generation

It is also possible to generate a devnet L1 genesis.json file. The L1 allocs can be generated with the foundry L1 contracts deployment script if the extra parameter --sig 'runWithStateDump() is added to the deployment command.

$ ./bin/op-node genesis l1 \
   --deploy-config $CONTRACTS_BEDROCK/deploy-config \
   --l1-deployments <PATH_TO_L1_DEPLOY_ARTIFACT> \
   --l1-allocs <PATH_TO_L1_ALLOCS>