Manual node installation
Official operator documentationProject websiteSource repositoryExplorer
Network: Testnet
Chain ID: limonata_10777-1
Guide review: 2026-07-14 ยท 3 source references
Recommended hardware: 2 CPU, 4GB RAM and 50GB SSD minimum
Binary: limonatad
Node home: ~/.limonatad
The guide was reviewed against current project metadata and official operator documentation. Hosted BonyNode infrastructure is not implied; confirm the selected release and network parameters before using a production host.
Limonata is experimental testnet software. The v0.2.0 release activates a prototype threshold-encrypted mempool; use testnet funds only and reconfirm the current upgrade height before operating a validator.
1. Prepare the node host
sudo apt-get update
sudo apt-get install -y ca-certificates curl jq tar
# This guide installs a checksum-verified official binary artifact.
# A Go toolchain is not required for the pinned binary path.2. Install the checksum-verified node binary
set -euo pipefail
cd "$HOME"
ARCHIVE="limonatad-linux-amd64-v0.2.0.tar.gz"
DEST="limonata-v0.2.0"
test ! -e "$ARCHIVE"
test ! -e "$DEST"
curl --fail --show-error --location --proto "=https" --output "$ARCHIVE" https://github.com/Limonata-Blockchain/limonata/releases/download/limonata-testnet-v0.2.0/limonatad-linux-amd64.tar.gz
printf '%s %s\n' '1396a04091608128047a89b1c24946bbc700543c5217129265145c9d5e4f4cdb' "$ARCHIVE" | sha256sum --check -
mkdir -p "$DEST"
tar -xzf "$ARCHIVE" -C "$DEST"
test -x "$DEST/limonatad"
sudo install -m 0755 "$DEST/limonatad" /usr/local/bin/limonatad
# Verify which binary will be used before initialization.
command -v "limonatad"
"limonatad" version3. Initialize a new node home
set -euo pipefail
BIN="limonatad"
CHAIN_ID="limonata_10777-1"
MONIKER='validator-name'
NODE_HOME="$HOME/.limonatad"
command -v "$BIN"
test ! -e "$NODE_HOME" || { echo "Stop: $NODE_HOME already exists; back it up and review it first." >&2; exit 1; }
"$BIN" init "$MONIKER" --chain-id "$CHAIN_ID" --home "$NODE_HOME"
test -f "$NODE_HOME/config/genesis.json"4. Install and validate genesis
set -euo pipefail
CHAIN_ID="limonata_10777-1"
NODE_HOME="$HOME/.limonatad"
GENESIS_URL='https://limonata.xyz/genesis.json'
GENESIS_DOWNLOAD="$NODE_HOME/config/genesis.json.download"
test -d "$NODE_HOME/config"
test ! -e "$GENESIS_DOWNLOAD" || { echo "Stop: review the existing $GENESIS_DOWNLOAD first." >&2; exit 1; }
curl --fail --show-error --location --proto "=https" --max-time 120 --output "$GENESIS_DOWNLOAD" "$GENESIS_URL"
jq -e --arg chain "$CHAIN_ID" '.chain_id == $chain' "$GENESIS_DOWNLOAD" >/dev/null
printf '%s %s
' 'bb76a6d8abbb1bdeaa41d92811066b16bd6a48f58f7136e3fcb71226b6af4569' "$GENESIS_DOWNLOAD" | sha256sum --check -
cp --no-clobber "$NODE_HOME/config/genesis.json" "$NODE_HOME/config/genesis.json.init-backup" || true
install -m 0644 "$GENESIS_DOWNLOAD" "$NODE_HOME/config/genesis.json"
jq -r '.chain_id' "$NODE_HOME/config/genesis.json"5. Configure minimum gas prices
set -euo pipefail
APP_TOML="$HOME/.limonatad/config/app.toml"
test -f "$APP_TOML"
cp --no-clobber "$APP_TOML" "$APP_TOML.bonynode-backup" || true
if grep -q '^minimum-gas-prices' "$APP_TOML"; then
sed -i 's|^minimum-gas-prices *=.*|minimum-gas-prices = "0aLIMO"|' "$APP_TOML"
else
printf '
minimum-gas-prices = "0aLIMO"
' >> "$APP_TOML"
fi
grep '^minimum-gas-prices' "$APP_TOML"6. Configure reviewed persistent peers
set -euo pipefail
CONFIG_TOML="$HOME/.limonatad/config/config.toml"
PERSISTENT_PEERS='[email protected]:26656'
test -f "$CONFIG_TOML"
cp --no-clobber "$CONFIG_TOML" "$CONFIG_TOML.bonynode-backup" || true
sed -i "s|^persistent_peers *=.*|persistent_peers = "$PERSISTENT_PEERS"|" "$CONFIG_TOML"
grep '^persistent_peers' "$CONFIG_TOML"7. Apply reviewed project-specific settings
sed -i -E 's|type = ".*"|type = "app"|g' $HOME/.limonatad/config/config.toml8. Create the service, start and verify the node
set -euo pipefail
BIN="limonatad"
CHAIN_ID="limonata_10777-1"
NODE_HOME="$HOME/.limonatad"
SERVICE="limonatad.service"
BIN_PATH=$(command -v "$BIN")
SERVICE_USER="$USER"
test -x "$BIN_PATH"
test -s "$NODE_HOME/config/genesis.json"
sudo tee "/etc/systemd/system/$SERVICE" >/dev/null <<EOF
[Unit]
Description=Limonata node
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=${SERVICE_USER}
ExecStart=${BIN_PATH} start --home ${NODE_HOME} --chain-id limonata_10777-1 --evm.evm-chain-id 10777 --minimum-gas-prices 0aLIMO
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now "$SERVICE"
sudo systemctl status "$SERVICE" --no-pager
# Wait briefly for the local RPC listener and require the configured chain ID.
for attempt in {1..30}; do
if STATUS=$(curl --fail --silent http://127.0.0.1:26657/status); then
jq -e --arg chain "$CHAIN_ID" '.result.node_info.network == $chain' <<<"$STATUS"
exit 0
fi
sleep 2
done
echo 'Local RPC did not become ready; inspect the service journal.' >&2
sudo journalctl -u "$SERVICE" -n 100 --no-pager
exit 1