CLI Cheatsheet
Key management
Add new key
structsd keys add wallet
Recover existing key
structsd keys add wallet --recover
List all keys
structsd keys list
Delete key
structsd keys delete wallet
Export key to the file
structsd keys export wallet
Import key from the file
structsd keys import wallet wallet.backup
Wallet balance
structsd q bank balances $(structsd keys show wallet -a)
Token management
Withdraw rewards from all validators
structsd tx distribution withdraw-all-rewards --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Withdraw rewards and commissions from your validator
structsd tx distribution withdraw-rewards $(structsd keys show wallet --bech val -a) --commission --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Delegate tokens to yourself
structsd tx staking delegate $(structsd keys show wallet --bech val -a) 1000000ualpha --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Delegate tokens to validator
structsd tx staking delegate <TO_VALOPER_ADDRESS> 1000000ualpha --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Redelegate tokens to another validator
structsd tx staking redelegate $(structsd keys show wallet --bech val -a) <TO_VALOPER_ADDRESS> 1000000ualpha --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Unbond tokens from your validator
structsd tx staking unbond $(structsd keys show wallet --bech val -a) 1000000ualpha --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Send tokens to the wallet
structsd tx bank send wallet <TO_WALLET_ADDRESS> 1000000ualpha --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Validator management
Validator info
structsd status 2>&1 | jq .validator_info
Validator details
structsd q staking validator $(structsd keys show wallet --bech val -a)
Check if validator key is correct
[[ $(structsd q staking validator $(structsd keys show wallet --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(structsd 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"
List all active validators
structsd q staking validators -oj --limit=1000 | 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
structsd q staking validators -oj --limit=1000 | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl
Edit existing validator
structsd tx staking edit-validator \ --new-moniker "YOUR_MONIKER_NAME" \ --identity "YOUR_KEYBASE_ID" \ --details "YOUR_DETAILS" \ --website "YOUR_WEBSITE_URL" \ --security-contact "YOUR_EMAIL_ADDRESS" \ --chain-id structstestnet-101 \ --commission-rate 0.05 \ --from wallet \ --gas-adjustment 1.4 \ --gas auto \ --gas-prices 0ualpha \ -y
Jail reason
structsd query slashing signing-info $(structsd tendermint show-validator)
Unjail validator
structsd tx slashing unjail --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Governance
Create a new offer
structsd tx gov submit-proposal \ --title "" \ --description "" \ --deposit 1000000ualpha \ --type Text --from wallet \ --gas-adjustment 1.4 \ --gas auto \ --gas-prices 0ualpha \ -y
List all proposals
structsd query gov proposals
View proposal by ID
structsd query gov proposal 1
Vote “YES”
structsd tx gov vote 1 yes --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Vote “NO”
structsd tx gov vote 1 no --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Vote “ABSTAIN”
structsd tx gov vote 1 abstain --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Vote “NOWITHVETO”
structsd tx gov vote 1 NoWithVeto --from wallet --chain-id structstestnet-101 --gas-adjustment 1.4 --gas auto --gas-prices 0ualpha -y
Maintenance
Get sync info
structsd status 2>&1 | jq .sync_info
Get node peer
echo $(structsd tendermint show-node-id)'@'$(wget -qO- eth0.me)':'$(cat $HOME/.structs/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')
Get live peers
curl -sS http://localhost:14457/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}'
Enable Prometheus
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.structs/config/config.toml
Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0ualpha\"|" $HOME/.structs/config/app.toml
Disable indexer
sed -i -e 's|^indexer *=.*|indexer = "null"|' $HOME/.structs/config/config.toml
Enable indexer
sed -i -e 's|^indexer *=.*|indexer = "kv"|' $HOME/.structs/config/config.toml
Update pruning
sed -i -e 's|^pruning *=.*|pruning = "custom"|' $HOME/.structs/config/app.tomlsed -i -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "100"|' $HOME/.structs/config/app.tomlsed -i -e 's|^pruning-interval *=.*|pruning-interval = "10"|' $HOME/.structs/config/app.toml
Filter peers and max peers
sed -i -e 's|^filter_peers *=.*|filter_peers = "true"|' $HOME/.structs/config/config.tomlsed -i -e 's|^max_num_inbound_peers *=.*|max_num_inbound_peers = "50"|' $HOME/.structs/config/config.tomlsed -i -e 's|^max_num_outbound_peers *=.*|max_num_outbound_peers = "20"|' $HOME/.structs/config/config.toml
Update ports
CUSTOM_PORT=144sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${CUSTOM_PORT}58\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${CUSTOM_PORT}57\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${CUSTOM_PORT}60\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${CUSTOM_PORT}56\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${CUSTOM_PORT}66\"%" $HOME/.structs/config/config.tomlsed -i -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${CUSTOM_PORT}17\"%; s%^address = \":8080\"%address = \":${CUSTOM_PORT}80\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${CUSTOM_PORT}90\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${CUSTOM_PORT}91\"%" $HOME/.structs/config/app.toml
Reset chain data
structsd tendermint unsafe-reset-all --keep-addr-book --home $HOME/.structs
Delete node
sudo systemctl stop structsdsudo systemctl disable structsdsudo rm -rf /etc/systemd/system/structsd.servicesudo systemctl daemon-reloadsudo rm -f $(which structsd)sudo rm -rf $HOME/.structssudo rm -rf $HOME/structsd
Service Management
Status service
sudo systemctl status structsd
Start service
sudo systemctl start structsd
Stop service
sudo systemctl stop structsd
Restart service
sudo systemctl restart structsd
Logs service
sudo journalctl -u structsd -f --no-hostname -o cat
Reload service
sudo systemctl daemon-reload
Enable service
sudo systemctl enable structsd
Disable service
sudo systemctl disable structsd