Conduit provides fully-managed, production-grade rollups on Ethereum.
It currently supports Optimism’s open-source OP Stack.
This repository contains the relevant Docker builds to run your own node on the specific Conduit network.
We recommend you have this configuration to run a node:
- at least 16 GB RAM
- an SSD drive with at least 200 GB free
If you encounter problems with your node, please open a GitHub issue or reach out on our Discord:
Network | Slug | Status |
---|---|---|
Mode Sepolia | mode-sepolia-vtnhnpim72 | ✅ |
Mode Mainnet | mode-mainnet-0 | ✅ |
Zora Sepolia | zora-sepolia-0thyhxtf5e | ✅ |
Zora Mainnet | zora-mainnet-0 | ✅ |
PGN Sepolia | pgn-sepolia-i4td3ji6i0 | ✅ |
- Select the network you want to run and set
CONDUIT_NETWORK
env variable. You will need to know theslug
of the network. You can find this in the Conduit console. For public networks you can use the table above. Example:
# for Mode Mainnet
export CONDUIT_NETWORK=mode-mainnet-0
Note: The external nodes feature must be enabled on the network for this to work. For the public networks above this is already set.
- Download the required network configuration with:
./download-config.py $CONDUIT_NETWORK
- Ensure you have an Ethereum L1 full node RPC available (not Conduit), and copy
.env.example
to.env
settingOP_NODE_L1_ETH_RPC
. If running your own L1 node, it needs to be synced before the specific Conduit network will be able to fully sync. You also need a Beacon API RPC which can be set inOP_NODE_L1_ETH_RPC
. Example:
# .env file
# [recommended] replace with your preferred L1 (Ethereum, not Conduit) node RPC URL:
OP_NODE_L1_ETH_RPC=https://mainnet.gateway.tenderly.co/<your-tenderly-api-key>
OP_NODE_L1_BEACON=<beacon api rpc>
If you are running a stack using celestia
for DA, copy instead .env.example.celestia
to .env
, set also CELESTIA_CORE_IP
, CELESTIA_API
and CELESTIA_P2P_NETWORK
. Example:
# .env file
# see celestia doc for public nodes list
# testnet https://docs.celestia.org/nodes/mocha-testnet#bridge-full-and-light-nodes
# mainnet https://docs.celestia.org/nodes/mainnet
CELESTIA_CORE_IP=full.consensus.mocha-4.celestia-mocha.com
CELESTIA_API=https://rpc.celestia-mocha.com
# mocha-4 for testnet and for mainnet use mainnet
CELESTIA_P2P_NETWORK=mocha-4
- Start the node!
docker compose up --build
For stacks using celestia
for DA
docker compose -f docker-compose.celestia.yml up --build
- You should now be able to
curl
your Conduit node:
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
-H "Content-Type: application/json" http://localhost:8545
Note: Some L1 nodes (e.g. Erigon) do not support fetching storage proofs. You can work around this by specifying --l1.trustrpc
when starting op-node (add it in op-node-entrypoint
and rebuild the docker image with docker compose build
.) Do not do this unless you fully trust the L1 node provider.
You can map a local data directory for op-geth
by adding a volume mapping to the docker-compose.yaml
:
services:
geth: # this is Optimism's geth client
...
volumes:
- ./geth-data:/data
Not yet available. We're working on it 🏗️
Sync speed depends on your L1 node, as the majority of the chain is derived from data submitted to the L1. You can check your syncing status using the optimism_syncStatus
RPC on the op-node
container. Example:
command -v jq &> /dev/null || { echo "jq is not installed" 1>&2 ; }
echo Latest synced block behind by: \
$((($( date +%s )-\
$( curl -s -d '{"id":0,"jsonrpc":"2.0","method":"optimism_syncStatus"}' -H "Content-Type: application/json" http://localhost:7545 |
jq -r .result.unsafe_l2.timestamp))/60)) minutes
You can see how many nodes you are connected with the following command:
curl -d '{"id":0,"jsonrpc":"2.0","method":"opp2p_peerStats","params":[]}' \
-H "Content-Type: application/json" http://localhost:7545