⚙️ Installation

System Preparation

Run all commands as root unless stated otherwise.

Update system

apt update && apt upgrade -y

Reboot if kernel was updated.

Install dependencies

apt install -y curl nvme-cli aria2 jq ufw

Install Monad Package

Configure APT repository

cat <<EOF > /etc/apt/sources.list.d/category-labs.sources
Types: deb
URIs: https://pkg.category.xyz/
Suites: noble
Components: main
Signed-By: /etc/apt/keyrings/category-labs.gpg
EOF

curl -fsSL https://pkg.category.xyz/keys/public-key.asc | \
  gpg --dearmor --yes -o /etc/apt/keyrings/category-labs.gpg

Install Monad

Create Monad User

Create directory structure:


Configure TrieDB NVMe Device

Identify NVMe drive

Ensure the drive has no mounted filesystem

Partition drive

Create udev rule

Verify 512-byte LBA

Expected:

If not:

Initialize TrieDB (MPT)

Service must finish with:

Firewall Configuration

Anti-spam UDP filter:

Persist rule using iptables-persistent if desired.

Install OTEL Collector

Metrics endpoint:

Download Configuration Files

Mainnet example

Keystore & Keys

Generate password

Backup password:

Generate keys

⚠ Store backups off-server


Hard Reset (Snapshot Restore)

Restore snapshot:


Validator Configuration

Edit:

Mandatory changes

Ensure validator-specific template is used.

Reload config without restart:

Start Services

Final Notes

  • Monitor logs: journalctl -u monad-bft -f

  • Monitor metrics via OTEL

  • Backup keys regularly

  • Never expose keystore password

Last updated