# Cheat Sheet

## Key management

#### Add new key

```
blockxd keys add $WALLET
```

#### Recover existing key

```
blockxd keys add $WALLET --recover
```

#### List all keys

```
blockxd keys list
```

#### Delete key

```
blockxd keys delete $WALLET
```

#### Export key to the file

```
blockxd keys export $WALLET
```

#### Import key from the file

```
blockxd keys import $WALLET wallet.backup
```

#### Query wallet balance

```
blockxd q bank balances $(quicksilverd keys show $WALLET -a)
```

***

## Validator management

{% hint style="info" %}
Please make sure you have adjusted **moniker**, **identity and** **details** to match your values.
{% endhint %}

#### Create new validator

```
blockxd tx staking create-validator \
--amount=1000000000000000000abcx \
--moniker="YOUR MONIKER" \
--pubkey=$(blockxd tendermint show-validator) \
--identity="IDENTITY KEYBASE" \
--details="DETAILS VALIDATOR" \
--website="LINK WEBSITE" \
--security-contact=CONTACT \
--chain-id=blockx_100-1 \
--commission-rate=0.07 \
--commission-max-rate=0.20 \
--commission-max-change-rate=0.07 \
--min-self-delegation=1 \
--from=wallet \
--gas="1000000" \
--gas-prices="10000000000abcx"
```

#### Edit existing validator

```
blockxd tx staking edit-validator \
--new-moniker="YOUR MONIKER" \
--identity="IDENTITY KEYBASE" \
--details="DETAILS VALIDATOR" \
--website="LINK WEBSITE" \
--security-contact=CONTACT \
--chain-id=blockx_100-1 \
--commission-rate=0.07 \
--from=wallet \
--gas="1000000" \
--gas-prices="10000000000abcx"
```

#### Unjail validator

```
blockxd tx slashing unjail --broadcast-mode=block --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Jail reason

```
blockxd q slashing signing-info $(blockxd tendermint show-validator)
```

#### List all active validators

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

#### View validator details

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

***

## Token management

#### Withdraw rewards from all validators

```
blockxd tx distribution withdraw-all-rewards --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Withdraw commission and rewards from your validator

```
blockxd tx distribution withdraw-rewards $(blockxd keys show wallet --bech val -a) --commission --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Delegate tokens to yourself

```
blockxd tx staking delegate $(blockxd keys show wallet --bech val -a) 1000000000000000000abcx --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Delegate tokens to validator

```
blockxd tx staking delegate  1000000000000000000abcx --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Redelegate tokens to another validator

```
blockxd tx staking redelegate $(blockxd keys show wallet --bech val -a)  1000000000000000000abcx --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Unbond tokens from your validator

```
blockxd tx staking unbond $(blockxd keys show wallet --bech val -a) 1000000000000000000abcx --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Send tokens to the wallet

```
blockxd tx bank send wallet  1000000000000000000abcx --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

***

## Governance

#### List all proposals

```
blockxd query gov proposals
```

#### View proposal by id

```
blockxd query gov proposal 1
```

#### Vote 'Yes'

```
blockxd tx gov vote 1 yes --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Vote 'No'

```
blockxd tx gov vote 1 no --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Vote 'Abstain'

```
blockxd tx gov vote 1 abstain --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

#### Vote 'NoWithVeto'

```
blockxd tx gov vote 1 nowithveto --from wallet --chain-id blockx_100-1 --gas="1000000" --gas-prices="30000000000abcx"
```

***

## Utility

#### Update ports

```
CUSTOM_PORT=22
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/.blockxd/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 = \"127.0.0.1:8545\"%address = \"0.0.0.0:${CUSTOM_PORT}545\"%; s%^ws-address = \"127.0.0.1:8546\"%ws-address = \"0.0.0.0:${CUSTOM_PORT}546\"%" $HOME/.blockxd/config/app.toml
```

#### Update Indexer

**Disable indexer**

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

**Enable indexer**

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

***

## 🚨 Maintenance

#### Get validator info

```
blockxd status 2>&1 | jq .ValidatorInfo
```

#### Get sync info

```
blockxd status 2>&1 | jq .SyncInfo
```

#### Get node peer

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

#### Check if validator key is correct

```
[[ $(blockxd q staking validator $(blockxd keys show wallet --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(stchaind 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:26657/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}'
```

#### Reset chain data

```
blockxd tendermint unsafe-reset-all --keep-addr-book --home $HOME/.sge --keep-addr-book
```

#### Remove node

{% hint style="danger" %}
Please, before proceeding with the next step! All chain data will be lost! Make sure you have backed up your **priv\_validator\_key.json** !
{% endhint %}

```
sudo systemctl stop blockxd && \
sudo systemctl disable blockxd && \
rm /etc/systemd/system/blockxd.service && \
sudo systemctl daemon-reload && \
cd $HOME && \
rm -rf .blockxd && \
rm -rf $(which blockxd)
```

***

## Service Management

#### Reload service configuration

```
sudo systemctl daemon-reload
```

#### Enable service

```
sudo systemctl enable blockxd
```

#### Disable service

```
sudo systemctl disable blockxd
```

#### Start service

```
sudo systemctl start blockxd
```

#### Stop service

```
sudo systemctl stop blockxd
```

#### Restart service

```
sudo systemctl restart blockxd
```

#### Check service status

```
sudo systemctl status blockxd
```

#### Check service logs

```
sudo journalctl -u blockxd-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.logosnodos.online/mainnet-node/blockx/cheat-sheet.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.
