Gno.land Onyx Testnet
Node guide
Manual setup for a fresh Linux node. Requires curl, git, jq and sha256sum. Commands are source-reviewed, not tested as a complete installation on a fresh host.
Source review: 2026-10-05 ยท recheck the upgrade ledger before installation
1. Download & verify binaries
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
test "$(uname -s)" = Linux
test "$(uname -m)" = x86_64
test ! -e "$GNO_WORK"
umask 077
mkdir -p "$GNO_WORK/bin"
cd "$GNO_WORK/bin"
curl --fail --location --output gnoland 'https://github.com/gnolang/gno/releases/download/v1.5.0/gnoland_linux_amd64'
curl --fail --location --output gnokey 'https://github.com/gnolang/gno/releases/download/v1.5.0/gnokey_linux_amd64'
printf '%s gnoland\n%s gnokey\n' '8dcff48228a881e398d238e3e14760c175c872fb164e85f21e5b4ee94a8b076d' '878eb6599161f491a37fdcbd4214477ad28d5d6208f8428f0bffcd3115cd35b4' | sha256sum --check
chmod 700 gnoland gnokey
./gnoland version
)2. Pin the Gno source / GNOROOT
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
test -x "$GNO_WORK/bin/gnoland"
test ! -e "$GNO_WORK/source"
git clone --branch 'v1.5.0' --depth 1 https://github.com/gnolang/gno.git "$GNO_WORK/source"
test "$(git -C "$GNO_WORK/source" rev-parse HEAD)" = e75fef82c02876a4df92ad6e325c5479b9532168
test -d "$GNO_WORK/source/gnovm/stdlibs"
)3. Genesis & SHA-256
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
test -d "$GNO_WORK/source/gnovm/stdlibs"
test ! -e "$GNO_WORK/genesis.json"
curl --fail --location --output "$GNO_WORK/genesis.json" 'https://github.com/gnolang/gno/releases/download/chain/onyx/genesis.json'
printf '%s %s\n' '4b006fd7ccdec052865accc84dd29b2b76f8b57b2560789a15eedaa88f0e26c5' "$GNO_WORK/genesis.json" | sha256sum --check
jq -e '.chain_id == "onyx-1"' "$GNO_WORK/genesis.json"
)4. Initialize fresh configuration and keys
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
test -s "$GNO_WORK/genesis.json"
test ! -e "$GNO_WORK/node"
umask 077
"$GNO_WORK/bin/gnoland" config init --config-path "$GNO_WORK/node/config/config.toml"
"$GNO_WORK/bin/gnoland" secrets init --data-dir "$GNO_WORK/node/secrets"
)5. Configure the network
Set your moniker and public P2P host in config.toml. The example keeps RPC on loopback. See the official sentry architecture for validator deployments.
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
test -s "$GNO_WORK/node/config/config.toml"
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" moniker 'my-gno-testnet'
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" p2p.persistent_peers 'g1x5mlj5ava0dw9vkf4j6admjlzswm6f06p44krn@seed-1.onyx.testnets.gno.land:26656,g1grq5zswt0dlwwe7clr4359w70k2ewgse0gcwck@seed-2.onyx.testnets.gno.land:26656'
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" application.prune_strategy syncable
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" consensus.timeout_commit 3s
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" consensus.peer_gossip_sleep_duration 10ms
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" p2p.flush_throttle_timeout 10ms
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" p2p.pex true
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" rpc.laddr tcp://127.0.0.1:26657
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" mempool.size 10000
"$GNO_WORK/bin/gnoland" config set --config-path "$GNO_WORK/node/config/config.toml" p2p.max_num_outbound_peers 40
)6. Start and synchronize
(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"
set -euo pipefail
GNO_WORK="$HOME/gno-testnet"
export GNOROOT="$GNO_WORK/source"
printf '%s %s\n' '4b006fd7ccdec052865accc84dd29b2b76f8b57b2560789a15eedaa88f0e26c5' "$GNO_WORK/genesis.json" | sha256sum --check
"$GNO_WORK/bin/gnoland" start --data-dir "$GNO_WORK/node" --chainid 'onyx-1' --genesis "$GNO_WORK/genesis.json" --skip-genesis-sig-verification
)7. Verify synchronization in another terminal
# Run in a second terminal while the node is running.
curl --fail --silent --show-error 'http://127.0.0.1:26657/status' | jq -e '.result | select(.node_info.network == "onyx-1") | {chain: .node_info.network, height: .sync_info.latest_block_height, block_time: .sync_info.latest_block_time, catching_up: .sync_info.catching_up}'Wallet & validator candidate
A synced node is not an active validator. Register a valoper profile with a funded operator account; GovDAO admission is a separate vote. Follow the official registration procedure.
Keep the recovery phrase offline. Wallet commands run on your machine; never paste keys or a recovery phrase into this page.
Create wallet locally
"$HOME/gno-testnet/bin/gnokey" add --home "$HOME/gno-testnet/wallets" operatorRestore wallet locally
"$HOME/gno-testnet/bin/gnokey" add --home "$HOME/gno-testnet/wallets" --recover operatorRegistered operators
"$HOME/gno-testnet/bin/gnoland" secrets get --data-dir "$HOME/gno-testnet/node/secrets" validator_key