Skip to main content

Arbitrum Archive Mainnet Node Guide

This guide is intended to be an end to end walk-through of running an Arbitrum Archive Mainnet Node in an existing Kubernetes cluster. Sync times are reported to be in the range of 1 week on dedicated hardware. The node consists of 2 parts, the classic part and the nitro hardfork. The classic part is only required to request archive data for blocks before the hardfork and takes the aforementioned 1 weeks to sync from scratch. The nitro history is shorter and can be quickly synced within 3 days.

Arbitrum Nitro has a built-in proxy to redirect queries with block numbers below it’s genesis block (they’re sent to the Arbitrum Classic node)

Prerequisites

All the Launchpad Prerequisites apply if running a Kubernetes cluster using Launchpad, so be sure to read them first. This guide can be used with existing Kubernetes clusters as well.

You will need:

  • an ethereum-mainnet RPC endpoint
  • CPU: 4 Cores / 8 Threads
  • RAM: 16 GiB
  • Storage: 3 TiB NVMe SSD

If running a Kubernetes cluster using Launchpad

  1. Check that the cluster is running and healthy - review Quick Start guide for more info.
  2. In your private infra repo pull in latest launchpad-starter changes
task launchpad:pull-upstream-starter
  1. Pull in latest-core changes
task launchpad:update-core
  1. blockchain node data snapshot Arbitrum Classic provides functionality to download data from a snapshot. Review all files in [<your-private-copy-of-launchpad-starter>/helmfiles/release-names/arbitrum-mainnet/](https://github.com/graphops/launchpad-starter/blob/main/helmfiles/release-values/arbitrum-mainnet/) before deploying the chart
arbitrum:
restoreSnapshot:
enable: true
snapshotUrl: https://a-link-to-your-snapshot-archive.tar.gz
mode: streaming # or multipart depending on chain
  1. connect to eth-mainnet-rpc-node Both Arbitrum Classic and Arbitrum Nitro connect to l1 via the following commands:
arbitrum:
extraArgs:
- --node.chain-id=42161 # determines Arbitrum network - 42161 mainnet
- --l1.url=http://a-link-to-your-eth-mainnet-url:8545
nitro:
extraArgs:
- --http.api=net,web3,eth,debug
- --l2.chain-id=42161 # determines Arbitrum network - 42161 mainnet
- --l1.url=http://a-link-to-your-eth-mainnet-url:8545
- --node.rpc.classic-redirect=http://arbitrum-classic-archive-trace-mainnet-0:8547/
- --init.url=https://snapshot.arbitrum.io/mainnet/nitro.tar

Deploying with helm in a Kubernetes cluster outside Launchpad

You can find blockchain related helm packages 'here'

Given that Arbitrum needs both Nitro and classic to run use the following commands:

Deploy Arbitrum Classic

We'll first deploy Arbitrum Classic as Arbitrum Nitro needs to connect to the Classic endpoint.

Create a values arbitrum-classic.yaml file with the following contents

arbitrum:
extraArgs:
- --node.chain-id=42161 # determines Arbitrum network - 42161 mainnet
- --l1.url=http://a-link-to-your-eth-mainnet-url:8545
restoreSnapshot:
enable: true
snapshotUrl: https://a-link-to-your-snapshot-archive.tar.gz
mode: streaming # or multipart depending on chain

Deploy helm-chart:

helm repo add graphops http://graphops.github.io/launchpad-charts
helm install --dry-run arbitrum-classic graphops/arbitrum-classic:latest --namespace arbitrum-mainnet --value arbitrum-classic.yaml

Deploy Arbitrum Nitro

Create a values arbitrum-nitro.yaml file with the following contents

nitro:
extraArgs:
- --http.api=net,web3,eth,debug
- --l2.chain-id=42161 # determines Arbitrum network - 42161 mainnet
- --l1.url=http://a-link-to-your-eth-mainnet-url:8545
- --node.rpc.classic-redirect=http://arbitrum-classic:8547/ # replace `arbitrum-classic` with the name of your arbitrum-classic release deployed at the previous step
- --init.url=https://snapshot.arbitrum.io/mainnet/nitro.tar

Deploy helm-chart:

helm install --dry-run arbitrum-nitro graphops/arbitrum-classic:latest --namespace arbitrum-mainnet --value arbitrum-nitro.yaml