# Gravity Alpha Mainnet (L2) Node Setup

## ArbOS 51 (Dia) Upgrade Notice

Gravity Alpha Mainnet has been upgraded to ArbOS 51 (Dia). This upgrade brings important improvements from the Ethereum Fusaka upgrade and more.

### What's Included

* Features from the ArbOS 40 (Callisto) upgrade
* Unlocks the path to Permissionless Fault Proofs in the future with the new BoLD dispute protocol
* Unlocks the path to enabling Native Token Mint/Burn capabilities
* EIP-7825 — Transaction gas limit cap for more efficient gas usage
* Precompile and opcode changes that make cryptographic operations cheaper and more efficient in the EVM

For a full breakdown, see the [ArbOS 51 upgrade notice](https://docs.arbitrum.io/run-a-node/arbos-releases/arbos51).

### Required Actions for Existing Node Operators

**No action required** if you are not running external nodes.

If you are running external nodes, you need to:

1. Upgrade your Nitro node to **at least v3.9.3**, but **v3.9.5** ([release link](https://github.com/OffchainLabs/nitro/releases/tag/v3.9.5)) is recommended.
2. Make sure the flag `--node.staker.enable=false` is configured on your node.

If you have already downloaded a snapshot previously, you only need to upgrade the node version — simply update the Docker image to `offchainlabs/nitro-node:v3.9.5-66e42c4` and restart.

### Key Changes from Previous Version

* **Docker image**: `ghcr.io/celestiaorg/nitro:v3.6.8` → `offchainlabs/nitro-node:v3.9.5-66e42c4`
* **Celestia DAS server is no longer required** — DA is now handled via the REST aggregator
* **HTTP API**: Added `trace` and `debug` endpoints
* **New flags**:
  * `--node.data-availability.enable=true`
  * `--node.data-availability.rest-aggregator.enable=true`
  * `--node.data-availability.rest-aggregator.urls=https://das-gravity-mainnet-0.t.conduit.xyz`
  * `--execution.caching.archive=true`
  * `--node.staker.enable=false`
* **Removed flags**:
  * `--node.data-availability.enable=false`
  * `--node.da-provider.enable=true`
  * `--node.da-provider.rpc.url=<CELESTIA_DAS_URL>`

***

## Full Node Setup Guide

The following guide is for setting up a Gravity Alpha Mainnet node from scratch.

### Prerequisites

1. A local directory for storing node data
2. An Ethereum mainnet RPC endpoint with unlimited rate limit for eth\_getLogs
3. An Ethereum beacon chain RPC endpoint

### Download Snapshot (Required)

Downloading the latest snapshot is **required** before running the node. Due to historical data availability format changes, syncing from genesis without a snapshot is not supported.

1. [Download Gravity L2 Node Snapshot](https://storage.googleapis.com/conduit-networks-snapshots/gravity-mainnet-0/latest.tar)
2. Extract the snapshot to your local directory before running the node.

If you have already downloaded a snapshot previously, there is no need to download it again.

#### Health Check

After your node is running, verify that it has successfully synced past the historical Celestia DA batches by checking the latest block number:

```bash
curl -s -X POST http://localhost:8547 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  | python3 -c "import sys,json; r=int(json.load(sys.stdin)['result'],16); print(f'Block: {r:,}'); print('Status: HEALTHY - past Celestia DA batches' if r > 119700000 else 'Status: STUCK - node has not passed Celestia DA batch 65604, re-download the snapshot')"
```

If the output shows `STUCK`, your node is unable to process historical Celestia-format batches. You need to re-download the latest snapshot and restart.

### Running the Node

Save the following script as `run-gravity-node.sh`, make it executable with `chmod +x run-gravity-node.sh`, and update the TODO variables:

{% code overflow="wrap" %}

```bash
#!/bin/bash

# Define dependent variables
LOCAL_DIR="TODO"                # Replace with your local directory path
ETH_MAINNET_RPC="TODO"          # Replace with your Ethereum mainnet RPC endpoint
ETH_BEACON_RPC="TODO"           # Replace with your Ethereum beacon chain RPC endpoint

# mkdir ${LOCAL_DIR}
# sudo chmod -R a+rwx ${LOCAL_DIR}

# Run the Docker container
docker run --rm -it -d \
    --add-host=host.docker.internal:host-gateway \
    -v "$LOCAL_DIR:/home/user/.arbitrum" \
    -p 0.0.0.0:8547:8547 \
    -p 0.0.0.0:8548:8548 \
    offchainlabs/nitro-node:v3.9.5-66e42c4 \
    --parent-chain.connection.url="$ETH_MAINNET_RPC" \
    --chain.id=1625 \
    --chain.name=conduit-orbit-deployer \
    --http.api=net,web3,eth,trace,debug \
    --http.corsdomain="*" \
    --http.addr=0.0.0.0 \
    --http.vhosts="*" \
    --chain.info-json='[
        {
            "chain-id": 1625,
            "parent-chain-id": 1,
            "chain-name": "conduit-orbit-deployer",
            "chain-config": {
                "chainId": 1625,
                "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": true,
                    "InitialArbOSVersion": 11,
                    "InitialChainOwner": "0xd65776c5F9fA552cB5C9556B3e86bF6c376b233b",
                    "GenesisBlockNum": 0
                }
            },
            "rollup": {
                "bridge": "0x7983403dDA368AA7d67145a9b81c5c517F364c42",
                "inbox": "0x7AD2a94BefF3294a31894cFb5ba4206957a53c19",
                "sequencer-inbox": "0x8D99372612e8cFE7163B1a453831Bc40eAeb3cF3",
                "rollup": "0x2807B1d5d94ca823ca7d8642A5F5DDac120ce48f",
                "validator-utils": "0x2b0E04Dc90e3fA58165CB41E2834B44A56E766aF",
                "validator-wallet-creator": "0x9CAd81628aB7D8e239F1A5B497313341578c5F71",
                "deployed-at": 19898364
            }
        }
    ]' \
    --execution.forwarding-target="https://rpc.gravity.xyz" \
    --node.feed.input.url="wss://relay-gravity-mainnet-0.t.conduit.xyz" \
    --parent-chain.blob-client.beacon-url="$ETH_BEACON_RPC" \
    --node.data-availability.enable=true \
    --node.data-availability.rest-aggregator.enable=true \
    --node.data-availability.rest-aggregator.urls=https://das-gravity-mainnet-0.t.conduit.xyz \
    --execution.caching.archive=true \
    --node.staker.enable=false
```

{% endcode %}

### Additional Information

* The chain info is obtained from Conduit:&#x20;

```bash
curl https://api.conduit.xyz/file/v1/arbitrum/chaininfo/gravity-mainnet-0
```

* Relay endpoint is provided by Conduit as `wss://relay-gravity-mainnet-0.t.conduit.xyz`
* Gravity Alpha Mainnet uses Anytrust DA, with aggregator URL: `https://das-gravity-mainnet-0.t.conduit.xyz`

### References

For more information, please check out the following guides:

1. <https://docs.arbitrum.io/node-running/how-tos/running-an-orbit-node>
2. <https://docs.conduit.xyz/guides/run-a-node/arbitrum-node>
