Gnoland
- installation guide
- links
- snapshots
- contributions
Gnoland Mainnet — Full Node Installation Guide
This guide installs a non-signing Gnoland full node on gnoland-1. Validator
admission is a separate, governance-controlled procedure — see the last
section before planning one.
Tested release: v1.5.0, commit
e75fef82c02876a4df92ad6e325c5479b9532168.
Requirements
- Linux x86_64/amd64; Ubuntu 24.04 is recommended
- Go 1.25.9 or newer (the
go.modofv1.5.0declares 1.25.9) - 4+ CPU cores
- 16 GB+ RAM — genesis alone loads 3,262,486 balance entries
- 200 GB+ SSD storage
git,curl,jq,lz4,tar,gzip, andsha256sum- inbound TCP
26656for P2P
Keep RPC on loopback unless you operate a separately secured TLS reverse proxy with request limits, unsafe-method blocking, monitoring, and firewall rules.
1. Build the pinned binaries
Keep the source tree. gnoland start needs it as --gnoroot-dir.
2. Initialize an independent node identity
Choose your moniker:
$DATA_DIR/secrets must exist before gnoland start runs. Without it the node
exits with open …/data/secrets/write-file-atomic-…: no such file or directory, which names a temporary file rather than the missing directory.
Never copy another validator's secrets/ directory or validator state into a
new node. Each full node must have its own consensus and P2P identity.
3. Download and verify genesis
The launch genesis is a release asset. It is not in the repository —
misc/deployments/mainnet.gno.land/genesis.json is gitignored — and
https://rpc.gno.land/genesis serves a different, re-serialized body that
cannot match the published digest. Download the compressed asset:
Both checksums must pass before the node is started. The uncompressed file is
324 MB. The same two digests are published by the release's CHECKSUMS.txt
and by the CHECKSUMS_DATA block committed inside
misc/deployments/mainnet.gno.land/gen-genesis.sh, so the download path needs
no trust of its own.
Do not attempt to rebuild genesis with gen-genesis.sh. The upstream
allocation data has moved past the launch pin, and the script refuses rather
than producing a genesis that would panic at InitChain.
4. Configure RPC, P2P, pruning, and peers
application.prune_strategy syncable keeps a normal full node compact. An
archive node that must answer historical queries — for an explorer or an
indexer — uses nothing instead and needs materially more disk.
If UFW is already active, expose only P2P:
5. Restore the latest snapshot
Syncing gnoland-1 from genesis works but is slow. Use the dedicated
snapshot guide to download, verify, and extract POSTHUMAN's
latest db/ + wal/ archive before starting the node. The snapshot never
contains keys, configuration, or genesis.
Genesis is still required when restoring from a snapshot: the node reads
--genesis on every start.
6. Create the systemd service
Replace every YOUR_USERNAME occurrence with the Linux account that owns
$HOME/gnoland-mainnet.
TimeoutStartSec=7200 is not padding. The first start processes the whole
genesis allocation before the node serves anything; a default timeout sends
SIGTERM half-way through and the next start begins again from nothing.
Later restarts on an existing database take seconds.
Save the unit as /etc/systemd/system/gnoland.service, then:
7. Verify sync and identity
The local chain must be gnoland-1, height must advance, and a non-signing
full node reports voting power 0.
Then prove the node agrees with the network rather than merely running. One wrong genesis balance changes the height-1 app hash, after which a node cannot follow the chain at all:
Both commands must print the same value.
8. Becoming a validator is governance, not a transaction
The gnoland-1 validator set was fixed at genesis and changes only through an
approved GovDAO proposal. Registering a profile in
r/gnops/valopers creates a candidate
entry; it does not join the active set, there is no self-bonding transaction,
and mainnet has no faucet. Plan any validator ambition around that process —
until it completes, the node above is a full node with voting power 0.