Sitemap

Worrell | Validator Node Setup Guide

5 min readOct 15, 2026

--

Press enter or click to view image in full size

Worrell is a sovereign proof-of-stake (PoS) blockchain built with Ignite CLI and Cosmos SDK.
Fast, low-fee payments and open infrastructure for the energy economy — secured by staking and governed on-chain.

Site | Documents | X

Before interacting with any project, please DYOR about the project.

Server Requirements

4CPU, 8RAM, 200GB space.
In the future it will require more space, but for testnet it’s enough.

Prerequisite

1) Update the local package repository database & upgrade installed packages to their latest versions based on the updated package database:

apt update && apt upgrade -y

2) Install packages:

apt install curl gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev build-essential git wget jq make -y

3) Install Go:

ver="1.26.1" && \
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \
sudo rm -rf /usr/local/go && \
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \
rm "go$ver.linux-amd64.tar.gz" && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \
source $HOME/.bash_profile && \
go version

Installation

1) Install the binary:

git clone https://github.com/worrellchain/worrell && \
cd worrell && \
git checkout v0.1.3 && \
make install

2) Check version:

worrelld version --long | grep -e version -e commit

Output should be:

commit: a914f444004df7514ee909c4fa2e66a942059ca6
version:
v0.1.3

3) Configure the binary:

worrelld config set client chain-id worrell-testnet-1
worrelld config set client node tcp://localhost:26657
worrelld config set client keyring-backend os

4) Initialize node:

worrelld init <YOUR_NODE_ID> --chain-id worrell-testnet-1

5) Download genesis file:

wget -O $HOME/.worrell/config/genesis.json "https://raw.githubusercontent.com/worrellchain/networks/refs/heads/main/worrell-testnet-1/genesis.json"

6) Check genesis:

sha256sum ~/.worrell/config/genesis.json

Output should be:

a81c507b12ba0678c3172394ff4bb03e1c3db60050cc5568c127a24ec19378fd /root/.worrell/config/genesis.json

7) Check validator state:

cd && cat .worrell/data/priv_validator_state.json

Should be at the beginning:

{
"height": "0",
"round": 0,
"step": 0
}

If not, run:

worrelld tendermint unsafe-reset-all --home $HOME/.worrell --keep-addr-book

8) Setup minimum gas prices in app.toml file:

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025uworrell\"/;" $HOME/.worrell/config/app.toml

9) Setup external address:

external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.worrell/config/config.toml

10) Add peers:

SEEDS=""
PEERS="206b245e90ee3371c5956adab7a46d608455d5f2@202.61.201.53:27656, bb9164c1bd9ed9ff2c0fd9e09b23285698e231de@164.68.98.186:26656"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.worrell/config/config.toml

11) Add maximum inbound/outbound peers:

sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 40/g' $HOME/.worrell/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 10/g' $HOME/.worrell/config/config.toml

12) Add “bad” peers filtration:

sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.worrell/config/config.toml

13) Download Addr book:

wget -O $HOME/.worrell/config/addrbook.json "https://crptcpchk.com/nodes/worrell/addrbook.json"

14) Add pruning:

pruning="custom"
pruning_keep_recent="1000"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.worrell/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.worrell/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.worrell/config/app.toml

15) Create service file:

tee /etc/systemd/system/worrelld.service > /dev/null <<EOF
[Unit]
Description=Worrell Validator Node
After=network-online.target

[Service]
User=$USER
ExecStart=$(which worrelld) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

State sync (Optional)

https://xplr.crptcpchk.com/worrell/statesync

SNAP_RPC=https://worrell-rpc.crptcpchk.com:443

LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)

echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH

sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.worrell/config/config.toml

16) Reload daemon, enable and start worrelld.service:

systemctl daemon-reload && \
systemctl enable worrelld && \
systemctl start worrelld && \
systemctl status worrelld

If everything went ok, should look like this:

Press enter or click to view image in full size

17) Check logs:

journalctl -u worrelld -f -o cat

18) Wait for synchronization.

Run:

worrelld status | jq '.sync_info'

Look for “catching_up”: false.

Get crptcpchk’s stories in your inbox

Join Medium for free to get updates from this writer.

19) Create wallet:
Change <WALLET_NAME> with Your wallet name.

worrelld keys add <WALLET_NAME>

Enter password (passphrase).
Save mnemonic and wallet address.

Register validator

1) Use faucet, add wallet from previous step:

curl -X POST http://164.68.98.186:4500 \
-H "Content-Type: application/json" \
-d '{"address":"worrell1..."}'

2) Retrieve your pubkey:

worrelld comet show-validator

3) Create validator.json file:

nano $HOME/.worrell/validator.json

Add your config info:

{
"pubkey": {<YOUR_PUBKEY_FROM_STEP_4>},
"amount": "1000000uworrell",
"moniker": "<YOUR_MONIKER>",
"identity": "...",
"website": "...",
"security": "...",
"details": "...",
"commission-rate": "0.11",
"commission-max-rate": "0.20",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}

Save and exit:

Ctrl+X
Y
Enter

6) Create validator:
Change <WALLET_NAME> with the name of you wallet.

worrelld tx staking create-validator $HOME/.worrell/validator.json --from <WALLET_NAME> --chain-id worrell-testnet-1 --gas auto --fees 25000uworrell -y

Useful commands

Check logs:

journalctl -u worrelld -f -o cat

Check balance:

worrelld q bank balances <WALLET_ADDRESS>

Retrieve your pubkey:

worrelld comet show-validator

Query delegations made by an address:

worrelld query staking delegations <DELEGATOR_ADDRESS>

Validator details:

worrelld query staking validator <YOUR_VALOPER_ADDRESS>

Unjail validator:

worrelld tx slashing unjail --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Jail reason (how many blocks missed):

worrelld q slashing signing-info $(latandad tendermint show-validator)

Edit validator details:

worrelld tx staking edit-validator --moniker <YOUR_MONIKER> --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

List active validators:

worrelld q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

List inactive validators:

worrelld q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

General:

Check port status:

curl localhost:26657/status | jq

Staking parameters:

worrelld q staking params

Slashing parameters:

worrelld q slashing params

Transactions:

Get transaction details by hash:

worrelld query tx <TX_HASH>

Delegate to your validator:

worrelld tx staking delegate <YOUR_VALOPER_ADDRESS> 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Withdraw reward from all delegations by a wallet:

worrelld tx distribution withdraw-all-rewards --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Withdraw rewards and commission:

worrelld tx distribution withdraw-rewards <YOUR_VALOPER_ADDRESS> --from <WALLET_NAME> --commission --gas auto --fees 25000uworrell -y

Redelegate:

worrelld tx staking redelegate <CURRENT_VALIDATOR> <DESTINATION_VALIDATOR> 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Unbond:

worrelld tx staking unbond <YOUR_VALOPER_ADDRESS> 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Send tokens:

worrelld tx bank send <WALLET_NAME> <ADDRESS> 1000000uworrell --gas auto --fees 25000uworrell -y

Wallets:

List all keys:

worrelld keys list

Create wallet:

worrelld keys add <WALLET_NAME>

Recover wallet:

worrelld keys add <WALLET_NAME> --recover

Delete wallet:

worrelld keys delete <WALLET_NAME>

Show account key:

worrelld keys show <WALLET_NAME> --bech acc

Show validator key:

worrelld keys show <WALLET_NAME> --bech val

Show consensus key:

worrelld show <WALLET_NAME> --bech cons

Show account data:

worrelld q auth account $(latandad keys show <WALLET_NAME> -a) -o text

Governance

List of proposals:

worrelld q gov proposals

Vote “Yes”:

worrelld tx gov vote 1 yes --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Deposit into proposal:

worrelld tx gov deposit 1 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -y

Check voting result:

worrelld q gov proposals --voter <ADDRESS>

Create proposal:

worrelld tx gov submit-proposal \
--title="Reward crptcpchk for his setup guide. =)" \
--description="He's a good lad." \
--type="Text" \
--deposit="1000000uworrell" \
--from=<WALLET_NAME> \
--gas-prices 25000uworrell \
--gas=auto

Delete Node

systemctl stop worrelld && \
systemctl disable worrelld && \
rm /etc/systemd/system/worrelld.service && \
systemctl daemon-reload && \
rm -f $(which worrelld) && \
rm -rf $HOME/.worrell $HOME/worrell

Links

Follow for more guides on nodes, drops and other useful stuff.

psi.crypto Discord: https://discord.gg/9kvtEQwtqJ

X: https://twitter.com/the01100011

Telegram: https://t.me/psicrypto

--

--

crptcpchk
crptcpchk

Written by crptcpchk

@RawBox Squad | Blockchain Validator