Mainnet
Nolus

Stake With Us
Installation Guide
Tendermint CLI
Public Endpoint
State Sync
Snapshots
Custom Explorers
Stake With Us
Stake With Us
Installation Guide
Tendermint CLI
Public Endpoint
State Sync
Snapshots
Custom Explorers
How To Install Full Node Nolus 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 NOLUS_CHAIN_ID=pirin-1 >> $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.19.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
git clone https://github.com/nolus-protocol/nolus-core
cd nolus-core
git checkout v0.3.0
make install
Config app
nolusd config chain-id $NOLUS_CHAIN_ID
Init app
nolusd init $NODENAME --chain-id $NOLUS_CHAIN_ID
Download configuration
cd $HOME
curl -s https://raw.githubusercontent.com/nolus-protocol/nolus-networks/main/mainnet/pirin-1/genesis.json > $HOME/.nolus/config/genesis.json
curl -s https://snapshot3.konsortech.xyz/nolus/addrbook.json > $HOME/.nolus/config/addrbook.json
Set seeds and peers
SEEDS=""
PEERS="b84ca6b00682bf80052f0d544872c78614f84d3d@mainnet-nolus.konsortech.xyz:12656"
sed -i 's|^seeds *=.*|seeds = "'$SEEDS'"|; s|^persistent_peers *=.*|persistent_peers = "'$PEERS'"|' $HOME/.nolus/config/config.toml
Disable indexing
indexer="null"
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.nolus/config/config.toml
Config pruning
sed -i 's|pruning = "default"|pruning = "defult"|g' $HOME/.nolus/config/app.toml
sed -i 's|pruning-keep-recent = "0"|pruning-keep-recent = "100"|g' $HOME/.nolus/config/app.toml
sed -i 's|pruning-interval = "0"|pruning-interval = "10"|g' $HOME/.nolus/config/app.toml
Set minimum gas price
sed -i 's|^minimum-gas-prices *=.*|minimum-gas-prices = "0.0001unls"|g' $HOME/.nolus/config/app.toml
Create service
sudo tee /etc/systemd/system/nolusd.service > /dev/null << EOF
[Unit]
Description=Nolus Node
After=network-online.target
[Service]
User=$USER
ExecStart=$(which nolusd) start
Restart=on-failure
RestartSec=10
LimitNOFILE=10000
[Install]
WantedBy=multi-user.target
EOF
Register and start service
sudo systemctl daemon-reload
sudo systemctl enable nolusd
sudo systemctl restart nolusd && sudo journalctl -u nolusd -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
nolusd keys add $WALLET
To recover your wallet using seed phrase
nolusd keys add $WALLET --recover
Show your wallet list
nolusd keys list
Save wallet info
Add wallet and validator address into variables
NOLUS_WALLET_ADDRESS=$(nolusd keys show $WALLET -a)
NOLUS_VALOPER_ADDRESS=$(nolusd keys show $WALLET --bech val -a)
echo 'export NOLUS_WALLET_ADDRESS='${NOLUS_WALLET_ADDRESS} >> $HOME/.bash_profile
echo 'export NOLUS_VALOPER_ADDRESS='${NOLUS_VALOPER_ADDRESS} >> $HOME/.bash_profile
source $HOME/.bash_profile
Fund your wallet
God to discord channel and request #testnet-faucet
N/A
Create validator
check your wallet balance:
nolusd query bank balances $NOLUS_WALLET_ADDRESS
To create your validator run command below
nolusd tx staking create-validator \
--amount 1000000unls \
--from $WALLET \
--commission-max-change-rate "0.01" \
--commission-max-rate "0.2" \
--commission-rate "0.1" \
--min-self-delegation "1" \
--pubkey $(nolusd tendermint show-validator) \
--moniker $NODENAME \
--chain-id $NOLUS_CHAIN_ID
--gas-prices==0.1unls \
--gas-adjustment=1.5 \
--gas=auto \
Check your validator key
[[ $(nolusd q staking validator $NOLUS_VALOPER_ADDRESS -oj | jq -r .consensus_pubkey.key) = $(nolusd 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
nolusd 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 nolusd -o cat
Start service
sudo systemctl start nolusd
Stop service
sudo systemctl stop nolusd
Restart service
sudo systemctl restart nolusd
Node info
Synchronization info
nolusd status 2>&1 | jq .SyncInfo
Validator info
nolusd status 2>&1 | jq .ValidatorInfo
Node info
nolusd status 2>&1 | jq .NodeInfo
Show node id
nolusd tendermint show-node-id
Wallet operations
List of wallets
nolusd keys list
Recover wallet
nolusd keys add $WALLET --recover
Delete wallet
nolusd keys delete $WALLET
Get wallet balance
nolusd query bank balances $NOLUS_WALLET_ADDRESS
Transfer funds
nolusd tx bank send $NOLUS_WALLET_ADDRESS <TO_NOLUS_WALLET_ADDRESS> 1000000unls
Voting
nolusd tx gov vote 1 yes --from $WALLET --chain-id=$NOLUS_CHAIN_ID
Staking, Delegation and Rewards
Delegate stake
nolusd tx staking delegate $NOLUS_VALOPER_ADDRESS 1000000unls --from=$WALLET --chain-id=$NOLUS_CHAIN_ID --gas=auto
Redelegate stake from validator to another validator
nolusd tx staking redelegate <srcValidatorAddress> <destValidatorAddress> 1000000unls --from=$WALLET --chain-id=$NOLUS_CHAIN_ID --gas=auto
Withdraw all rewards
nolusd tx distribution withdraw-all-rewards --from=$WALLET --chain-id=$NOLUS_CHAIN_ID --gas=auto
Withdraw rewards with commision
nolusd tx distribution withdraw-rewards $NOLUS_VALOPER_ADDRESS --from=$WALLET --commission --chain-id=$NOLUS_CHAIN_ID
Validator management
Edit validator
nolusd tx staking edit-validator \
--moniker=$NODENAME \
--identity=<your_keybase_id> \
--website="<your_website>" \
--details="<your_validator_description>" \
--chain-id=$NOLUS_CHAIN_ID \
--from=$WALLET
Unjail validator
nolusd tx slashing unjail \
--broadcast-mode=block \
--from=$WALLET \
--chain-id=$NOLUS_CHAIN_ID \
--gas=auto
RPC
https://mainnet-nolus-rpc.konsortech.xyz
gRPC
https://mainnet-nolus-grpc.konsortech.xyz
API
https://mainnet-nolus-api.konsortech.xyz
Peers
b84ca6b00682bf80052f0d544872c78614f84d3d@mainnet-nolus.konsortech.xyz:12656
State Sync
sudo systemctl stop nolusd
cp $HOME/.nolus/data/priv_validator_state.json $HOME/.nolus/priv_validator_state.json.backup
nolusd tendermint unsafe-reset-all --home $HOME/.nolus --keep-addr-book
SNAP_RPC="https://mainnet-nolus-rpc.konsortech.xyz:443"
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
peers="b84ca6b00682bf80052f0d544872c78614f84d3d@testnet-mainnet.konsortech.xyz:12656"
sed -i 's|^persistent_peers *=.*|persistent_peers = "'$peers'"|' $HOME/.nolus/config/config.toml
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/.nolus/config/config.toml
mv $HOME/.nolus/priv_validator_state.json.backup $HOME/.nolus/data/priv_validator_state.json
curl -s https://snapshot3.konsortech.xyz/nolus/wasm.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.nolus
sudo systemctl restart nolusd
sudo journalctl -u nolusd -f --no-hostname -o cat
Snapshot Every 6 Hourse
sudo apt install lz4
sudo systemctl stop nolusd
cp $HOME/.nolus/data/priv_validator_state.json $HOME/.nolus/priv_validator_state.json.backup
rm -rf $HOME/.nolus/data
SNAP_NAME=$(curl -s https://snapshot3.konsortech.xyz/nolus/ | egrep -o ">nolus-snapshot.*\.tar.lz4" | tr -d ">")
curl https://snapshot3.konsortech.xyz/nolus/${SNAP_NAME} | lz4 -dc - | tar -xf - -C $HOME/.nolus
mv $HOME/.nolus/priv_validator_state.json.backup $HOME/.nolus/data/priv_validator_state.json
sudo systemctl restart nolusd && journalctl -u nolusd -f --no-hostname -o cat