# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gravity.xyz/network/run-a-gravity-alpha-mainnet-l2-node.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
