# Useful commands

## Information

```
# check the blocks
0gchaind status 2>&1 | jq ."SyncInfo"."latest_block_height"

# check the logs
journalctl -u 0gchaind -f -o cat

# check status
curl localhost:26657/status

# check balance
0gchaind q bank balances <address>

# check the validator pubkey
0gchaind tendermint show-validator

# check the validator
0gchaind query staking validator <valoper_address>
0gchaind query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq

# check TX_HASH information
0gchaind query tx <TX_HASH>

# network parameters
0gchaind q staking params
0gchaind q slashing params

# check how many blocks are missed by the validator and from which block is active
0gchaind q slashing signing-info $(0gchaind tendermint show-validator)

# find out the validator creation transaction (replace your valoper_address)
0gchaind query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r

# view active set
0gchaind q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

# view inactive set
0gchaind q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl
```

## Transactions

```
# collect rewards from all validators to whom delegated (no commission)
0gchaind tx distribution withdraw-all-rewards --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# collect rewards from a separate validator or rewards + commission from your own validator
0gchaind tx distribution withdraw-rewards <valoper_address> --from <name_wallet> --commission --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# delegate yourself into the steak some more (so 1 coin is sent)
0gchaind tx staking delegate <valoper_address> 1000000unls --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# redelegation to another validator
0gchaind tx staking redelegate <src-validator-addr> <dst-validator-addr> 1000000unls --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# unbond 
0gchaind tx staking unbond <addr_valoper> 1000000uqsr --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# send coins to another address
0gchaind tx bank send <name_wallet> <address> 1000000uqsr --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# get out of jail
0gchaind tx slashing unjail --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 
```

## Working with wallets

```
# display wallet list
0gchaind keys list

# show account key
0gchaind keys show <name_wallet> --bech acc

# show validator key
0gchaind keys show <name_wallet> --bech val

# show consensus key
0gchaind keys show <name_wallet> --bech cons

# show all supported addresses
0gchaind debug addr <wallet_addr>

# show private key
0gchaind keys export <name_wallet> --unarmored-hex --unsafe

# requesting an account
0gchaind q auth account $(nolusd keys show <name_wallet> -a) -o text

# delete wallet
0gchaind keys delete <name_wallet>
```

## Delete node

```
sudo systemctl stop 0gchaind
sudo systemctl disable 0gchaind
rm /etc/systemd/system/0gchaind.service
sudo systemctl daemon-reload
cd $HOME
rm -rf 0g-chain
rm -rf .0gchain
rm -rf $(which 0gchaind)
```

## Governance

```
# list of proposals
0gchaind q gov proposals

# to see the result of the vote
0gchaind q gov proposals --voter <ADDRESS>

# vote in favor of the proposal
0gchaind tx gov vote 1 yes --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# make a deposit on the proposal
0gchaind tx gov deposit 1 1000000uqsr --from <name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 

# create a proposal
0gchaind tx gov submit-proposal --title="Randomly reward" --description="Reward 10 testnet participants who completed more than 3 tasks" --type="Text" --deposit="11000000uqsr" --from=<name_wallet> --chain-id zgtendermint_16600-2 --gas=auto --gas-adjustment=1.6 -y 
```

## Peers and RPC

```
FOLDER=.nolus

# find out your peer
PORTR=$(grep -A 3 "\[p2p\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+") && \
echo $(quasarnoded tendermint show-node-id)@$(curl ifconfig.me)$PORTR

# get the RPC port
echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m"

# check the number of peers
PORT=
curl -s http://localhost:$PORT/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l

# moniker list of connected peers
curl -s http://localhost:$PORT/net_info | jq '.result.peers[].node_info.moniker'

# Check prevotes/precommits. Useful for updates
curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array' && \
curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].precommits_bit_array'

# check prevote of your validator
curl -s localhost:$PORT/consensus_state -s | grep $(curl -s localhost:26657/status | jq -r .result.validator_info.address[:12])
```


---

# 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://service.block-pro.net/testnet/0g/useful-commands.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.
