posthuman - nodes
Gnoland
Gnoland websiteGnoland github

Gnoland

type:
testnet
chain id:
topaz-1
rpc:
https://rpc-gnoland.posthuman.digital
snapshots:
https://snapshots-gnoland.posthuman.digital
peer:
g190ajdkf9dmmrnl2ne0wca2nppes6fn5prmqjv2@peer-gnoland.posthuman.digital:37656
  • installation guide
  • links
  • snapshots
  • contributions

Gnoland Topaz — Full Node Installation Guide

This guide installs a non-signing Gnoland full node on topaz-1. Validator registration and key custody are separate procedures.

Tested source commit: fc40526511474e40b8a66419f5ba28255085bc08 from chain/topaz.

Requirements

  • Linux x86_64/amd64; Ubuntu 24.04 is recommended
  • Go 1.25.9 or the version declared by the pinned source commit
  • 4+ CPU cores
  • 8 GB+ RAM
  • 100 GB+ SSD storage
  • git, curl, jq, lz4, tar, and sha256sum
  • inbound TCP 26656 for 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 Topaz binaries

GNO_COMMIT=fc40526511474e40b8a66419f5ba28255085bc08 GNO_SOURCE="$HOME/gno" git clone --branch chain/topaz https://github.com/gnolang/gno.git "$GNO_SOURCE" git -C "$GNO_SOURCE" checkout "$GNO_COMMIT" test "$(git -C "$GNO_SOURCE" rev-parse HEAD)" = "$GNO_COMMIT" cd "$GNO_SOURCE" go build -o /tmp/gnoland ./gno.land/cmd/gnoland go build -o /tmp/gnokey ./gno.land/cmd/gnokey sudo install -m 0755 /tmp/gnoland /usr/local/bin/gnoland sudo install -m 0755 /tmp/gnokey /usr/local/bin/gnokey gnoland version gnokey version

Both commands should report the Topaz build.

2. Initialize an independent node identity

Choose your moniker:

MONIKER="YOUR_MONIKER" GNO_HOME="$HOME/gnoland-topaz" DATA_DIR="$GNO_HOME/data" CONFIG="$DATA_DIR/config/config.toml" install -d -m 0700 "$DATA_DIR" gnoland secrets init -data-dir "$DATA_DIR/secrets" gnoland config init -config-path "$CONFIG" chmod -R go-rwx "$DATA_DIR/secrets"

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

curl -fsS --retry 3 https://rpc.topaz.testnets.gno.land/genesis \ | jq -e '.result.genesis' \ > "$DATA_DIR/genesis.json" test "$(jq -r '.chain_id' "$DATA_DIR/genesis.json")" = "topaz-1" sha256sum "$DATA_DIR/genesis.json"

Record the printed checksum in your operations log and cross-check it with a second trusted Topaz operator before starting a validator.

4. Configure RPC, P2P, pruning, and peers

SEEDS="g19q07ssuafhmg6r7ys7wp7rpc4jxc85cpvdy426@seed-1.topaz.testnets.gno.land:26656,g15k98e65gm8h7fdr3yr4tqn82lvch4a97a3sg3j@seed-2.topaz.testnets.gno.land:26656" PEERS="g18ncv9au4sq4d7jxjduxj4sstm3zl2lvd3kehqu@44.213.204.244:26656,g1zzyjtaj4lv4vlx6nvaf95rpe68sdhh38t968gs@54.72.126.143:26656,g190ajdkf9dmmrnl2ne0wca2nppes6fn5prmqjv2@peer-gnoland.posthuman.digital:37656" gnoland config set -config-path "$CONFIG" moniker "$MONIKER" gnoland config set -config-path "$CONFIG" proxy_app tcp://127.0.0.1:26658 gnoland config set -config-path "$CONFIG" rpc.laddr tcp://127.0.0.1:26657 gnoland config set -config-path "$CONFIG" rpc.unsafe false gnoland config set -config-path "$CONFIG" rpc.max_open_connections 300 gnoland config set -config-path "$CONFIG" rpc.max_body_bytes 2000000 gnoland config set -config-path "$CONFIG" p2p.laddr tcp://0.0.0.0:26656 gnoland config set -config-path "$CONFIG" p2p.seeds "$SEEDS" gnoland config set -config-path "$CONFIG" p2p.persistent_peers "$PEERS" gnoland config set -config-path "$CONFIG" application.prune_strategy syncable gnoland config set -config-path "$CONFIG" tx_event_store.event_store_type none

If UFW is already active, expose only P2P:

sudo ufw allow 26656/tcp

5. Restore the latest snapshot

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.

6. Create the systemd service

Replace every YOUR_USERNAME occurrence with the Linux account that owns $HOME/gnoland-topaz.

[Unit] Description=Gnoland Topaz full node After=network-online.target Wants=network-online.target [Service] Type=simple User=YOUR_USERNAME Group=YOUR_USERNAME WorkingDirectory=/home/YOUR_USERNAME/gnoland-topaz Environment=GNOROOT=/home/YOUR_USERNAME/gno ExecStart=/usr/local/bin/gnoland start \ --chainid topaz-1 \ --genesis /home/YOUR_USERNAME/gnoland-topaz/data/genesis.json \ --data-dir /home/YOUR_USERNAME/gnoland-topaz/data \ --gnoroot-dir /home/YOUR_USERNAME/gno \ --skip-genesis-sig-verification \ --log-level info Restart=on-failure RestartSec=5 LimitNOFILE=65535 NoNewPrivileges=true PrivateTmp=true [Install] WantedBy=multi-user.target

Save the unit as /etc/systemd/system/gnoland.service, then:

sudo systemd-analyze verify /etc/systemd/system/gnoland.service sudo systemctl daemon-reload sudo systemctl enable --now gnoland.service

7. Verify sync and identity

systemctl is-active gnoland.service systemctl is-enabled gnoland.service curl -fsS http://127.0.0.1:26657/status | jq '.result | { network: .node_info.network, height: .sync_info.latest_block_height, catching_up: .sync_info.catching_up, validator_address: .validator_info.address, voting_power: .validator_info.voting_power }' curl -fsS https://rpc.topaz.testnets.gno.land/status \ | jq -r '.result.sync_info.latest_block_height' curl -fsS http://127.0.0.1:26657/net_info \ | jq '.result.n_peers'

The local chain must be topaz-1, height must advance, and a non-signing full node should report voting power 0.

AppHash mismatch warning

Topaz can currently crash with an AppHash mismatch tracked in gnolang/gno#6011. Preserve logs and the old db/ + wal/, then restore only those directories from a known healthy backup or verified snapshot. Do not replace secrets/, configuration, genesis, or validator signer state. Do not deploy an unreviewed patch to a production validator.