Base is a secure, low-cost, developer-friendly Ethereum L2 built to bring the next billion users to web3. It's built on Optimism’s open-source OP Stack.
This repository contains the relevant Docker builds to run your own node on the Base network.
We recommend you have this configuration to run a node:
- at least 16 GB RAM
- an SSD drive with at least 100 GB free
If you encounter problems with your node, please open a GitHub issue or reach out on our Discord:
- Once you've joined, in the Discord app go to
server menu>Linked Roles>connect GitHuband connect your GitHub account so you can gain access to our developer channels - Report your issue in
#🛟|node-support
| Ethereum Network | Status |
|---|---|
| Goerli testnet | ✅ |
| Mainnet | 🚧 |
- Ensure you have an Ethereum Goerli L1 node RPC available (not Base Goerli), and set
OP_NODE_L1_ETH_RPC(indocker-compose.ymlif using docker-compose). If running your own L1 node, it needs to be synced before Base will be able to fully sync. - Run:
docker compose up --build
- You should now be able to
curlyour Base 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.sh 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:
- $HOME/data/base:/dataSync 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
