Worrell | Validator Node Setup Guide
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.
Before interacting with any project, please DYOR about the project.
Support by delegating to my validator:
https://xplr.crptcpchk.com/worrell/staking/worrellvaloper1g0q5l96u5m8697c68gdecy7c7turfxgzprmpdk
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 -y2) 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 -y3) 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 versionInstallation
1) Install the binary:
git clone https://github.com/worrellchain/worrell && \
cd worrell && \
git checkout v0.1.3 && \
make install2) Check version:
worrelld version --long | grep -e version -e commitOutput 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 os4) Initialize node:
worrelld init <YOUR_NODE_ID> --chain-id worrell-testnet-15) 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.jsonOutput should be:
a81c507b12ba0678c3172394ff4bb03e1c3db60050cc5568c127a24ec19378fd /root/.worrell/config/genesis.json
7) Check validator state:
cd && cat .worrell/data/priv_validator_state.jsonShould be at the beginning:
{
"height": "0",
"round": 0,
"step": 0
}If not, run:
worrelld tendermint unsafe-reset-all --home $HOME/.worrell --keep-addr-book8) 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.toml9) 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.toml10) 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.toml11) 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.toml12) Add “bad” peers filtration:
sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.worrell/config/config.toml13) 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.toml15) 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
EOFState 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.toml16) Reload daemon, enable and start worrelld.service:
systemctl daemon-reload && \
systemctl enable worrelld && \
systemctl start worrelld && \
systemctl status worrelldIf everything went ok, should look like this:
17) Check logs:
journalctl -u worrelld -f -o cat18) 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-validator3) Create validator.json file:
nano $HOME/.worrell/validator.jsonAdd 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
Enter6) 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 -yUseful commands
Check logs:
journalctl -u worrelld -f -o catCheck balance:
worrelld q bank balances <WALLET_ADDRESS>Retrieve your pubkey:
worrelld comet show-validatorQuery 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 -yJail 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 -yList active validators:
worrelld q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nlList inactive validators:
worrelld q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nlGeneral:
Check port status:
curl localhost:26657/status | jqStaking parameters:
worrelld q staking paramsSlashing parameters:
worrelld q slashing paramsTransactions:
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 -yWithdraw reward from all delegations by a wallet:
worrelld tx distribution withdraw-all-rewards --from <WALLET_NAME> --gas auto --fees 25000uworrell -yWithdraw rewards and commission:
worrelld tx distribution withdraw-rewards <YOUR_VALOPER_ADDRESS> --from <WALLET_NAME> --commission --gas auto --fees 25000uworrell -yRedelegate:
worrelld tx staking redelegate <CURRENT_VALIDATOR> <DESTINATION_VALIDATOR> 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -yUnbond:
worrelld tx staking unbond <YOUR_VALOPER_ADDRESS> 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -ySend tokens:
worrelld tx bank send <WALLET_NAME> <ADDRESS> 1000000uworrell --gas auto --fees 25000uworrell -yWallets:
List all keys:
worrelld keys listCreate wallet:
worrelld keys add <WALLET_NAME>Recover wallet:
worrelld keys add <WALLET_NAME> --recoverDelete wallet:
worrelld keys delete <WALLET_NAME>Show account key:
worrelld keys show <WALLET_NAME> --bech accShow validator key:
worrelld keys show <WALLET_NAME> --bech valShow consensus key:
worrelld show <WALLET_NAME> --bech consShow account data:
worrelld q auth account $(latandad keys show <WALLET_NAME> -a) -o textGovernance
List of proposals:
worrelld q gov proposalsVote “Yes”:
worrelld tx gov vote 1 yes --from <WALLET_NAME> --gas auto --fees 25000uworrell -yDeposit into proposal:
worrelld tx gov deposit 1 1000000uworrell --from <WALLET_NAME> --gas auto --fees 25000uworrell -yCheck 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=autoDelete 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/worrellLinks
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








