Useful commands

Useful set of commands for node operators. From key management to chain governance.

🔑 Key management

Add new key

pylonsd keys add wallet

Recover existing key

pylonsd keys add wallet --recover

List all keys

pylonsd keys list

Delete key

pylonsd keys delete wallet

Export key to the file

pylonsd keys export wallet

Import key from the file

pylonsd keys import wallet wallet.backup

Query wallet balance

pylonsd q bank balances $(pylonsd keys show wallet -a)

👷 Validator management

Please make sure you have adjusted moniker, identity, details and website to match your values.

Create new validator

pylonsd tx staking create-validator \
--amount=1000000apylons \
--pubkey=$(pylonsd tendermint show-validator) \
--moniker="YOUR_MONIKER_NAME" \
--identity="YOUR_KEYBASE_ID" \
--details="YOUR_DETAILS" \
--website="YOUR_WEBSITE_URL" \
--chain-id=reb_1111-1 \
--commission-rate=0.05 \
--commission-max-rate=0.20 \
--commission-max-change-rate=0.01 \
--min-self-delegation=1 \
--from=wallet \
--gas-adjustment=1.4 \
--gas=auto \
--gas-prices=0apylons \
-y

Edit existing validator

pylonsd tx staking edit-validator \
--moniker="YOUR_MONIKER_NAME" \
--identity="YOUR_KEYBASE_ID" \
--details="YOUR_DETAILS" \
--website="YOUR_WEBSITE_URL"
--chain-id=reb_1111-1 \
--commission-rate=0.05 \
--from=wallet \
--gas-adjustment=1.4 \
--gas=auto \
--gas-prices=0apylons \
-y

Unjail validator

pylonsd tx slashing unjail --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Jail reason

pylonsd query slashing signing-info $(pylonsd tendermint show-validator)

List all active validators

pylonsd q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl

List all inactive validators

pylonsd q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl

View validator details

pylonsd q staking validator $(pylonsd keys show wallet --bech val -a)

💲 Token management

Withdraw rewards from all validators

pylonsd tx distribution withdraw-all-rewards --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Withdraw commission and rewards from your validator

pylonsd tx distribution withdraw-rewards $(pylonsd keys show wallet --bech val -a) --commission --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Delegate tokens to yourself

pylonsd tx staking delegate $(pylonsd keys show wallet --bech val -a) 1000000apylons --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Delegate tokens to validator

pylonsd tx staking delegate <TO_VALOPER_ADDRESS> 1000000apylons --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Redelegate tokens to another validator

pylonsd tx staking redelegate $(pylonsd keys show wallet --bech val -a) <TO_VALOPER_ADDRESS> 1000000apylons --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Unbond tokens from your validator

pylonsd tx staking unbond $(pylonsd keys show wallet --bech val -a) 1000000apylons --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Send tokens to the wallet

pylonsd tx bank send wallet <TO_WALLET_ADDRESS> 1000000apylons --from wallet --chain-id reb_1111-1

🗳 Governance

List all proposals

pylonsd query gov proposals

View proposal by id

pylonsd query gov proposal 1

Vote 'Yes'

pylonsd tx gov vote 1 yes --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Vote 'No'

pylonsd tx gov vote 1 no --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Vote 'Abstain'

pylonsd tx gov vote 1 abstain --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

Vote 'NoWithVeto'

pylonsd tx gov vote 1 nowithveto --from wallet --chain-id reb_1111-1 --gas-adjustment 1.4 --gas auto --gas-prices 0apylons -y

⚡️ Utility

Update ports

CUSTOM_PORT=10
sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${CUSTOM_PORT}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${CUSTOM_PORT}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${CUSTOM_PORT}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${CUSTOM_PORT}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${CUSTOM_PORT}660\"%" $HOME/.pylons/config/config.toml
sed -i -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${CUSTOM_PORT}317\"%; s%^address = \":8080\"%address = \":${CUSTOM_PORT}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${CUSTOM_PORT}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${CUSTOM_PORT}091\"%" $HOME/.pylons/config/app.toml

Update Indexer

Disable indexer

sed -i -e 's|^indexer *=.*|indexer = "null"|' $HOME/.pylons/config/config.toml

Enable indexer

sed -i -e 's|^indexer *=.*|indexer = "kv"|' $HOME/.pylons/config/config.toml

Update pruning

sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "19"|' \
  $HOME/.pylons/config/app.toml

🚨 Maintenance

Get validator info

pylonsd status 2>&1 | jq .ValidatorInfo

Get sync info

pylonsd status 2>&1 | jq .SyncInfo

Get node peer

echo $(pylonsd tendermint show-node-id)'@'$(curl -s ifconfig.me)':'$(cat $HOME/.pylons/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')

Check if validator key is correct

[[ $(pylonsd q staking validator $(pylonsd keys show wallet --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(pylonsd status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "\n\e[1m\e[32mTrue\e[0m\n" || echo -e "\n\e[1m\e[31mFalse\e[0m\n"

Get live peers

curl -sS http://localhost:21657/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}'

Set minimum gas price

sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0apylons\"/" $HOME/.pylons/config/app.toml

Enable prometheus

sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.pylons/config/config.toml

Reset chain data

pylonsd tendermint unsafe-reset-all --home $HOME/.pylons --keep-addr-book

Remove node

Please, before proceeding with the next step! All chain data will be lost! Make sure you have backed up your priv_validator_key.json!

cd $HOME
sudo systemctl stop pylonsd
sudo systemctl disable pylonsd
sudo rm /etc/systemd/system/pylonsd.service
sudo systemctl daemon-reload
rm -f $(which pylonsd)
rm -rf $HOME/.pylons
rm -rf $HOME/pylons

⚙️ Service Management

Reload service configuration

sudo systemctl daemon-reload

Enable service

sudo systemctl enable pylonsd

Disable service

sudo systemctl disable pylonsd

Start service

sudo systemctl start pylonsd

Stop service

sudo systemctl stop pylonsd

Restart service

sudo systemctl restart pylonsd

Check service status

sudo systemctl status pylonsd

Check service logs

sudo journalctl -u pylonsd -f --no-hostname -o cat

Last updated