Skip to main content

Running Chain Node

Dive into the world of blockchain by setting up your Chain Node. This guide aims to equip you with the knowledge to deploy and synchronize a Chain node effectively.


Upon completion, you'll master:

  • Deploying your own Chain node.
  • Synchronizing the node with the network.


Running a node is a commitment—requiring time, substantial computing resources, and potentially incurring costs. Consider your needs carefully. If you're exploring or need a quick start, our free RPC endpoints are a hassle-free alternative:

  • Testnet (Sepolia):

Note: Our RPC endpoints are rate-limited. They're perfect for development but might not suit production needs.


To ensure a smooth operation, your setup should meet the following:

  • Memory: Minimum of 16 GB RAM.
  • Storage: SSD with at least 2 TB available space.

Tip: Using Amazon Elastic Block Store (EBS)? Verify that the disk read speeds are compatible with the rapid pace of block additions, especially during the initial sync phase, to prevent any latency issues.


  • Docker Proficiency: Familiarity with Docker and its setup on your system is assumed.
  • Ethereum L1 RPC URL: Access to an Ethereum L1 full node RPC URL is essential, whether self-hosted or via a third-party provider.


  1. Repository Cloning: Start by cloning the Chain Node repository: GitHub.
  2. Configuration: Ensure access to an Ethereum L1 full node RPC URL (excluding Chain Network). Configure OP_NODE_L1_ETH_RPC in your .env.* file for docker-compose. The L1 node must be fully synchronized for the Chain node to sync successfully.
  3. Environment Setup: In docker-compose.yml, uncomment your network's corresponding line (.env.sepolia) under env_file.
  4. Launch: Execute docker compose up. Verify functionality with:
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
-H "Content-Type: application/json" -X POST http://localhost:8545

Syncing your node may take days and will consume a vast amount of your requests quota. Be sure to monitor usage and up your plan if needed.


You can monitor the progress of your sync with:

echo "Latest synced block is behind by: $((($(date +%s)-$( \
curl -d '{"id":0,"jsonrpc":"2.0","method":"optimism_syncStatus"}' \
-H "Content-Type: application/json" -X POST http://localhost:7545 | \
jq -r .result.unsafe_l2.timestamp))/60)) minutes."

You'll also know that the sync hasn't completed if you get Error: nonce has already been used if you try to deploy using your node.