For the complete documentation index, see llms.txt. This page is also available as Markdown.

Run a Gravity Mainnet VFN

Run a Gravity Mainnet (L1) Validator Full Node. Covers validator VFN-network seeds, deployment, optional public listener, database warm start, and sync verification.

This guide walks you through running a Validator Full Node (VFN) on Gravity Mainnet (L1, Chain ID 127001). A VFN dials one or more validators on the VFN network and can expose a public listener for downstream PFNs.

A VFN is not part of the validator set and does not need validator stake. Access depends on which validator seed you connect to:

  • Connecting to Gravity mainnet genesis validator seeds is currently invite-only. You need approved validator VFN-network seed information.

  • Connecting to validators that you deploy and operate yourself does not require a Gravity mainnet invite.

Placeholders. Commands below use <YOUR_...> placeholders. Replace each value before running. Never reuse another node's private identity or safety storage.

Network Role

Gravity traffic flows outward from validators to VFNs, then to PFNs:

validators --VFN net--> VFN --public net--> PFN / RPC

Use a VFN when you want:

  • a full node close to a validator or validator operator;

  • a relay point for one or more PFNs;

  • a node that follows validator-network data without joining consensus.

Prerequisites

  1. A Linux x86-64 host, preferably Ubuntu 24.04 LTS.

  2. gravity_node and gravity_cli.

    git clone https://github.com/Galxe/gravity-sdk.git
    cd gravity-sdk
    RUSTFLAGS="--cfg tokio_unstable" \
      cargo build --profile quick-release -p gravity_node -p gravity_cli
  3. Mainnet genesis.json and waypoint.txt. Use the canonical mainnet artifacts from gravity-sdk/genesis/mainnet; do not regenerate genesis locally.

  4. Validator VFN-network seed information. Each validator seed needs account_address, host, vfn_port, and network_public_key. Genesis validator seeds require approval; self-operated validator seeds do not.

  5. SSD/NVMe storage sized for current chain data plus growth.

1. Gather Validator Seed Information

For each validator you will dial, collect its public identity values from identity.public.yaml:

You also need the validator host and VFN-network port, commonly 6190.

In a standalone VFN config, prefer explicit seed entries:

Avoid seeds = [{ from = "<id>" }] unless the seed validator is also defined in the same TOML. The deploy script needs that validator's host and vfn_port from the same config.

2. Write cluster-vfn.toml

Download the canonical mainnet artifacts where the config below expects them:

Create a config such as:

public_port is optional but useful if PFNs should sync from this VFN. Keep RPC private unless you intentionally expose it behind your own gateway and access controls.

If you load identity from a secret manager, pin a fixed version rather than latest:

3. Generate Identity and Deploy

Expected layout:

The public identity generated for the VFN is written to:

If downstream PFNs will use this VFN as a seed, share the VFN sidecar account_address, network_public_key, host, and public_port.

4. Optional: Warm Start From an Existing Node

To speed up initial sync, copy only chain databases from an existing RPC/PFN or VFN you control:

Do not copy rand_db or secure_storage.json from another node. secure_storage.json contains node-specific safety state and can make the node behave as if it belongs to a different identity.

5. Start and Verify

Check logs:

Check RPC height:

Compare with the public head:

Troubleshooting

Symptom
Cause / fix

seeds: from=<id>: missing host or vfn_port in cluster.toml

Use explicit seed entries, or define the seed validator in the same TOML.

VFN does not advance

Verify validator seed peer_id, host, vfn_port, and network_public_key; also verify genesis and waypoint.

Downstream PFNs cannot connect

Confirm public_port is open, reachable, and advertised with the VFN network_public_key.

Paths render as <node>/data/<node>

data_dir should be the node deploy directory, not the final database directory.

Identity-related errors after copying data

Remove any copied secure_storage.json; it must not be reused across nodes.

See Also

Last updated

Was this helpful?