Node Installation

Node Installation

This page explains how to install a Monad full node and prepare it for validator use on testnet.

Disk 1 → OS + MonadBFT Disk 2 → TrieDB / Execution

RAID is not recommended for TrieDB workloads because it may increase latency and reduce IOPS. :contentReference[oaicite:4]{index=4}


1. Install the operating system

This example assumes a Hetzner Dedicated Server.

Enable Rescue System in the Hetzner Robot panel, reboot the server, and connect via SSH:

ssh root@YOUR_SERVER_IP

Run the installer:

installimage

Use only one disk for the OS.

Example layout:

DRIVE1 /dev/nvme0n1
#DRIVE2 /dev/nvme1n1

SWRAID 0

BOOTLOADER grub

PART /boot ext3 1G
PART swap swap 16G
PART / ext4 500G
PART /home ext4 all

After installation, reboot the server.


2. Verify disks

Expected result:


3. Check kernel version

Expected:

Any kernel version >= 6.8.0.60 is recommended.


4. Disable HyperThreading / SMT

Check SMT status:

  • 1 = enabled

  • 0 = disabled

You can also check:

If it shows:

SMT is enabled.

If it shows:

SMT is disabled.

Disable via GRUB

Find:

Change to:

Apply changes:

Hetzner-specific case

Some Hetzner servers override GRUB settings through:

Find:

Change to:

Apply:

Verify again:


5. Update the system

If the kernel was upgraded, reboot the server.

Install dependencies:


6. Install Monad

Add the APT repository:

Install Monad:

Monad docs currently show testnet install instructions with the monad package pinned and held through APT. Before publishing, verify the latest testnet package version in the official docs or release notes.


7. Create the monad user

Create the directory structure:


8. Configure TrieDB

Be careful. Do not format the system disk.

Check all NVMe disks:

Pick the empty disk with no mounted filesystem.

Example:

Create the partition table:

Create a udev rule:

Reload rules:

Check LBA format

Expected:

If not:

Initialize TrieDB:

If there are no errors, TrieDB is ready.


9. Configure firewall

Optional spam protection:


10. Install OTEL collector

Metrics endpoint:


11. Download config files

Full node

Validator

These are the same config paths described in the official node-ops docs.


12. Set keystore password

Create backup directory:


13. Generate BLS and SECP keys

Mandatory external backup:

  • /opt/monad/backup/secp-backup

  • /opt/monad/backup/bls-backup

  • /opt/monad/backup/keystore-password-backup

If you lose the server and do not have these backups, your node identity cannot be recovered.


14. Configure node.toml

Open:

Beneficiary

For a full node:

For a validator:

Node name

Public full node settings

Make sure these are enabled:

For a public full node, [blocksync_override] should remain empty.


15. Sign the node name record

Then insert the values into the peer_discovery section in node.toml:


16. Optional remote config fetching

Add these values to /home/monad/.env:

Monad nodes can fetch validators.toml and forkpoint.toml automatically on startup when these variables are defined.


17. Optional trace calls

For archive or RPC-oriented nodes, you can enable call traces:

Example override:

This is useful for workloads like debug_traceTransaction.


18. Start the node

Set permissions:

Enable services:

Hard reset and restore snapshot:

Start services:

Statesync usually completes quickly on testnet, after which RPC becomes active and blocksync catches up the remainder. The official docs also describe hard reset plus snapshot restore as the normal fast recovery path.


19. Validator registration

Once the node is fully synced, you can register a validator.

Monad validator registration uses the staking precompile and the addValidator flow. The official validator docs describe starting from a synced full node and using staking CLI with the required keys and self-stake.

Install staking CLI

Recover private keys

Add validator

Notes:

  • SECP key format: 64 hex chars, no 0x

  • BLS key format: 64 hex chars, with 0x

  • amount is in MON, not wei

Verify pubkeys

Expected success output

According to Monad docs, validator registration requires valid keys and signatures, and a minimum self-stake of 100,000 MON. Activation into the active set depends on stake ranking and active-set rules.

Last updated