# Arbitrum (https://docs.axelar.dev/infrastructure/chain-nodes/arbitrum)



<Callout title="Consensus chain">
  This chain is verified by Axelar validators. Before setting up this node,
  [set up your Axelar validator](https://docs.axelar.dev/llms.mdx/infrastructure/validators/content.md).
  Once the node is running, connect it to `vald` as described in [Verify consensus
  chains](https://docs.axelar.dev/llms.mdx/infrastructure/verifiers/consensus-chains/content.md).
</Callout>

<Callout type="warn" title="Check the official documentation">
  The node setup steps below follow Arbitrum's own documentation at the time of
  writing and may be out of date. Check the [official
  documentation](https://developer.offchainlabs.com/node-running/running-a-node) before you start. The Axelar-specific steps (connecting
  the node to `vald` or `ampd`) are maintained here.
</Callout>

Set up your Arbitrum Mainnet & Sepolia Testnet RPC node

## Prerequisites [#prerequisites]

* [Setup your Axelar validator](https://docs.axelar.dev/llms.mdx/infrastructure/validators/content.md)
* [Setup your Ethereum node](https://docs.axelar.dev/llms.mdx/infrastructure/chain-nodes/ethereum/content.md)
* Minimum hardware requirements: CPU with 2+ cores, 4GB RAM, 600GB+ free storage space.
* MacOS or Ubuntu 20.04+
* [Official Documentation](https://developer.offchainlabs.com/node-running/running-a-node)

## Steps [#steps]

1. Install Docker
2. Install Arbitrum image
3. Configure vald

### Install docker [#install-docker]

```bash
sudo apt update && sudo apt install curl jq -y < "/dev/null"
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
```

### Install Arbitrum node [#install-arbitrum-node]

Get the latest arbitrum version/docker image to use from the [official docs](https://developer.offchainlabs.com/node-running/running-a-node). It should look something like `offchainlabs/nitro-node:vx.y.z-commit`.

```bash
mkdir -p $HOME/data/arbitrum
chmod -fR 777 $HOME/data/arbitrum
```

Now, you will see this flag in the command below `--l1.url <YOUR_ETH_RPC_URL>` this means that your arbitrum node needs a synced Ethereum node.
Please provide the RPC URL of your synced [Ethereum node](https://docs.axelar.dev/llms.mdx/infrastructure/chain-nodes/ethereum/content.md) with this flag.

<Callout type="error" emoji="⚠️">
  Please use your own Ethereum node instead of using 3rd party providers like
  alchemy, infura etc. for decentralization/security. Third-party providers also
  have a specific request limit, and your node can throw 100s of thousands of
  requests while trying to sync.
</Callout>

<Tabs items="[&#x22;Mainnet&#x22;,&#x22;Sepolia Testnet&#x22;]">
  <Tab value="Mainnet">
    ```bash
    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 <LATEST_DOCKER_IMAGE> --parent-chain.connection.url <YOUR_ETH_RPC_URL> --chain.id=42161 --http.api=net,web3,eth,debug --http.corsdomain=* --http.addr=0.0.0.0 --http.vhosts=* --init.url="https://snapshot.arbitrum.foundation/arb1/nitro-archive.tar"
    ```
  </Tab>

  <Tab value="Sepolia Testnet">
    ```bash
    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 <LATEST_DOCKER_IMAGE> --parent-chain.connection.url <YOUR_ETH_RPC_URL> --chain.id=421613 --http.api=net,web3,eth,debug --http.corsdomain=* --http.addr=0.0.0.0 --http.vhosts=* --init.url="https://snapshot.arbitrum.foundation/sepolia/nitro-archive.tar"
    ```
  </Tab>
</Tabs>

#### Verify sync status [#verify-sync-status]

To verify if your node is in sync you can check the latest block from the explorer.
Compare it with what you have in `docker ps -q | xargs -L 1 docker logs --tail 10 -f`

* [Mainnet Explorer](https://arbiscan.io)
* [Testnet Explorer](https://sepolia.arbiscan.io)

#### Test RPC connection [#test-rpc-connection]

Once your node is fully synced, the output from above will say `false`. To test your Arbitrum RPC node, you can send an RPC request using `cURL`

```bash
curl -X POST http://localhost:8547 \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
```

If you are testing it remotely, please replace `localhost` with the IP or URL of your server.

### Configure vald [#configure-vald]

In order for `vald` to connect to your Arbitrum node, your `rpc_addr` should be exposed in
vald's `config.toml`

<Tabs items="[&#x22;Mainnet&#x22;,&#x22;Sepolia Testnet&#x22;]">
  <Tab value="Mainnet">
    ```bash [[axelar_bridge_evm]] name = "arbitrum" rpc_addr = "http://IP:PORT"
    start-with-bridge = true 
    ```
  </Tab>

  <Tab value="Sepolia Testnet">
    ```bash [[axelar_bridge_evm]] name = "arbitrum" rpc_addr = "http://IP:PORT"
    start-with-bridge = true 

    ```
  </Tab>
</Tabs>


---

All pages of these docs, as Markdown: https://docs.axelar.dev/llms.txt