Run Full Node

Get step by step instructions on how to run a full-node on Onyx

How to Run a Full Node for Onyx

This guide provides step-by-step instructions for running an Onyx node on your local machine.

Prerequisites

Latest Docker Image

offchainlabs/nitro-node:v3.4.0-d896e9c

Minimum Hardware Configuration

  • RAM: 8-16 GB

  • CPU: 2-4 core CPU (For AWS: t3 xLarge)

  • Storage: 50GB

Required Parameters

1. Parent Chain Parameters

The parent-chain argument must provide a standard RPC endpoint for an EVM node, either self-hosted or obtained from a node service provider:

--parent-chain.connection.url=<Parent chain RPC URL>

Note: Public Arbitrum RPC endpoints have rate limits. To avoid bottlenecks, consider running a local node for the parent chain or using third-party RPC providers.

2. Child Chain Parameters

The child chain in an Arbitrum Orbit context is an L2 or an L3 Orbit chain. The required parameters are:

1. chain.info-json

This parameter contains necessary information about the Orbit chain:

--chain.info-json=<Orbit Chain's chain info>

An example JSON format is provided in the next section.

2. chain.name

This mandatory flag must match the chain name specified in --chain.info-json:

--chain.name=<My Arbitrum L3 Chain>

3. execution.forwarding-target

If running a regular full node (not a sequencer), set this flag:

--execution.forwarding-target=<Your Sequencer node endpoint URL>

4. AnyTrust Chains

For AnyTrust chains, additional flags are required:

--node.data-availability.enable
--node.data-availability.rest-aggregator.enable

Additionally, specify either:

--node.data-availability.rest-aggregator.urls=<A list of DAS REST endpoints>

Or:

--node.data-availability.rest-aggregator.online-url-list=<A URL returning a list of DAS REST endpoints>

Important Ports

Protocol

Port

RPC/http

8547

RPC/websocket

8548

Sequencer Feed

9642

For RPC/websocket protocol, enable the required ports using:

--ws.port=8548
--ws.addr=0.0.0.0
--ws.origins=*

Putting It All Together

When running a Docker image, mount an external volume to persist the database across restarts. The mount point inside the Docker image should be:

/home/user/.arbitrum

docker run --rm -it -v /some/local/dir/arbitrum:/home/user/.arbitrum \
  -p 0.0.0.0:8547:8547 -p 0.0.0.0:8548:8548 offchainlabs/nitro-node:v3.4.0-d896e9c \
  --parent-chain.connection.url=<Parent chain RPC URL> \
  --chain.id=<OrbitChainId> --chain.name=<My Arbitrum Orbit Chain> \
  --http.api=net,web3,eth --http.corsdomain=* --http.addr=0.0.0.0 \
  --http.vhosts=* --chain.info-json=<Orbit Chain's chain info> \
  --execution.forwarding-target=<Your Sequencer node endpoint URL>

Example Command:

Important: Ensure /some/local/dir/arbitrum exists before running the command to avoid permission issues.

Example --chain.info-json Format:

[{"chain-id":94692861356,"parent-chain-id":421614,"chain-name":"My Arbitrum L3 Chain",
"chain-config":{"chainId":94692861356,"homesteadBlock":0,"daoForkBlock":null,
"daoForkSupport":true,"eip150Block":0,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,
"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":0,"berlinBlock":0,
"londonBlock":0,"clique":{"period":0,"epoch":0},"arbitrum":{"EnableArbOS":true,
"AllowDebugPrecompiles":false,"DataAvailabilityCommittee":false,"InitialArbOSVersion":10,
"InitialChainOwner":"0xAde4000C87923244f0e95b41f0e45aa3C02f1Bb2","GenesisBlockNum":0}},
"rollup":{"bridge":"0xde835286442c6446E36992c036EFe261AcD87F6d",
"inbox":"0x0592d3861Ea929B5d108d915c36f64EE69418049",
"sequencer-inbox":"0xf9d77199288f00440Ed0f494Adc0005f362c17b1",
"rollup":"0xF5A42aDA664E7c2dFE9DDa4459B927261BF90E09",
"validator-utils":"0xB11EB62DD2B352886A4530A9106fE427844D515f",
"validator-wallet-creator":"0xEb9885B6c0e117D339F47585cC06a2765AaE2E0b",
"deployed-at":1764099}}]

Graceful Shutdown

Ensure a graceful shutdown to save the current state:

docker stop --time=300 $(docker ps -aq)
Fixing Permission Errors
If you encounter permission errors on Linux/macOS, run:
mkdir /data/arbitrum
chmod -fR 777 /data/arbitrum

Sequencer Feed

Nitro nodes can receive real-time ordered transactions from the sequencer feed. If the feed input URL is not set, the node will listen to the parent chain's inbox contract, which may prevent synchronization with the latest state.

Enable Sequencer Feed Synchronization

--node.feed.input.url=<Sequencer feed URL>

For chain owners, ensure the sequencer is configured with:

--node.feed.output.enable=true \
--node.feed.output.addr=<Sequencer feed URL> \
--node.feed.output.port=<Sequencer feed port>

Optional Parameters

Flag

Description

--execution.rpc.classic-redirect=<RPC>

Redirects archive requests for pre-nitro blocks to an Arbitrum Classic node.

--http.api

Offered APIs over HTTP-RPC. Default: net,web3,eth,arb. Add debug for tracing.

--execution.forwarding-target=<RPC>

Defaults to L2 Sequencer RPC based on provided L1 and L2 chain IDs.

For a full list of parameters, use:

--help

Last updated