Sitemap

Limonata | Validator Node Setup Guide

6 min readOct 12, 2026

--

Press enter or click to view image in full size

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.

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 -y

2) 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 -y

3) 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 version

Installation

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/limonatad

2) Check version:

limonatad version --long | grep -e version -e commit

Output 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 os

4) Initialize node:

limonatad init <YOUR_NODE_ID> --chain-id limonata_10777-1

5) Download genesis file:

wget -O $HOME/.evmd/config/genesis.json "https://limonata.xyz/genesis.json"

6) Check genesis:

sha256sum ~/.evmd/config/genesis.json

Output should be:

bb76a6d8abbb1bdeaa41d92811066b16bd6a48f58f7136e3fcb71226b6af4569 /root/.evmd/config/genesis.json

7) Check validator state:

cd && cat .evmd/data/priv_validator_state.json

Should be at the beginning:

{
"height": "0",
"round": 0,
"step": 0
}

If not, run:

limonatad tendermint unsafe-reset-all --home $HOME/.evmd --keep-addr-book

8) Setup minimum gas prices in app.toml file:

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0aLIMO\"/;" $HOME/.evmd/config/app.toml

9) 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.toml

10) 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.toml

11) 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.toml

12) Add “bad” peers filtration:

sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.evmd/config/config.toml

13) 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.toml

15) 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
EOF

State 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.toml

16) Reload daemon, enable and start limonatad.service:

systemctl daemon-reload && \
systemctl enable limonatad && \
systemctl start limonatad && \
systemctl status limonatad

If everything went ok, should look like this:

Press enter or click to view image in full size

17) Check logs:

journalctl -u limonatad -f -o cat

Wait 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-validator

4) Create validator.json file:

nano $HOME/.evmd/validator.json

Add 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
Enter

6) 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 -y

Useful 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 cat

Check balance:

limonatad q bank balances <WALLET_ADDRESS>

Retrieve your pubkey:

limonatad comet show-validator

Query 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 -y

Jail 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 -y

List active validators:

limonatad q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

List inactive validators:

limonatad q staking validators -o json \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

General:

Check port status:

curl localhost:26657/status | jq

Staking parameters:

limonatad q staking params

Slashing parameters:

limonatad q slashing params

Transactions:

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 -y

Withdraw 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 -y

Withdraw rewards and commission:

limonatad tx distribution withdraw-rewards <YOUR_VALOPER_ADDRESS> --from <WALLET_NAME> --commission --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Redelegate:

limonatad tx staking redelegate <CURRENT_VALIDATOR> <DESTINATION_VALIDATOR> 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Unbond:

limonatad tx staking unbond <YOUR_VALOPER_ADDRESS> 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Send tokens:

limonatad tx bank send <WALLET_NAME> <ADDRESS> 1000000aLIMO --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Wallets:

List all keys:

limonatad keys list

Create wallet:

limonatad keys add <WALLET_NAME>

Recover wallet:

limonatad keys add <WALLET_NAME> --recover

Delete wallet:

limonatad keys delete <WALLET_NAME>

Show account key:

limonatad keys show <WALLET_NAME> --bech acc

Retrieve EVM wallet from Cosmos address:

limonatad debug addr <YOU_cosmos1..._ADDRESS>

Show validator key:

limonatad keys show <WALLET_NAME> --bech val

Show consensus key:

limonatad show <WALLET_NAME> --bech cons

Show account data:

limonatad q auth account $(latandad keys show <WALLET_NAME> -a) -o text

Governance

List of proposals:

limonatad q gov proposals

Vote “Yes”:

limonatad tx gov vote 1 yes --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Deposit into proposal:

limonatad tx gov deposit 1 1000000aLIMO --from <WALLET_NAME> --gas auto --gas-adjustment 1.4 --gas-prices 1000000000aLIMO -y

Check 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=auto

Delete 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/limonata

Links

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

--

--

crptcpchk
crptcpchk

Written by crptcpchk

@RawBox Squad | Blockchain Validator