This repo contains:
- commands to deploy an OP-Stack chain with Babylon BTC staking support.
- commands to deploy a local L1 chain to help with development.
This repo is supposed to be used with the op-chain-deployment repo together, to integrate the BTC staking finality gadget into the deployed OP-Stack chain. For more context, please read this discussion.
git submodule update --init --recursive
As a pre-requisite, install and start kurtosis. You also need to have jq and yq installed.
Then set up the network parameters:
make l1-configureThis will generate a new wallet configs/l1/l1-prefund-wallet.json and pre-fund it with ETH at genesis. If you don't want to use the auto-generated wallet, you can update the configs/l1/network_params.yaml file manually to use your own wallet address.
You can also find the L1 chain ID and RPC ports for the JSON RPC and Beacon API in the network_params.yaml file (reference):
- JSON RPC:
http://localhost:<EL_PORT_START + 2> - Beacon API:
http://localhost:<CL_PORT_START + 1>
Then launch the L1 chain with:
make l1-launchThen you can verify the L1 chain is running with:
make l1-verifyIf you want to remove the L1 chain, you can do so with:
make l1-removecp .env.example .env
cp .env.explorer.example .env.explorer
cp .env.bridge.example .env.bridgeUpdate the .env file with the correct values.
L1_RPC_URL: the L1 JSON-RPC URL.L1_BEACON_URL: the L1 Beacon API that supports blobs (Note: not many RPC providers support this).L1_CHAIN_ID: the L1 chain ID.L1_FUNDED_PRIVATE_KEY: this will be used to fund a few L2 admin accounts with ETH.L2_CHAIN_ID: the L2 chain ID.L2_CHAIN_NAME: the L2 chain name.BATCH_INBOX_ADDRESS: the batch inbox address, set by convention to0xff<version_4_bytes>000...000<chain_id>(e.g.0xff00010000000000000000000000000000706114for chain ID706114deployment version1).L2_RPC_URL: the L2 JSON-RPC URL, set tohttp://<l2-server-ip>:9545.L2_EXPLORER_URL: the L2 explorer URL, set tohttp://<l2-server-ip>.
Update the .env.explorer file with the correct values.
COMMON_HOST: the IP address of the server running the L2 components.
Note that you don't need to update the .env.bridge file b/c it's set in make l2-launch.
make l2-launchafter it's up, you can test with:
make l2-verifyYou can also verify the L2 chain with:
cast block latest --rpc-url http://<l2-server-ip>:9545 # (need to have foundry installed)You can also access the explorer at http://<l2-server-ip> and bridge UI at http://<l2-server-ip>:3002/.
You can also bridge funds from L1 to L2 via the bridge UI.
Here are a few useful commands to restart the L2 components:
make l2-op-node-restart # only restart l2 op-node
make l2-restart # restart all l2 components
make l2-explorer-restart # restart l2 explorer
make l2-bridge-restart # restart l2 bridge