Skip to main content

Frequently asked questions: Run a node

How do I run a node?

See instructions in the tutorial explaining how to run a full node!

How to verify the integrity of the Nitro database I currently have?

We use an accumulator hash for all messages, ensuring that a new message doesn't get added to the database without the preceding message being valid.

To verify that everything is functioning correctly, you can check if it is syncing and confirm that the latest block is consistent with other Arbitrum nodes. For instance, you might compare it with information on Arbiscan (please note that the search function on Arbiscan does not support searches by block hash).

How can I check if the node is running properly and diagnose the issue if it is not?

We have trace-level logging RPC request implemented on our node. You could use it to log all requests and responses at the trace level. (The performance impact of this should be negligible compared to the network overhead of an RPC request in the first place, especially considering that the request/response will only be serialized for logging if that log level is enabled.)

Why do I need an L1 node to run an Arbitrum node?

During the node syncing stage, Arbitrum nodes read transactions from batches that have already been posted and executed on Layer 1. They connect to the Sequencer feed to receive new incoming batched transactions that have not been posted to L1 yet.

When fully synced, the Arbitrum node uses the State Transition Function (STF) to consume transactions from the Sequencer feed and update the state accordingly. It also waits for the L1 batch to post. If the finalized L1 batch differs from what the Sequencer published, the node will update its state based on the L1 batched transactions.

Can I run an Arbitrum node in p2p mode?

Arbitrum doesn't have a consensus mechanism, so "p2p mode" doesn't apply. For nodes to sync to the latest chain state, they connect to an L1 node to sync the chain's history that's been posted in calldata and connect to the Sequencer feed for the transactions that have yet to be posted in batches. In no case do nodes need to peer up and sync with each other.

How do I read messages from the Sequencer feed?

Running an Arbitrum relay locally as a Feed Relay lets you subscribe to the Sequencer feed for real-time data as the Sequencer accepts and orders transactions off-chain. Refer to How to read the sequencer feed for a detailed guide.

How do I run a node locally for development?

See instructions on how to set up a local dev node.

We recommend running Nitro nodes via Docker; to compile directly / run without Docker, you can follow the steps in How to build Nitro locally.

Is there any way to retrieve pre-Nitro archive data from a Nitro node?

The pre-Nitro stack is also called the "classic" stack. Full Nitro nodes start with a database that contains the information from the "classic" era.

However, a Nitro node can't query archive information contained in "classic" blocks right away. To do that, you also need to run a classic node. You can find detailed instructions (in this detailed How To) and set the parameter —node.rpc.classic-redirect=your-classic-node-RPC.

Please note that this information only applies to Arbitrum One nodes. Arbitrum Nova and Sepolia nodes started with a Nitro stack, so they don't have "classic" data.

How can I verify that my node is syncing at a desirable speed?

Syncing speed can vary depending on multiple factors. You can find the minimum hardware requirements to run your node on this page. You should also verify your network and disk speeds and ensure that the L1 node is running correctly.

How can I verify that my node is fully synced?

You can make an eth_syncing RPC call to your node. Once a Nitro node is fully synced, eth_syncing returns the value false (just like a normal Geth node).

When a Nitro node is still syncing, eth_syncing returns a map of values to help understand why the node is not syncing. Nitro execution and bottlenecks differ from those of a normal Geth node, so the eth_syncing output is unique to Nitro.

You can find information to understand the output of eth_syncing in the list of RPC methods page.

Is there an alternative to Docker when running a node?

We recommend running Nitro nodes using Docker, following the guide provided in our documentation. However, you can compile the code directly by following the steps described in this guide.

What are the minimum hardware requirements to run a full node?

The minimum hardware requirements are available in this section.

How can I migrate the date of one synced node to a new one?

From a fully synced node, you can copy its database (the .arbitrum directory in a default setup) to the same database folder of the new node, and it will start from the same state.

Keep in mind that this must be done after a clean shutdown, while the node is not running.

When querying Classic transactions from a Nitro node, I sometimes get incorrect data, like the zero address as the sender. Why is that?

Some old Nitro genesis database snapshots didn't properly set the retry sender for Classic blocks and contained this error. If you need to access that information, you can either resync your Nitro node with one of the current snapshots or run a Classic node alongside your Nitro node and configure a redirection for requests to Classic blocks. Please note that this only happens on Arbitrum One.