logo
X PrimeFlow

Manual node installation

Official operator documentationProject websiteSource repository

Network: Testnet

Chain ID: test-13

Guide review: 2026-07-14 ยท 4 source references

Go version: 1.25+

Prerequisites from project metadata

sudo apt-get update
sudo apt-get install -y curl ca-certificates git make build-essential jq

Reviewed project installation steps

1. Clone and verify the pinned Test13 source commit

set -euo pipefail
SOURCE_DIR="$HOME/gno-test13-dcc5ca0"
EXPECTED_COMMIT=dcc5ca06130d571117f14dd4f2faef876ec67550
test ! -e "$SOURCE_DIR" || { echo "Stop: $SOURCE_DIR already exists; review it before continuing." >&2; exit 1; }
git clone --branch chain/test13 --depth 64 https://github.com/gnolang/gno.git "$SOURCE_DIR"
cd "$SOURCE_DIR"
git checkout --detach "$EXPECTED_COMMIT"
ACTUAL_COMMIT=$(git rev-parse HEAD)
test "$ACTUAL_COMMIT" = "$EXPECTED_COMMIT"

2. Build and install gnoland and gnokey from verified source

set -euo pipefail
cd "$HOME/gno-test13-dcc5ca0"
go version | grep -E 'go1\.(2[5-9]|[3-9][0-9])'
make -C gno.land install.gnoland install.gnokey
GOBIN=$(go env GOPATH)/bin
test -x "$GOBIN/gnoland"
test -x "$GOBIN/gnokey"
sudo install -m 0755 "$GOBIN/gnoland" /usr/local/bin/gnoland
sudo install -m 0755 "$GOBIN/gnokey" /usr/local/bin/gnokey
/usr/local/bin/gnoland version
/usr/local/bin/gnokey version

3. Checksum and install the official Test13 genesis

set -euo pipefail
id -u gnoland >/dev/null 2>&1 || sudo useradd --system --home-dir /var/lib/gnoland --create-home --shell /usr/sbin/nologin gnoland
sudo install -d -o gnoland -g gnoland -m 0750 /var/lib/gnoland
GENESIS=/tmp/gno-test13-genesis.json
test ! -e "$GENESIS" || { echo "Stop: $GENESIS already exists; review it before continuing." >&2; exit 1; }
curl --fail --location --retry 3 \
  --output "$GENESIS" \
  https://github.com/gnolang/gno/releases/download/chain/test13/genesis.json
printf '%s  %s\n' '56f56e135174feff9f93283d5ec7e4ec955cd5155108aff5009d4fd51c5adaf2' "$GENESIS" | sha256sum --check -
sudo install -o gnoland -g gnoland -m 0640 "$GENESIS" /var/lib/gnoland/genesis.json

4. Initialize keys and apply the official Test13 network parameters

set -euo pipefail
CONFIG=/var/lib/gnoland/config/config.toml
PEERS='g142k7zc2qym3c0u6jmkf6rv26llgr2f4nakmlmt@sentry-1.test13.testnets.gno.land:26656,g1lxkf9gn7kddrr26c640ww5wg3ezsm22we8cjpc@sentry-2.test13.testnets.gno.land:26656'
sudo -u gnoland /usr/local/bin/gnoland config init --config-path "$CONFIG"
sudo -u gnoland /usr/local/bin/gnoland secrets init --data-dir /var/lib/gnoland/secrets
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" p2p.persistent_peers "$PEERS"
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" application.prune_strategy syncable
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" consensus.timeout_commit 3s
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" consensus.peer_gossip_sleep_duration 10ms
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" p2p.flush_throttle_timeout 10ms
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" p2p.pex true
sudo -u gnoland /usr/local/bin/gnoland config set --config-path "$CONFIG" moniker YOUR_NODE_NAME

5. Start Test13 under a hardened systemd service

sudo tee /etc/systemd/system/gnoland-test13.service >/dev/null <<'EOF'
[Unit]
Description=Gno.land Test13 full node
Documentation=https://github.com/gnolang/gno/blob/chain/test13/misc/deployments/test13.gno.land/VALIDATOR.md
After=network-online.target
Wants=network-online.target

[Service]
User=gnoland
Group=gnoland
WorkingDirectory=/var/lib/gnoland
ExecStart=/usr/local/bin/gnoland start --data-dir=/var/lib/gnoland --chainid=test-13 --genesis=/var/lib/gnoland/genesis.json --skip-genesis-sig-verification --log-level=info
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/gnoland

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now gnoland-test13
sudo systemctl status gnoland-test13 --no-pager

6. Verify the local Test13 chain ID

curl --fail --silent --show-error http://127.0.0.1:26657/status \
  | jq -e '.result.node_info.network == "test-13"'