Mainnet Changelog
This is a curated list of only changes affecting mainnet.
note
We group changes into
- protocol changes (generally requiring a new Revision)
- generally tagged with [EVM], [Consensus], or [Network params]
- RPC/SDK behavioral changes (generally tagged with [RPC])
- performance changes
- tagged based on the nature of the change as [EVM], [Consensus], or [RPC]
- internal/node-ops changes (generally tagged as [Node ops])
v0.12.3 [2025-12-04]
Revision: MONAD_EIGHT (unchanged)
Tags or hashes:
monad-bft: tagv0.12.3-rc.2monad: tagv0.12.3-rc.2
Notable RPC/SDK changes
- [RPC] EIP-7966 (
eth_sendRawTransactionSync) support- Ref: monad-bft PR #2542
- [RPC] Populate
valuefield on traces for staking precompile syscalls (added in0.12.3-rpc-hotfix2)- Ref: monad PR #1938
Notable robustness changes
- [Consensus] Wire authentication protocol for UDP
- Adds authenticated UDP communication to improve network security
- Includes replay window adjustments for improved reliability
- Ref: monad-bft PR #2417, monad-bft PR #2544, monad-bft PR #2626, monad-bft PR #2091
- [Execution] Improve
statesyncshutdown and fix protocol corruption- Modified
statesync_server_recv()to guarantee complete reads - Ref: monad PR #1930
- Modified
- [RPC] Prevent reserve balance crash in RPC
- Add reserve balance violation error messages in call frames
- Ref: monad PR #1932, monad-bft PR #2629
- This was already previously released in
v0.12.2-rpc-hotfix
- [Consensus] Add timeout to
txpoolIPC stream- Prevents hanging connections in transaction pool communication
- Ref: monad-bft PR #2619
- [Consensus] Reject timeout certificates with empty signers
- Adds validation to prevent malformed timeout certificates
- Ref: monad-bft PR #2630
- [Consensus] Verify RaptorCast chunk length is non-zero
- Adds validation to prevent malformed RaptorCast chunks
- Ref: monad-bft PR #2638
- [Execution] Fix MPT restore bug that failed to preserve
version_lower_bound- Ref: monad PR #1955
- [Execution] Fix move trie version forward bug
- Erase versions that fall out of history range before moving forward to newer versions
- Ref: monad PR #1957
- [Execution] Fix dangling pointers to intercode
- Resolves memory safety issue with
get_codeandread_codefunctions - Ref: monad PR #1941
- Resolves memory safety issue with
- [Execution] Add retries to
runloop_monad_ethblocks- Ref: monad PR #1953
Notable performance changes
- [RPC] Improve
eth_getLogsperformance- Reduce memory copies and unify receipt-to-logs processing
- Ref: monad-bft PR #2588, monad-bft PR #2591, monad-bft PR #2631
- [Execution] Fiber: add support for move-only functors
- Improves execution efficiency by supporting move semantics
- Ref: monad PR #1936
Notable internal changes
- [RPC / Node ops] Allow RPC to run without
monad-bft- Enables standalone RPC operation for improved deployment flexibility
- Ref: monad-bft PR #2613
- [Node ops] Add
--root-offsets-chunk-countflag tomonad-mptto configure the number of chunks allocated for root offsets- Each chunk holds approximately 16.5M blocks. Previously, all nodes were hardcoded to use 2 chunks (max TrieDB capacity of ~33M blocks)
- New default: 16 must be a power of 2
- Note that the default value of 16 translates to approximately 268M blocks ~ 1240 days. In most cases the limiting factor is disk capacity which will auto-compact when filled to 80%
- Ref: monad PR #1937
- [Node ops] Peer discovery improvements
- Full nodes periodically pull validator name records for dynamic validator discovery
- Add authenticated UDP port to name record
- Ref: monad-bft PR #2607, monad-bft PR #2538
- [Node ops / Archive] Archive infrastructure improvements
- Refactor
monad-block-writerfor improved reliability with--max-blocks-per-iterconfiguration - Async backfill with traces-only archive support
- Add
require-tracesarchiver flag and indexer fallback source - Support for historical execution event archiving with generic directory archiving
- Potentially breaking: Remove
--start-blockfrommonad-archiversystemd service; operators must use imperative CLI to set start block- Example:
monad-archiver set-start-block --block 1000000 --archive-sink s3://bucket-name/path - Use
--async-backfillflag to set the async-backfill marker instead of primary marker
- Example:
- Ref: monad-bft PR #2610, monad-bft PR #2606, monad-bft PR #2598, monad-bft PR #2514, monad-bft PR #2612, monad-bft PR #2569, monad-bft PR #2623
- Refactor
- [Node ops] Networking configuration updates
- Use default MTU 1500
- Add HDR histogram for broadcast latency tracking in
monad-executorandmonad-raptorcast - Ref: monad-bft PR #2576, monad-bft PR #2602
- [Consensus] RaptorCast improvements
- Clear histogram every 30s and keep only p99 for better latency tracking
- Fix timer update after receiving control messages to ensure proper keepalives
- Ref: monad-bft PR #2627, monad-bft PR #2637
- [Consensus] Dataplane: refactor to use socket handles
- Prepares dataplane for future extension with authenticated sockets
- Ref: monad-bft PR #2458
- [Execution] Replay monad: always execute first block off latest finalized state
- Ref: monad PR #1927
- [Node ops] Txgen improvements: README and guide, nonce gaps and legacy tx options, ERC20 pools, Uniswap v3 mode, NFT sale mode, websocket and RPC request generation
v0.12.2 [2025-11-18]
The Public Mainnet phase began on 2025-11-24. As such, public mainnet started at v0.12.2.