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 |
|---|---|---|
| Zora Sepolia | zora-sepolia-0thyhxtf5e | ✅ |
| Zora Mainnet | zora-mainnet-0 | ✅ |
| PGN Sepolia | pgn-sepolia-i4td3ji6i0 | ✅ |
| Mode Sepolia | mode-sepolia-vtnhnpim72 | ✅ |
| Mode Mainnet | mode-mainnet-0 | ✅ |
| Ancient8 Sepolia | ancient-8-celestia-wib77nnwsq | ✅ |
| Ancient8 Mainnet | ancient8-mainnet-0 | ✅ |
| BOB Mainnet | bob-mainnet-0 | ✅ |
| Gold Mainnet | gold-mainnet-0 | ✅ |
| Mint Sepolia | mint-sepolia-testnet-ijtsrc4ffq | ✅ |
| Mint Mainnet | mint-mainnet-0 | ✅ |
- Select the network you want to run and set
CONDUIT_NETWORKenv variable. You will need to know theslugof 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.exampleto.envsettingOP_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
curlyour 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:/dataNot 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
THE NODE SOFTWARE AND SMART CONTRACTS CONTAINED HEREIN ARE FURNISHED AS IS, WHERE IS, WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, NON- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE. IN PARTICULAR, THERE IS NO REPRESENTATION OR WARRANTY THAT THE NODE SOFTWARE AND SMART CONTRACTS WILL PROTECT YOUR ASSETS — OR THE ASSETS OF THE USERS OF YOUR APPLICATION — FROM THEFT, HACKING, CYBER ATTACK, OR OTHER FORM OF LOSS OR DEVALUATION.
