Appearance
Running a validator
How to join the network as a validator, from an empty machine to a node signing blocks. Every value here was taken from node2, the network's second validator, which was onboarded with exactly this procedure.
Where something must come from the KriptoNyx team, it is marked [obtain from the team].
Before you start
Hardware. The reference node runs comfortably inside a 6 GB memory cap with LimitNOFILE=65535. Budget an SSD — syncing replays every block from genesis and is I/O-bound, not CPU-bound.
Ports. Only one has to be reachable from the internet:
| Port | Purpose | Exposure |
|---|---|---|
| 26656 | P2P — peers connect here | public |
| 26657 | Tendermint RPC | localhost only |
| 8545 | EVM JSON-RPC | localhost only |
| 9090 / 9091 | gRPC / gRPC-web | localhost only |
| 1317 | Cosmos REST API | disabled by default |
Keep 26657 and 8545 on localhost
A world-readable Tendermint RPC lets anyone query and spam your node. An open JSON-RPC is worse.
You will need the kriptonyxd binary and the network genesis.json[obtain from the team], plus enough KNYX to self-delegate. The commands below use jq, curl and sha256sum.
1. Install the binary
bash
sudo install -m 0755 kriptonyxd /usr/local/bin/kriptonyxd
kriptonyxd version --long | head -5Verify the checksum against the one the team publishes:
sha256 38de7b0e7e1b2c7140e54623c89e690b268df53a96f30cc20c0b8ba79d3bfc62
size 106 320 592 bytesCompare the checksum, not the version string
The current build reports empty name, version and commit fields, so kriptonyxd version prints nothing useful and web3_clientVersion returns "Version dev ()".
2. Create a dedicated user
Do not run the node as root.
bash
sudo useradd --system --home /var/lib/kriptonyx --shell /usr/sbin/nologin kriptonyx
sudo mkdir -p /var/lib/kriptonyx
sudo chown kriptonyx:kriptonyx /var/lib/kriptonyx
export KNYX_HOME=/var/lib/kriptonyx/.kriptonyxd
sudo -u kriptonyx kriptonyxd init "<your-moniker>" \
--chain-id kriptonyx_3009-1 --home "$KNYX_HOME"init writes a fresh genesis.json that is not the network's. Replace it.
3. Install genesis and verify it
bash
sudo -u kriptonyx cp genesis.json "$KNYX_HOME/config/genesis.json"
sha256sum "$KNYX_HOME/config/genesis.json"
# must be b737d821b535482bb20d6c5e95492c4260e715cccef7ddbd2cdc27d95c52dfddIf the hash differs, stop
You are about to sync a different chain. Get the correct file.
4. Configure peers and ports
In $KNYX_HOME/config/config.toml:
toml
persistent_peers = "25a97a8b3c96ab2380fdadfecd05d7fd01dec8cd@38.242.149.110:26656"
external_address = "<your-public-ip>:26656"
[rpc]
laddr = "tcp://127.0.0.1:26657" # localhost only
[p2p]
laddr = "tcp://0.0.0.0:26656" # must be reachableexternal_address must be the address other nodes can dial. Get it wrong and you will sync but no one will peer with you.
In $KNYX_HOME/config/app.toml:
toml
minimum-gas-prices = "0aknyx"
[api]
enable = false # Cosmos REST, off by default
[json-rpc]
enable = true
address = "127.0.0.1:8545"5. Run it under systemd
/etc/systemd/system/kriptonyx.service:
ini
[Unit]
Description=Kriptonyx Node (<your-moniker>)
After=network-online.target
Wants=network-online.target
[Service]
User=kriptonyx
Group=kriptonyx
ExecStart=/usr/local/bin/kriptonyxd start --home /var/lib/kriptonyx/.kriptonyxd --chain-id kriptonyx_3009-1
Restart=on-failure
RestartSec=5s
LimitNOFILE=65535
MemoryHigh=5G
MemoryMax=6G
OOMScoreAdjust=300
Nice=5
IOSchedulingClass=best-effort
IOSchedulingPriority=6
[Install]
WantedBy=multi-user.targetbash
sudo systemctl daemon-reload
sudo systemctl enable --now kriptonyx
journalctl -u kriptonyx -f6. Wait for the sync to finish
Do not register before this reads false
A validator that is registered but still catching up misses blocks and gets jailed for downtime.
bash
curl -s localhost:26657/status \
| jq '.result.sync_info | {latest_block_height, catching_up}'json
{ "latest_block_height": "6177961", "catching_up": false }node2 replayed from genesis at roughly 20 blocks per second, so expect hours, not minutes, on a chain past six million blocks.
7. Fund the validator key
bash
# add --recover to import an existing mnemonic
sudo -u kriptonyx kriptonyxd keys add validator --home "$KNYX_HOME"
sudo -u kriptonyx kriptonyxd keys show validator -a --home "$KNYX_HOME"Back up the mnemonic offline, now
It cannot be recovered later.
Send that address enough KNYX for the self-delegation plus gas. Amounts are in aknyx: 9 900 000 KNYX = 9900000000000000000000000aknyx.
8. Register as a validator
bash
sudo -u kriptonyx kriptonyxd tx staking create-validator \
--home "$KNYX_HOME" \
--chain-id kriptonyx_3009-1 \
--moniker "<your-moniker>" \
--amount 9900000000000000000000000aknyx \
--pubkey "$(kriptonyxd tendermint show-validator --home "$KNYX_HOME")" \
--commission-rate 0.10 \
--commission-max-rate 0.20 \
--commission-max-change-rate 0.05 \
--min-self-delegation 1 \
--gas auto --gas-adjustment 1.4 \
--from validatorTwo values are immutable after registration
--commission-max-rate and --commission-max-change-rate can never be changed. The rate itself can be raised later, but never above the max, and never by more than the max-change in a day. Choose them deliberately.
9. Verify you are actually signing
Being in the validator set is not the same as participating.
In the set, with power:
bash
curl -s localhost:26657/status | jq '.result.validator_info'json
{ "address": "1DDEA9008CD995B73234CA5BAC84FB596810BC0A", "voting_power": "9900000" }voting_power: "0" means registered but not bonded — usually insufficient stake to displace an existing validator, or still jailed.
Signing blocks — the check that actually matters:
bash
ADDR=$(curl -s localhost:26657/status | jq -r .result.validator_info.address)
H=$(curl -s localhost:26657/status | jq -r .result.sync_info.latest_block_height)
for i in 0 1 2 3 4; do
curl -s "localhost:26657/commit?height=$((H-i))" \
| jq --arg a "$ADDR" '.result.signed_header.commit.signatures
| map(select(.validator_address==$a and .signature!=null)) | length'
doneFive 1s means you signed the last five blocks. Any 0 means you are in the set but missing blocks — investigate before you are jailed.
Next
See Operating a node for jailing, unbonding, backups and upgrades.