Overview
Direct UDP enables a dedicated transport channel for transaction forwarding between Monad nodes. This feature is currently opt-in and will become required in a future release. Benefits:- Reduced Amplification: Transaction traffic is sent without 2.5x amplification when both peers have direct UDP enabled
- Dedicated Transport: Separates transaction forwarding from consensus traffic
- Performance: More efficient peer-to-peer transaction delivery
Prerequisites
- Monad Version:
v0.14.6or later - Access: Root/sudo privileges on your node
- Authenticated UDP: Already enabled (port 8001 open and configured)
- Keystore: Existing
/home/monad/monad-bft/config/id-secpfile - Network: Ability to open UDP port 8002 on your firewall
Instructions for node operators
1. Verify the Monad version
Verify the installation:2. Configure Firewall
Open UDP port 8002 for direct UDP traffic:3. Generate Updated Name Record Signature
Generate your node’s name record signature with the new direct UDP port:Important: TheExample Output:--self-record-seq-numvalue must be greater than your currentself_record_seq_numinnode.toml.
- Check your current value:
grep self_record_seq_num /home/monad/monad-bft/config/node.toml- Increment by 1
4. Update Configuration
Edit your Monad configuration:4.1 Update Network Section
Add thedirect_udp_bind_address_port parameter to [network]:
4.2 Update Peer Discovery Section
In the[peer_discovery] section, add self_direct_udp_auth_port and update the signature:
4.3 Update Peer Records (Validators Only)
If you operate a validator with downstream full nodes, update peer configurations as they enable direct UDP. For peers that have enabled direct UDP:direct_udp_port line:
5. Restart and Verify
Restart the Monad service:Verification
Check Service Status
active (running)
Verify Port Binding
Verify All Three UDP Ports
Troubleshooting
Issue: “invalid name record signature in config file”
Cause: The signature innode.toml doesn’t match the parameters. This often happens when the --direct-udp-port flag was not included when generating the signature.
Solution:
- Verify you included
--direct-udp-port 8002in themonad-sign-name-recordcommand - Verify you incremented
self_record_seq_numcorrectly - Re-run
monad-sign-name-recordwith all three ports (address, auth, direct) - Copy the new signature to
node.toml - Restart the service
Issue: Port 8002 Not Listening
Solution:Issue: Name Record Not Propagating
Cause: Theself_record_seq_num was not bumped, so peers don’t see the updated name record with the direct UDP port.
Solution:
- Check current seq_num:
grep self_record_seq_num /home/monad/monad-bft/config/node.toml - Re-run
monad-sign-name-recordwith a higher seq_num - Update
node.tomlwith the new seq_num and signature - Restart the service
Issue: Firewall Blocking Connections
Solution:Rollback Instructions
To disable direct UDP if needed:1. Generate New Signature Without Direct UDP Port
--direct-udp-port.
2. Update Configuration
Edit/home/monad/monad-bft/config/node.toml:
- Update
self_record_seq_numandself_name_record_sigin[peer_discovery] - Remove
self_direct_udp_auth_portfrom[peer_discovery] - Remove
direct_udp_bind_address_portfrom[network] - Remove all
direct_udp_portentries from peer configurations
3. Restart Service
Quick Health Check Script
Save this ascheck_direct_udp.sh for quick verification:
Additional Notes
- Backward Compatibility: Nodes can communicate with both direct-UDP-enabled and non-enabled peers
- Gradual Rollout: You can enable direct UDP at your own pace during the opt-in period
- Prerequisite: Authenticated UDP (port 8001) must be configured first
- Sequence Numbers: Always increment
self_record_seq_numwhen regenerating signatures — if not bumped, the updated name record won’t propagate - Key Reuse: Direct UDP uses your existing validator keys (secp256k1) — same as authenticated UDP
- Port Summary: 8000 (standard UDP), 8001 (authenticated UDP), 8002 (direct UDP)
Support
If you encounter issues not covered in this guide:- Check logs:
journalctl -u monad-bft -n 500 --no-pager - Verify all configuration parameters match the examples
- Ensure your firewall and network policies allow UDP/8002
- Contact Monad support with your logs and configuration (sanitized of sensitive data)

