Installation
Install Dependencies
sudo apt update && sudo apt upgrade -y && sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y
Go Version
cd $HOME
sudo rm -rf /usr/local/go
VER="1.25.9"
curl -Ls https://go.dev/dl/go$VER.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile
source $HOME/.bash_profile
mkdir -p ~/go/bin
go version
Install Binary
cd $HOME
mkdir -p ~/go/bin
wget https://github.com/Limonata-Blockchain/limonata/raw/refs/heads/main/testnet/releases/limonatad-linux-amd64 -O limonatad
chmod +x limonatad
mv limonatad ~/go/bin/
Initialize Node
limonatad init "Your_Validator_Name" --chain-id limonata-testnet --home $HOME/.limonata
Configure Pruning
pruning="custom"
pruning_keep_recent="100"
pruning_keep_every="0"
pruning_interval="19"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.limonata/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.limonata/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.limonata/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.limonata/config/app.toml
Set Minimum Gas Price
sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "2500000000aLIMO"|g' $HOME/.limonata/config/app.toml
Configure Indexer
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.limonata/config/config.toml
Create Service
sudo tee /etc/systemd/system/limonatad.service > /dev/null <<EOF
[Unit]
Description=Limonata node
After=network-online.target
[Service]
User=$USER
WorkingDirectory=$HOME/.limonata
ExecStart=$(which limonatad) start --home $HOME/.limonata
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
mkdir -p $HOME/.limonata/cosmovisor/genesis/bin
mv $HOME/go/bin/limonatad $HOME/.limonata/cosmovisor/genesis/bin/
sudo ln -s $HOME/.limonata/cosmovisor/genesis $HOME/.limonata/cosmovisor/current -f
sudo ln -s $HOME/.limonata/cosmovisor/current/bin/limonatad /usr/local/bin/limonatad -f
go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
sudo tee /etc/systemd/system/limonatad.service > /dev/null <<EOF
[Unit]
Description=Limonata node service
After=network-online.target
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start --home $HOME/.limonata
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.limonata"
Environment="DAEMON_NAME=limonatad"
Environment="UNSAFE_SKIP_BACKUP=true"
[Install]
WantedBy=multi-user.target
EOF
Enable and Start Service
sudo systemctl daemon-reload
sudo systemctl enable limonatad
sudo systemctl restart limonatad && sudo journalctl -u limonatad -f
Create Wallet
# Create new wallet
limonatad keys add wallet --home $HOME/.limonata
# Restore existing wallet
limonatad keys add wallet --recover --home $HOME/.limonata
# Check sync status (false = fully synced)
limonatad status --home $HOME/.limonata 2>&1 | jq .sync_info
Create Validator
Create validator.json
tee $HOME/validator.json > /dev/null <<EOF
{
"pubkey": $(limonatad comet show-validator),
"amount": "1000000aLIMO",
"moniker": "CodeBlockLabs",
"identity": "E1ADDC27DCE641C2",
"website": "https://codeblocklabs.com",
"details": "Join Our Community on Telegram @CodeBlockLabs",
"commission-rate": "0.05",
"commission-max-rate": "0.2",
"commission-max-change-rate": "0.1",
"min-self-delegation": "1"
}
EOF
Create Validator
limonatad tx staking create-validator $HOME/validator.json --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Delete Node
sudo systemctl stop limonatad
sudo systemctl disable limonatad
sudo rm -rf /etc/systemd/system/limonatad.service
sudo rm $(which limonatad)
sudo rm -rf $HOME/.limonata
Service Operations
Check logs
sudo journalctl -u limonatad -f
Sync info
limonatad status --home $HOME/.limonata 2>&1 | jq .sync_info
Node info
limonatad status --home $HOME/.limonata 2>&1 | jq .node_info
Your node peer
# CometBFT
echo $(limonatad comet show-node-id --home $HOME/.limonata)'@'$(wget -qO- eth0.me)':'$(cat $HOME/.limonata/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')
# Tendermint (legacy)
# echo $(limonatad tendermint show-node-id --home $HOME/.limonata)'@'$(wget -qO- eth0.me)':'$(cat $HOME/.limonata/config/config.toml | sed -n '/Address to listen for incoming connection/{n;p;}' | sed 's/.*://; s/".*//')
Key Management
Add New Wallet
limonatad keys add wallet --home $HOME/.limonata
Restore existing wallet
limonatad keys add wallet --recover --home $HOME/.limonata
List All Wallets
limonatad keys list --home $HOME/.limonata
Delete wallet
limonatad keys delete wallet --home $HOME/.limonata
Check Balance
limonatad q bank balances $(limonatad keys show wallet -a --home $HOME/.limonata) --home $HOME/.limonata
Export Key (save to wallet.backup)
limonatad keys export wallet --home $HOME/.limonata
Export Key to EVM
limonatad keys export wallet --unarmored-hex --unsafe --home $HOME/.limonata
Import Key (restore from wallet.backup)
limonatad keys import wallet wallet.backup --home $HOME/.limonata
Tokens
Withdraw all rewards
limonatad tx distribution withdraw-all-rewards --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Withdraw rewards and commission from your validator
limonatad tx distribution withdraw-rewards $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) --from wallet --commission --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Delegate to Yourself
limonatad tx staking delegate $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) 1000000aLIMO --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Delegate to Other Validator
limonatad tx staking delegate <TO_VALOPER_ADDRESS> 1000000aLIMO --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Redelegate Stake to Another Validator
limonatad tx staking redelegate $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) <TO_VALOPER_ADDRESS> 1000000aLIMO --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Unbond
limonatad tx staking unbond $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) 1000000aLIMO --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Transfer Funds
limonatad tx bank send $(limonatad keys show wallet -a --home $HOME/.limonata) <TO_WALLET_ADDRESS> 1000000aLIMO --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Validator Operations
Edit Existing Validator
limonatad tx staking edit-validator \
--commission-rate 0.1 \
--new-moniker "$MONIKER" \
--identity "" \
--details "I am validator" \
--from wallet \
--chain-id limonata-testnet \
--home $HOME/.limonata \
--gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO \
-y
Validator info
limonatad status --home $HOME/.limonata 2>&1 | jq .validator_info
Validator Details
limonatad q staking validator $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) --home $HOME/.limonata
Jailing info
# CometBFT
limonatad q slashing signing-info $(limonatad comet show-validator --home $HOME/.limonata) --home $HOME/.limonata# Tendermint (legacy)
# limonatad q slashing signing-info $(limonatad tendermint show-validator --home $HOME/.limonata) --home $HOME/.limonata
Slashing parameters
limonatad q slashing params --home $HOME/.limonata
Unjail validator
limonatad tx slashing unjail --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
Active Validators List
limonatad q staking validators -oj --limit=2000 --home $HOME/.limonata | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " " + .description.moniker' | sort -gr | nl
Check Validator key
# CometBFT
[[ $(limonatad q staking validator $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) -oj --home $HOME/.limonata | jq -r .consensus_pubkey.key) = $(limonatad status --home $HOME/.limonata 2>&1 | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "Your key status is ok" || echo -e "Your key status is error"
# Tendermint (legacy)
# [[ $(limonatad q staking validator $(limonatad keys show wallet --bech val -a --home $HOME/.limonata) -oj --home $HOME/.limonata | jq -r .consensus_pubkey.key) = $(limonatad status --home $HOME/.limonata 2>&1 | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "Your key status is ok" || echo -e "Your key status is error"
Signing info
# CometBFT
limonatad q slashing signing-info $(limonatad comet show-validator --home $HOME/.limonata) --home $HOME/.limonata# Tendermint (legacy)
# limonatad q slashing signing-info $(limonatad tendermint show-validator --home $HOME/.limonata) --home $HOME/.limonata
Governance
Create New Text Proposal
limonatad tx gov submit-proposal \
--title "" \
--description "" \
--deposit 1000000aLIMO \
--type Text \
--from wallet \
--home $HOME/.limonata \
--gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO \
-y
Proposals List
limonatad query gov proposals --home $HOME/.limonata
View proposal
limonatad query gov proposal 1 --home $HOME/.limonata
Vote
limonatad tx gov vote 1 yes --from wallet --chain-id limonata-testnet --home $HOME/.limonata --gas auto --gas-adjustment 1.5 --gas-prices 2500000000aLIMO -y
CodeBlockLabs