Mainnet
Quicksilver
Installation Guide
Tendermint CLI
State Sync
Public Endpoint
Snapshot
Custom Explorers
Decentralization Maps
Installation Guide
Installation Guide
Tendermint CLI
State Sync
Public Endpoint
Snapshot
Custom Explorers
Decentralization Maps
How To Install Full Node Quicksilver Mainnet
Setting up vars
Your Nodename (validator) that will shows in explorer
NODENAME=<Your_Nodename_Moniker>
Save variables to system
echo "export NODENAME=$NODENAME" >> $HOME/.bash_profile
if [ ! $WALLET ]; then
echo "export WALLET=wallet" >> $HOME/.bash_profile
fi
echo "export QUICKSILVER_CHAIN_ID=quicksilver-2" >> $HOME/.bash_profile
source $HOME/.bash_profile
Update packages
sudo apt update && sudo apt upgrade -y
Install dependencies
sudo apt install curl build-essential git wget jq make gcc tmux net-tools ccze -y
Install go
if ! [ -x "$(command -v go)" ]; then
ver="1.20.4"
cd $HOME
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile
source ~/.bash_profile
fi
Download and build binaries
cd $HOME
rm -rf quicksilver
git clone https://github.com/ingenuity-build/quicksilver.git
cd quicksilver
git checkout v1.2.17
make install
Config app
quicksilverd config chain-id $QUICKSILVER_CHAIN_ID
Init app
quicksilverd init $NODENAME --chain-id $QUICKSILVER_CHAIN_ID
Download configuration
cd $HOME
curl -Ls https://snapshot3.konsortech.xyz/quicksilver/genesis.json > $HOME/.quicksilverd/config/genesis.json
curl -Ls https://snapshot3.konsortech.xyz/quicksilver/addrbook.json > $HOME/.quicksilverd/config/addrbook.json
Set seeds and peers
sed -i -e "s|^seeds *=.*|seeds = \"61e601946a69bf667f41d67a3515da0cf8950516@mainnet-seed.konsortech.xyz:46165\"|" $HOME/.quicksilverd/config/config.toml
Disable indexing
indexer="null"
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.quicksilverd/config/config.toml
Config pruning
pruning="custom"
pruning_keep_recent="100"
pruning_keep_every="0"
pruning_interval="19"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.quicksilverd/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.quicksilverd/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.quicksilverd/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.quicksilverd/config/app.toml
Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.0001uqck\"|" $HOME/.quicksilverd/config/app.toml
Create service
sudo tee /etc/systemd/system/quicksilverd.service > /dev/null <<EOF
[Unit]
Description=Quicksilver Node
After=network-online.target
[Service]
User=$USER
ExecStart=$(which quicksilverd) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Register and start service
sudo systemctl daemon-reload
sudo systemctl enable quicksilverd
sudo systemctl restart quicksilverd && sudo journalctl -u quicksilverd -f -o cat
Guidence for Create Validator
Create wallet
To create new wallet you can use command below. Don’t forget to save the mnemonic
quicksilverd keys add $WALLET
To recover your wallet using seed phrase
quicksilverd keys add $WALLET --recover
Show your wallet list
quicksilverd keys list
Save wallet info
Add wallet and validator address into variables
QUICKSILVER_WALLET_ADDRESS=$(quicksilverd keys show $WALLET -a)
QUICKSILVER_VALOPER_ADDRESS=$(quicksilverd keys show $WALLET --bech val -a)
echo 'export QUICKSILVER_WALLET_ADDRESS='${QUICKSILVER_WALLET_ADDRESS} >> $HOME/.bash_profile
echo 'export QUICKSILVER_VALOPER_ADDRESS='${QUICKSILVER_VALOPER_ADDRESS} >> $HOME/.bash_profile
source $HOME/.bash_profile
Fund your wallet
In order to create validator first you need to fund your wallet with discord faucet.
Buy on Osmosis
Create validator
check your wallet balance:
quicksilverd query bank balances $QUICKSILVER_WALLET_ADDRESS
To create your validator run command below
quicksilverd tx staking create-validator \
--amount 1000000uqck \
--from $WALLET \
--commission-max-change-rate "0.01" \
--commission-max-rate "0.2" \
--commission-rate "0.07" \
--min-self-delegation "1" \
--pubkey $(quicksilverd tendermint show-validator) \
--moniker $NODENAME \
--chain-id $QUICKSILVER_CHAIN_ID
--gas-adjustment 1.4 \
--gas auto \
--gas-prices 0.0001uqck \
-y
Check your validator key
[[ $(quicksilverd q staking validator $QUICKSILVER_VALOPER_ADDRESS -oj | jq -r .consensus_pubkey.key) = $(quicksilverd 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 list of validators
quicksilverd 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
Usefull commands
Service management
Check logs
journalctl -fu quicksilverd -o cat
Start service
sudo systemctl start quicksilverd
Stop service
sudo systemctl stop quicksilverd
Restart service
sudo systemctl restart quicksilverd
Node info
Synchronization info
quicksilverd status 2>&1 | jq .SyncInfo
Validator info
quicksilverd status 2>&1 | jq .ValidatorInfo
Node info
quicksilverd status 2>&1 | jq .NodeInfo
Show node id
quicksilverd tendermint show-node-id
Wallet operations
List of wallets
quicksilverd keys list
Recover wallet
quicksilverd keys add $WALLET --recover
Delete wallet
quicksilverd keys delete $WALLET
Get wallet balance
quicksilverd query bank balances $QUICKSILVER_WALLET_ADDRESS
Transfer funds
quicksilverd tx bank send $QUICKSILVER_WALLET_ADDRESS <TO_QUICKSILVER_WALLET_ADDRESS> 1000000uqck
Voting
quicksilverd tx gov vote 1 yes --from $WALLET --chain-id=$QUICKSILVER_CHAIN_ID
Staking, Delegation and Rewards
Delegate stake
quicksilverd tx staking delegate $QUICKSILVER_VALOPER_ADDRESS 1000000uqck --from=$WALLET --chain-id=$QUICKSILVER_CHAIN_ID --gas=auto
Redelegate stake from validator to another validator
quicksilverd tx staking redelegate <srcValidatorAddress> <destValidatorAddress> 1000000uqck --from=$WALLET --chain-id=$QUICKSILVER_CHAIN_ID --gas=auto
Withdraw all rewards
quicksilverd tx distribution withdraw-all-rewards --from=$WALLET --chain-id=$QUICKSILVER_CHAIN_ID --gas=auto
Withdraw rewards with commision
quicksilverd tx distribution withdraw-rewards $QUICKSILVER_VALOPER_ADDRESS --from=$WALLET --commission --chain-id=$QUICKSILVER_CHAIN_ID
Validator management
Edit validator
quicksilverd tx staking edit-validator \
--moniker=$NODENAME \
--identity=<your_keybase_id> \
--website="<your_website>" \
--details="<your_validator_description>" \
--chain-id=$QUICKSILVER_CHAIN_ID \
--from=$WALLET
Unjail validator
quicksilverd tx slashing unjail \
--broadcast-mode=block \
--from=$WALLET \
--chain-id=$QUICKSILVER_CHAIN_ID \
--gas=auto
Public Endpoint
RPC
https://mainnet-quicksilver-rpc.konsortech.xyz
API
https://mainnet-quicksilver-api.konsortech.xyz
gRPC
mainnet-quicksilver.konsortech.xyz:46090
Peers and Seeds
Peers
66a0cd5eff87ec7b1ea2e3b41032c1c2d22aa284@mainnet-quicksilver.konsortech.xyz:46657
Seeds
61e601946a69bf667f41d67a3515da0cf8950516@mainnet-seed.konsortech.xyz:46165
Genesis and Addrbook
curl -Ls https://snapshot3.konsortech.xyz/quicksilver/genesis.json > $HOME/.quicksilverd/config/genesis.json
curl -Ls https://snapshot3.konsortech.xyz/quicksilver/addrbook.json > $HOME/.quicksilverd/config/addrbook.json
State Sync
sudo systemctl stop quicksilverd
cp $HOME/.quicksilverd/data/priv_validator_state.json $HOME/.quicksilverd/priv_validator_state.json.backup
quicksilverd tendermint unsafe-reset-all --home $HOME/.quicksilverd --keep-addr-book
SNAP_RPC="https://mainnet-quicksilver-rpc.konsortech.xyz:443"
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
sed -i -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.quicksilverd/config/config.toml
mv $HOME/.quicksilverd/priv_validator_state.json.backup $HOME/.quicksilverd/data/priv_validator_state.json
sudo systemctl restart quicksilverd
sudo journalctl -u quicksilverd -f --no-hostname -o cat
Snapshot
sudo systemctl stop quicksilverd
cp $HOME/.quicksilverd/data/priv_validator_state.json $HOME/.quicksilverd/priv_validator_state.json.backup
rm -rf $HOME/.quicksilverd/data
SNAP_NAME=$(curl -s https://snapshot3.konsortech.xyz/quicksilver/ | egrep -o ">quicksilver-snapshot.*\.tar.lz4" | tr -d ">")
curl https://snapshot3.konsortech.xyz/quicksilver/${SNAP_NAME} | lz4 -dc - | tar -xf - -C $HOME/.quicksilverd
mv $HOME/.quicksilverd/priv_validator_state.json.backup $HOME/.quicksilverd/data/priv_validator_state.json
sudo systemctl restart quicksilverd && journalctl -u quicksilverd -f --no-hostname -o cat