Wallet operations
create a new keypair:
namadaw gen --alias $WALLET
restore existing wallet:
namada wallet derive --alias $WALLET --hd-path default
find your wallet address:
namadaw find --alias $WALLET
add some tokens using faucet:
https://faucet.heliax.click/
check balance:
namadac balance --owner $WALLET
check all known keys and addresses in the wallet:
namadaw list
send payment from one address to another:
namadac transfer --source $WALLET --target $\{WALLET\}1 --token NAAN --amount 1 --signing-keys $WALLET --memo $MEMO
remove keys:
namadaw remove --alias $WALLET --do-it
Staking
If you find this guide helpful, you can stake to our validator.
We would really appreciate it! 🚀
add a variable with the validator address:
VAL_ADDRESS="tnam1q8vhe85yc5ttt7mveds58gyqzavfwnn9eqhfxpgc" # address of validator you want to stake to
export the variable:
echo "export VAL_ADDRESS="$VAL_ADDRESS"" >> $HOME/.bash_profile \
source $HOME/.bash_profile
delegate tokens:
namadac bond --source $WALLET --validator $VAL_ADDRESS --amount 500 --memo $MEMO
check your user bonds:
namadac bonds --owner $WALLET
check all bonded nodes:
namadac bonded-stake
add stake:
namadac bond --source $WALLET --validator $VAL_ADDRESS --amount 500 --memo $MEMO
unbond the tokens:
namadac unbond --source $WALLET --validator $VAL_ADDRESS --amount 15 --memo $MEMO
wait for 6 epochs, then check when the unbonded tokens can be withdrawed:
namadac bonds --owner $WALLET
withdraw unbonded tokens:
namadac withdraw --source $WALLET --validator $VAL_ADDRESS --memo $MEMO
redelegate:
namadac redelegate --owner $WALLET --source-validator $VAL_ADDRESS --destination-validator <destination-validator-address> --amount 10 --memo $MEMO
claim rewards:
namadac claim-rewards --source $WALLET --validator $VAL_ADDRESS --memo $MEMO
query the pending reward tokens without claiming:
namadac rewards --source $WALLET --validator $VAL_ADDRESS
Multisign
generate key_1:
namadaw gen --alias $WALLET
generate key_2 and etc:
namadaw gen --alias $\{WALLET\}1
chech your public key:
namadaw find --alias $WALLET | awk '/Public key:/ {print $3}'
init non-multisig account (single signer):
namadac init-account --alias $\{WALLET\}-multisig --public-keys $WALLET --signing-keys $WALLET --memo $MEMO
init multisig account (at least 2 signers):
namadac init-account --alias $\{WALLET\}1-multisig --public-keys $WALLET,$\{WALLET\}1 --signing-keys $WALLET,$\{WALLET\}1 --threshold 2 --memo $MEMO
create a folder for a transaction:
mkdir tx_dumps
create transaction:
namadac transfer --source $\{WALLET\}1-multisig --target $\{WALLET\}1 --token NAAN --amount 10 --signing-keys $WALLET,$\{WALLET\}1 --dump-tx --output-folder-path tx_dumps --memo $MEMO
sign the transaction:
namadac sign-tx --tx-path "<path-to-.tx-file>" --signing-keys $WALLET,$\{WALLET\}1 --owner $\{WALLET\}1-multisig --memo $MEMO
save as a variable offline_signature 1:
export SIGNATURE_ONE="<signature-file-name>"
save as a variable offline_signature 2:
export SIGNATURE_TWO="<signature-2-file-name>"
submit transaction:
namadac tx --tx-path "<path-to-.tx-file>" --signatures $SIGNATURE_ONE,$SIGNATURE_TWO --owner $\{WALLET\}1-multisig --gas-payer $WALLET --memo $MEMO
changing the multisig threshold:
namadac update-account --address $\{WALLET\}1-multisig --threshold 1 --signing-keys $WALLET,$\{WALLET\}1 --memo $MEMO
check that the threshold has been updated correctly by running:
namadac query-account --owner $\{WALLET\}1-multisig
changing the public keys of a multisig account:
namadac update-account --address $\{WALLET\}1-multisig --public-keys $\{WALLET\}2,$\{WALLET\}3,$\{WALLET\}4 --signing-keys $WALLET,$\{WALLET\}1 --memo $MEMO
initialize an established account:
namadac init-account --alias $\{WALLET\}1-multisig --public-keys $\{WALLET\}2,$\{WALLET\}3,$\{WALLET\}4 --signing-keys $WALLET,$\{WALLET\}1 --threshold 1 --memo $MEMO
MASP
randomly generate a new spending key:
namadaw gen --shielded --alias $\{WALLET\}-shielded
create a new payment address:
namadaw gen-payment-addr --key $\{WALLET\}-shielded --alias $\{WALLET\}-shielded-addr
send a shielding transfer:
namadac transfer --source $WALLET --target $\{WALLET\}-shielded-addr --token NAAN --amount 10 --memo $MEMO
view balance:
namadac balance --owner $\{WALLET\}-shielded
generate another spending key:
namadaw gen --shielded --alias $\{WALLET\}1-shielded
create a payment address:
namadaw gen-payment-addr --key $\{WALLET\}1-shielded --alias $\{WALLET\}1-shielded-addr
shielded transfers (once the user has a shielded balance, it can be transferred to another shielded address):
namadac transfer --source $\{WALLET\}-shielded --target $\{WALLET\}1-shielded-addr --token NAAN --amount 4 --signing-keys <your-implicit-account-alias> --memo $MEMO
unshielding transfers (from a shielded to a transparent account):
namadac transfer --source $\{WALLET\}-shielded --target $WALLET --token NAAN --amount 4 --signing-keys <your-implicit-account-alias> --memo $MEMO
Validator operations
check sync status and node info:
curl http://127.0.0.1:26657/status | jq
check balance:
namadac balance --owner $ALIAS
check keys:
namadaw list
find your validator address:
namadac find-validator --tm-address=$(curl -s localhost:26657/status | jq -r .result.validator_info.address) --node localhost:26657
stake funds:
namadac bond --source $WALLET --validator $VALIDATOR_ADDRESS --amount 10 --memo $MEMO
self-bonding:
namadac bond --validator $VALIDATOR_ADDRESS --amount 10 --memo $MEMO
check your validator bond status:
namadac bonds --validator $VALIDATOR_ADDRESS
check your user bonds:
namadac bonds --owner $WALLET
check all bonded nodes:
namadac bonded-stake
find all the slashes:
namadac slashes
non-self unbonding (validator alias can be used instead of address):
namadac unbond --source $WALLET --validator $VALIDATOR_ADDRESS --amount 1.5 --memo $MEMO
self-unbonding:
namadac unbond --validator $VALIDATOR_ADDRESS --amount 1.5 --memo $MEMO
withdrawing unbonded tokens (available 6 epochs after unbonding):
namadac withdraw --source $WALLET --validator $VALIDATOR_ADDRESS --memo $MEMO
find your validator status:
namadac validator-state --validator $VALIDATOR_ADDRESS
check epoch:
namada client epoch
unjail, you need to wait 2 epochs:
namada client unjail-validator --validator $VALIDATOR_ADDRESS --node http://127.0.0.1:26657 --memo $MEMO
deactivate validator:
namadac deactivate-validator --validator $VALIDATOR_ADDRESS --memo $MEMO
reactivate validator:
namadac reactivate-validator --validator $VALIDATOR_ADDRESS --memo $MEMO
Change consensus key:
namadac change-consensus-key --validator $VALIDATOR_ADDRESS --memo $MEMO --signing-keys $WALLET --node http://127.0.0.1:26657
Generate priv_validator_key:
namadaw convert --alias <consensus_key_name>
change validator commission rate:
namadac change-commission-rate --validator $VALIDATOR_ADDRESS --commission-rate <commission-rate> --memo $MEMO
change validator metadata:
namadac change-metadata --validator $VALIDATOR_ADDRESS --memo $MEMO
Governance
all proposals list:
namadac query-proposal
edit proposal:
namadac query-proposal --proposal-id <PROPOSAL_ID>
save wallet address:
WALLET_ADDRESS=$(namadaw find --alias $WALLET | grep "Implicit" | awk '{print $3}')
import the variable into system:
echo "export WALLET_ADDRESS="$WALLET_ADDRESS"" >> $HOME/.bash_profile
source $HOME/.bash_profile
vote:
namadac vote-proposal --proposal-id <proposal-id> --vote yay --address $WALLET_ADDRESS --signing-keys $WALLET --memo $MEMO
Check your vote:
namadac query-proposal-votes --proposal-id <proposal_id> --voter $WALLET_ADDRESS
Sync and Consensus
check logs:
sudo journalctl -u namadad -f
check sync status and node info:
curl http://127.0.0.1:26657/status | jq
check consensus state:
curl -s localhost:26657/consensus_state | jq .result.round_state.height_vote_set[0].prevotes_bit_array
check consensus state:
curl -s localhost:26657/consensus_state | jq .result.round_state.height_vote_set[-2].prevotes_bit_array
full consensus state:
curl -s localhost:12657/dump_consensus_state
your validator votes (prevote):
curl -s http://localhost:26657/dump_consensus_state | jq '.result.round_state.votes[0].prevotes' | grep $(curl -s http://localhost:26657/status | jq -r '.result.validator_info.address[:12]')