Prepare to run a node
If you’re interested in accessing an Arbitrum chain but don’t want to set up your own node, see our Node Providers to get RPC access to fully managed nodes hosted by a third-party provider.
This how-to provides step-by-step instructions for preparing the information you will need to run a full node for Arbitrum on your local machine.
Prerequisites
In addition to the hardware requirements, the following prerequisites will be necessary when initially setting up your node. It is essential not to skip over these items. You would benefit by copying and pasting them into a notepad or text editor, as you will need to combine them with other commands and configuration/parameter options when you initially run your Arbitrum node.
Minimum hardware configuration
The following are the minimum hardware requirements to set up a Nitro full node (not archival):
| Resource | Minimum requirements | Recommended |
|---|---|---|
| RAM (DDR5) | 64 GB | 128 GB or more |
| CPU | 8 core 3rd generation CPUs (for AWS, a i4i.2xlarge instance) | 16 core CPU or higher and more recent/newer generation of CPUs |
| Storage type | NVMe SSD drives with locally attached drives strongly recommended | Same |
| Storage size | Depends on the chain and its traffic over time, but ideally several terabytes (TB) | Same, but higher if possible |
Please note that:
- The minimum requirements for RAM and CPU listed here are recommended for nodes that handle a limited number of RPC requests. For nodes that need to process multiple simultaneous requests, both the RAM size and the number of CPU cores should be increased to accommodate higher levels of traffic.
- Single core performance is important. If the node is falling behind and a single core is 100% busy, the recommendation is to upgrade to a faster processor.
- The minimum storage requirements will change over time as the chain grows. Using more than the minimum requirements to run a robust full node is recommended. Note that snapshot extraction requires approximately 2x the snapshot size in temporary disk space, so plan accordingly during initial setup.
- Path-based state schemes are supported for Nitro's state trie, but only for full nodes and archive nodes at this time, and not validators yet. As a result, HashDB is still the default state scheme used by Nitro, and you must take explicit action to enable PathDB. You can find more details in the table below for optional parameters.
Parent chain (L1) client
Your Arbitrum node requires a connection to a parent chain RPC endpoint (e.g., an Ethereum execution client for Arbitrum One or Nova). Keep your parent chain client up to date—incompatible L1 client versions can cause your Arbitrum node to crash or fail to sync. When upgrading your L1 client, check the Nitro release notes for any noted compatibility requirements.
Recommended Nitro version
Although there are beta and release candidate versions of the Arbitrum Nitro software, use only the release version when running your node. Running beta or RC versions is not supported and might lead to unexpected behaviors and/or database corruption.
Latest Docker image: offchainlabs/nitro-node:v3.9.9-6b0af88
Database snapshots
Database snapshots are available and located in the snapshot explorer for Arbitrum One, Arbitrum Nova, and Arbitrum Sepolia. Currently, only archive node snapshots using PathDB are available for Arbitrum One and Arbitrum Sepolia. Pruned PathDB snapshots for full nodes on Arbitrum One and Arbitrum Sepolia will be uploaded soon.
Database snapshots for other Arbitrum chains may be available at the discretion of the chain's team. Get in touch with them if you're interested in using a database snapshot for their chains.
Supplying a database snapshot when starting your node for the first time is required for Arbitrum One (to provide information from the Classic era) but is optional for other chains. Supplying a database snapshot on the first run will provide the state and data for that chain up to a specific block, allowing the node to sync faster to the head of the chain.
We provide a summary of the available parameters here, but we recommend reading the complete guide if you plan to use snapshots.
- Use the parameter
--init.latest <snapshot type>(accepted values:archive,pruned,genesis) to instruct your node to download the corresponding snapshot from the configured URL - Optionally, use the parameter
--init.latest-baseto set the base URL when searching for the latest snapshot - Note that these parameters get ignored if a database already exists
- When running more than one node, it's easier to manually download the different parts of the snapshot, join them into a single archive, and host it locally for your nodes. Please see Downloading the snapshot manually for instructions on how to do that.
- Only snapshots formatted with your node's specified state scheme are compatible. In other words, a PathDB snapshot won't work for a node using HashDB, and vice versa.
| Scenario | Recommended Parameter |
|---|---|
| Setting up a new pruned (full) node | --init.latest pruned |
| Setting up a new archive node | --init.latest archive (note: the publicly hosted archive snapshot may be outdated as it has not been updated recently) |
| Reducing disk usage on an existing node | --init.prune full (or minimal) — only applicable to HashDB; PathDB handles state trie pruning automatically |
| Hosting one snapshot for multiple nodes | Download manually, then use --init.url file:///path/to/archive.tar on each node |
| Using a custom snapshot URL | --init.url https://your-snapshot-url/archive.tar |
For more details on snapshot downloading and initialization, see the complete snapshot guide.
If you're running a beacon node, historical data will now be in blobs. To make this transition to using historical blobs, refer to the Historical Blobs for Beacon Nodes guide.
Required parameters
The following list contains all the parameters needed to configure your node. Select the appropriate option depending on the chain you want to run your node for.
- Arbitrum One, Nova, Sepolia
- Arbitrum chains
1. Parent chain (Ethereum) parameters
The --parent-chain.connection.url parameter needs to provide a standard RPC endpoint for an Ethereum node, whether self-hosted or obtained from a node service provider:
--parent-chain.connection.url=<Ethereum RPC URL>
Additionally, use the parameter --parent-chain.blob-client.beacon-url to provide a beacon chain RPC endpoint:
--parent-chain.blob-client.beacon-url=<Ethereum beacon chain RPC URL>
If you choose to self-host an EVM node, the Prysm client software is a great choice. It's straightforward, efficient, and effective—ensuring your setup runs smoothly!
You can also consult our list of Ethereum beacon chain RPC providers. Note that historical blob data is required for these chains to properly sync up if they are new or have been offline for more than 18 days. The beacon chain RPC endpoint you use may also need to provide historical blob data. Please see Special notes on ArbOS 20: Atlas support for EIP-4844 for more details.
2. Arbitrum chain parameters
Use the parameter --chain.id to specify the chain you're running this node for. See RPC endpoints and providers to find the IDs of these chains.
--chain.id=<Arbitrum chain ID>
Alternatively, you can use the parameter --chain.name to specify the chain you're running this node for. Use arb1 for Arbitrum One, nova for Arbitrum Nova, or sepolia-rollup for Arbitrum Sepolia.
--chain.name=<Child chain name>
1. Parent chain parameters
The --parent-chain.connection.url parameter needs to provide a standard RPC endpoint for an EVM node, whether self-hosted or obtained from a node service provider:
--parent-chain.connection.url=<Parent chain RPC URL>
If you choose to self-host an EVM node, the Prysm client software is a great choice. It's straightforward, efficient, and effective—ensuring your setup runs smoothly!
Additionally, if the chain is a Layer-2 (L2) chain on top of Ethereum and uses blobs to post calldata, use the parameter --parent-chain.blob-client.beacon-url to provide a beacon chain RPC endpoint:
--parent-chain.blob-client.beacon-url=<Parent chain beacon chain RPC URL>
Public Arbitrum RPC endpoints rate-limit connections. To avoid hitting a bottleneck, you can run a local node for the parent chain or rely on third-party RPC providers.
You can find beacon providers in our list of Ethereum beacon chain RPC providers. Note that historical blob data is required for these chains to properly sync up if they are new or have been offline for more than 18 days. This means that the beacon chain RPC endpoint you use may also need to provide historical blob data. Please see Special notes on ArbOS 20: Atlas support for EIP-4844 for more details.
2. Child chain parameters
The parameter --chain.info-json specifies a JSON string that contains the information about the Arbitrum chain required by the node.
--chain.info-json=<Orbit chain's info>
This information should be provided by the chain owner and will look something like the following:
--chain.info-json="[{\"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}}]"
Use the parameter --chain.name to specify the chain you're running this node for. The name of the chain should match the name used in the JSON string used in --chain.info-json:
--chain.name=<Orbit chain name>
3. Parameters to connect to the sequencer
Use the parameter --node.feed.input.url to point at the sequencer feed endpoint, which should be provided by the chain owner.
--node.feed.input.url=<Sequencer feed url>
Use the parameter --execution.forwarding-target to point at the sequencer node of the Arbitrum chain, which should also be provided by the chain owner.
--execution.forwarding-target=<Sequencer node endpoint url>
3. Additional parameters for AnyTrust chains
If you're running a node for an Anytrust chain, you need to specify information about the Data Availability Committee (DAC) in the configuration of your node.
First, enable data-availability using the following parameters:
--node.data-availability.enable
--node.data-availability.rest-aggregator.enable
Then, choose one of these methods to specify the DAS REST endpoints that your node will read the information from. These endpoints should also be provided by the chain owner.
- Set the DAS REST endpoints directly:
--node.data-availability.rest-aggregator.urls=<A list of DAS REST endpoints, separated by commas>
- Set a URL that returns a list of the DAS REST endpoints:
--node.data-availability.rest-aggregator.online-url-list=<A URL that returns a list of the DAS REST endpoints>
If you are a chain owner, please refer to the DAC setup guide to set it up.
Additionally, for your batch poster to post data to the DAS, follow Step 3 of How to configure a DAC to configure your batch poster node.
Run a full node
Now that you have all the prerequisite information prepared—it's time to run your node. Follow the instructions on the Run a full node page.