Limonata | Validator Node Setup Guide
An EVM Layer 1 engineered for fast finality, near-zero network fees, a fee split and self-refilling gas pool for gasless transactions, on-chain P-256 signatures, and a full EVM toolkit at Chain ID 10777.
Single-slot BFT finality, designed to avoid reorgs — a fast, clean highway, on a path to credible neutrality, for the next generation of on-chain applications, built on standards you already know.
On most chains the user pays the gas and has to hold the native coin just to move. Limonata pays transaction gas from the chain itself — written into consensus, not bolted on with a relayer or a paymaster contract. Your users’ balances are never reduced to pay for gas: the protocol covers it from the on-chain pool in the same block, so using the chain costs them nothing per transaction — up to a generous daily free-gas allowance (about 1 LIMO of gas a day, roughly 2,500 transactions, for every account that holds LIMO). The subsidy is bounded, not infinite: past that daily allowance the account funds its own gas. Two honest details: qualifying for the free allowance requires holding a little LIMO (a hold requirement that blocks farming — and that balance is never actually spent on sponsored gas), and a brand-new zero-balance account gets a one-shot starter grant so it can make its very first transactions.
Site | Documents | X | Discord | GitHub
Before interacting with any project, please DYOR about the project.
Support by delegating to my validator:
https://xplr.crptcpchk.com/limonata/staking/cosmosvaloper1esv9kn63r7dtv9ccdcj7f8va4cn4rd086ee3hy
Server Requirements
4CPU, 2RAM, 50GB space.
In the future it will require more space, but for testnet it’s enough.
Prerequisite
1) Update the local package repository database & upgrade installed packages to their latest versions based on the updated package database:
apt update && apt upgrade -y2) Install packages:
apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y3) Install Go:
ver="1.26.1" && \
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" >> $HOME/.bash_profile && \
source $HOME/.bash_profile && \
go versionInstallation
1) Install the binary:
git clone https://github.com/Limonata-Blockchain/limonata.git && \
cd limonata && \
git checkout limonata-v0.3.6 && \
make install && \
mv $HOME/go/bin/evmd $HOME/go/bin/limonatad2) Check version:
limonatad version --long | grep -e version -e commitOutput should be:
commit: effa377d673fc6f0fb307a78ca54e037e53060f7
version: limonata-v0.3.6
3) Configure the binary:
limonatad config set client chain-id limonata_10777-1
limonatad config set client node tcp://localhost:26657
limonatad config set client keyring-backend os4) Initialize node:
limonatad init <YOUR_NODE_ID> --chain-id limonata_10777-15) Download genesis file:
wget -O $HOME/.evmd/config/genesis.json "https://limonata.xyz/genesis.json"6) Check genesis:
sha256sum ~/.evmd/config/genesis.jsonOutput should be:
bb76a6d8abbb1bdeaa41d92811066b16bd6a48f58f7136e3fcb71226b6af4569 /root/.evmd/config/genesis.json
7) Check validator state:
cd && cat .evmd/data/priv_validator_state.jsonShould be at the beginning:
{
"height": "0",
"round": 0,
"step": 0
}If not, run:
limonatad tendermint unsafe-reset-all --home $HOME/.evmd --keep-addr-book8) Setup minimum gas prices in app.toml file:
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0aLIMO\"/;" $HOME/.evmd/config/app.toml9) Setup external address:
external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.evmd/config/config.toml10) Add peers:
SEEDS=""
PEERS="a72e9b7ac515ace0ab404762da2cd677805fa09d@202.61.201.53:25656, 4b154368aab24cb5b31c927efd50c73d0f4f9799@142.127.103.79:26656, 14673dfbd8efff7eed0a97880efde1d0a54da948@195.201.160.23:19156"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.evmd/config/config.toml11) Add maximum inbound/outbound peers:
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 40/g' $HOME/.evmd/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 10/g' $HOME/.evmd/config/config.toml12) Add “bad” peers filtration:
sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.evmd/config/config.toml13) Download Addr book:
wget -O $HOME/.evmd/config/addrbook.json "https://crptcpchk.com/nodes/limonata/addrbook.json"14) Add pruning:
pruning="custom"
pruning_keep_recent="1000"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.evmd/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.evmd/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.evmd/config/app.toml15) Create service file:
tee /etc/systemd/system/limonatad.service > /dev/null <<EOF
[Unit]
Description=Limonata Validator Node
After=network-online.target
[Service]
User=$USER
ExecStart=$(which limonatad) start --chain-id limonata_10777-1 --evm.evm-chain-id 10777
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOFState sync (Optional)
https://xplr.crptcpchk.com/limonata/statesync
SNAP_RPC=https://limonata-rpc.crptcpchk.com:443
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \
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.bak -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/.evmd/config/config.toml16) Reload daemon, enable and start limonatad.service:
systemctl daemon-reload && \
systemctl enable limonatad && \
systemctl start limonatad && \
systemctl status limonatadIf everything went ok, should look like this:
17) Check logs:
journalctl -u limonatad -f -o catWait for synchronization.
18) Create wallet:
Change <WALLET_NAME> with Your wallet name.
limonatad keys add <WALLET_NAME>Enter password (passphrase).
Save mnemonic and wallet address.
Register validator
1) Run:
limonatad status | jq '.sync_info'Wait for “catching_up”: false,
2) Use faucet to claim LIMO.
The faucet expects an EVM address beginning with 0x, not the cosmos1... representation shown by keys show. Both representations refer to the same underlying operator account.
Run:
limonatad debug addr <YOU_cosmos1..._ADDRESS>Look for Address hex.
3) Retrieve your pubkey:
limonatad comet show-validator4) Create validator.json file:
nano $HOME/.evmd/validator.jsonAdd your config info:
{
"pubkey": {<YOUR_PUBKEY_FROM_STEP_4>},
"amount": "1000000000000000000aLIMO",
"moniker": "<YOUR_MONIKER>",
"identity": "",
"website": "",
"security": "",
"details": "",
"commission-rate": "0.10",
"commission-max-rate": "0.20",
"commission-max-change-rate": "0.01",
"min-self-delegation": "1"
}Save and exit:
Ctrl+X
Y
Enter6) Create validator:
Change <WALLET_NAME> with the name of you wallet.
limonatad tx staking create-validator $HOME/.evmd/validator.json \
--from <WALLET_NAME> --chain-id limonata_10777-1 \
--gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yUseful commands
Validator/Node:
Get crptcpchk’s stories in your inbox
Join Medium for free to get updates from this writer.
Check logs:
journalctl -u limonatad -f -o catCheck balance:
limonatad q bank balances <WALLET_ADDRESS>Retrieve your pubkey:
limonatad comet show-validatorQuery delegations made by an address:
limonatad query staking delegations <DELEGATOR_ADDRESS>Validator details:
limonatad query staking validator <YOUR_VALOPER_ADDRESS>Unjail validator:
limonatad tx slashing unjail --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yJail reason (how many blocks missed):
limonatad q slashing signing-info $(latandad tendermint show-validator)Edit validator details:
limonatad tx staking edit-validator --moniker <YOUR_MONIKER> --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yList active validators:
limonatad q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nlList inactive validators:
limonatad q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nlGeneral:
Check port status:
curl localhost:26657/status | jqStaking parameters:
limonatad q staking paramsSlashing parameters:
limonatad q slashing paramsTransactions:
Get transaction details by hash:
limonatad query tx <TX_HASH>Delegate to your validator:
limonatad tx staking delegate <YOUR_VALOPER_ADDRESS> 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yWithdraw reward from all delegations by a wallet:
limonatad tx distribution withdraw-all-rewards --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yWithdraw rewards and commission:
limonatad tx distribution withdraw-rewards <YOUR_VALOPER_ADDRESS> --from <WALLET_NAME> --commission --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yRedelegate:
limonatad tx staking redelegate <CURRENT_VALIDATOR> <DESTINATION_VALIDATOR> 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yUnbond:
limonatad tx staking unbond <YOUR_VALOPER_ADDRESS> 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -ySend tokens:
limonatad tx bank send <WALLET_NAME> <ADDRESS> 1000000aLIMO --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yWallets:
List all keys:
limonatad keys listCreate wallet:
limonatad keys add <WALLET_NAME>Recover wallet:
limonatad keys add <WALLET_NAME> --recoverDelete wallet:
limonatad keys delete <WALLET_NAME>Show account key:
limonatad keys show <WALLET_NAME> --bech accRetrieve EVM wallet from Cosmos address:
limonatad debug addr <YOU_cosmos1..._ADDRESS>Show validator key:
limonatad keys show <WALLET_NAME> --bech valShow consensus key:
limonatad show <WALLET_NAME> --bech consShow account data:
limonatad q auth account $(latandad keys show <WALLET_NAME> -a) -o textGovernance
List of proposals:
limonatad q gov proposalsVote “Yes”:
limonatad tx gov vote 1 yes --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yDeposit into proposal:
limonatad tx gov deposit 1 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -yCheck voting result:
limonatad q gov proposals --voter <ADDRESS>Create proposal:
limonatad tx gov submit-proposal \
--title="Reward crptcpchk for his setup guide. =)" \
--description="He's a good lad." \
--type="Text" \
--deposit="1000000000000000000aLIMNO" \
--from=<WALLET_NAME> \
--gas-prices 1000000000aLIMO \
--gas=autoDelete Node
systemctl stop limonatad && \
systemctl disable limonatad && \
rm /etc/systemd/system/limonatad.service && \
systemctl daemon-reload && \
rm -f $(which limonatad) && \
rm -rf $HOME/.evmd $HOME/limonataLinks
Follow for more guides on nodes, drops and other useful stuff.
psi.crypto Discord: https://discord.gg/9kvtEQwtqJ
X: https://twitter.com/the01100011
Telegram: https://t.me/psicrypto







