# CLI Cheatsheet

<figure><img src="https://pbs.twimg.com/profile_images/1676089023797039104/twD1uiHk_400x400.jpg" alt="" width="188"><figcaption></figcaption></figure>

### Key Management

Add new key

```
selfchaind keys add wallet
```

Recover existing key

```
selfchaind keys add wallet --recover
```

List All key

```
selfchaind keys list
```

Delete key

```
selfchaind keys delete wallet
```

Export Key (save to wallet.backup)

```
selfchaind keys export wallet
```

Import key

```
selfchaind keys import wallet wallet.backup
```

Query Wallet Balance

```
selfchaind q bank balances $(selfchaind keys show wallet -a)
```

### Validator Management

Create Validator

```sh
selfchaind tx staking create-validator \
  --amount 1000000uself \
  --pubkey $(selfchaind tendermint show-validator) \
  --moniker "MONIKER" \
  --identity="YOUR_KEYBASE_ID" \
  --details="YOUR_DETAILS" \
  --website="YOUR_WEBSITE_URL" \
  --chain-id self-dev-1 \
  --commission-rate="0.05" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation "1" \
  --gas-prices="0.005uself" \
  --gas="auto" \
  --gas-adjustment="1.5" \
  --from wallet \
  -y
```

Edit Validator

```sh
selfchaind tx staking edit-validator \
--new-moniker="MONIKER" \
--identity="YOUR_KEYBASE_ID" \
--details="YOUR_DETAILS" \
--website="YOUR_WEBSITE_URL" \
--chain-id self-dev-1 \
--commission-rate=0.05 \
--gas-prices="0.005uself" \
--gas="auto" \
--gas-adjustment="1.5" \
--from wallet \
-y
```

Unjail Validator

```sh
selfchaind tx slashing unjail --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Signing Info

```sh
selfchaind query slashing signing-info $(selfchaind tendermint show-validator) 
```

List all active validators

```sh
selfchaind 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

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

View validators details

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

### Token Management

Withdraw rewards from all validators

```sh
selfchaind  tx distribution withdraw-all-rewards --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Withdraw comission and rewards from your validator

```sh
selfchaind tx distribution withdraw-rewards $(selfchaind keys show wallet --bech val -a) --commission --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Delegate to your validator

```sh
selfchaind tx staking delegate $(selfchaind keys show wallet --bech val -a) 1000000uself --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Delegate to other

```sh
selfchaind tx staking delegate TO_VALOPER_ADDRESS 1000000uself --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Redelegate your stake to other validators

```sh
selfchaind tx staking redelegate $(selfchaind keys show wallet --bech val -a) TO_VALOPER_ADDRESS 1000000uself --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Unbond stake

```sh
selfchaind tx staking unbond $(selfchaind keys show wallet --bech val -a) 1000000uself --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Send tokens

```sh
selfchaind tx bank send wallet TO_WALLET_ADDRESS 1000000uself --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

### Governance

List all proposals

<pre class="language-sh"><code class="lang-sh"><strong>selfchaind query gov proposals
</strong></code></pre>

Vote **YES / NO / ABSTAIN / NO\_WITH\_VETO**

```sh
selfchaind tx gov vote 1 yes --from wallet --chain-id self-dev-1 --gas-prices=0.005uself --gas-adjustment 1.5 --gas auto -y 
```

Create new text proposal

```sh
selfchaind tx gov submit-proposal \
--title="Title" \
--description="Description" \
--deposit=100000000uself \
--type="Text" \
--from=wallet \
--gas-prices 0.005uself\ 
--gas-adjustment 1.5 \
--gas auto \
-y 
```

### Utility

Set Indexer **NULL / KV**

```sh
sed -i 's|^indexer *=.*|indexer = "null"|' $HOME/.selfchain/config/config.toml
```

Set Custom Port

```sh
CUSTOM_PORT=13
sed -i.bak -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/.selfchain/config/config.toml
sed -i.bak -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\"%; s%^address = \"0.0.0.0:8545\"%address = \"0.0.0.0:${CUSTOM_PORT}545\"%; s%^ws-address = \"0.0.0.0:8546\"%ws-address = \"0.0.0.0:${CUSTOM_PORT}546\"%" $HOME/.selfchain/config/app.toml
```

Get Validator info

```sh
selfchaind status 2>&1 | jq .ValidatorInfo
```

Get denom info

```sh
selfchaind q bank denom-metadata -oj | jq
```

Get sync status

```sh
selfchaind status 2>&1 | jq .SyncInfo.catching_up
```

Get latest height

```sh
selfchaind status 2>&1 | jq .SyncInfo.latest_block_height
```

Reset Node

```sh
selfchaind tendermint unsafe-reset-all --home $HOME/.selfchain --keep-addr-book
```

Delete Node

```sh
sudo systemctl stop selfchaind && sudo systemctl disable selfchaind && sudo rm /etc/systemd/system/selfchaind.service && sudo systemctl daemon-reload && rm -rf $HOME/.selfchain && sudo rm -rf $(which selfchaind) 
```

### Services Management

```sh
# Reload Service
sudo systemctl daemon-reload

# Enable Service
sudo systemctl enable selfchaind

# Disable Service
sudo systemctl disable selfchaind

# Start Service
sudo systemctl start selfchaind

# Stop Service
sudo systemctl stop selfchaind

# Restart Service
sudo systemctl restart selfchaind

# Check Service Status
sudo systemctl status selfchaind

# Check Service Logs
sudo journalctl -u selfchaind -f --no-hostname -o cat
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.indonode.net/testnet/selfchain/cheat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
