This page explains how to install a Monad full node and prepare it for validator use on testnet.
Recommended disk layout
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:
sshroot@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.