Mainnet Changelog
This is a curated list of only changes affecting mainnet.
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.13.0 [2026-03-12]
Revision: MONAD_NINE (upgrade; Thursday, 2026-03-19 at 14:30 GMT)
Tags or hashes:
monad-bft(consensus): tagv0.13.0monad(execution): tagv0.13.0+1
Note: The canonical release version is
v0.13.0. The+1build metadata on the monad execution tag indicates a post-release rebuild that includes the reserve balance precompile fallback cost fix (PR #2109).
Highlights
- RPC:
latestblock tag:Finalized->Proposed— queries with thelatestblock tag now return data from the latest proposed block, reducing query latency foreth_getBalance,eth_call, and other state queries. - RPC:
eth_sendRawTransactionSync:Voted->Proposed— earlier receipts when using theeth_sendRawTransactionSyncmethod. - Websocket:
newHeads/logs:Finalized->Voted— earlier notifications for websocket subscribers to eithernewHeadsorlogs.
Notable protocol changes
All updates below are gated by the MONAD_NINE revision
- [EVM] MIP-3: Linear memory implementation
- Ref: monad PR #2032
- [Execution] MIP-4: Reserve balance precompile
- Ref: monad PR #2040 (scaffolding)
- Ref: monad PR #2065 (cached/incremental checks)
- Ref: monad PR #2086 (add dippedIntoReserve)
- Ref: monad PR #2106 (dippedIntoReserve argument length error)
- Ref: monad PR #2109 (fallback cost fix for clean spec)
- Ref: monad PR #2037 (skip reserve checks for init-selfdestruct)
- [EVM] MIP-5: Activate Osaka fork (CLZ opcode)
- Ref: monad PR #2024
Hard Fork: This release activates MONAD_NINE at timestamp
1773153000(testnet) /1773930600(mainnet). Nodes must upgrade before activation.
Notable RPC/SDK changes
- [RPC] Latest blocktag uses proposed blocks
- Ref: monad-bft PR #2675
- [RPC] Use voted blocks in websocket notifications
- Ref: monad-bft PR #2799
- [RPC] Add experimental flag to RPC doc macro
- Ref: monad-bft PR #2773
- [RPC] Refactor RPC middleware for improved request handling
- Ref: monad-bft PR #2805
- [RPC] Add decompression guard to RPC
- Ref: monad-bft PR #2793
Notable robustness changes
- [Consensus] Add signature verifier for Raptorcast
- Ref: monad-bft PR #2747
- [Consensus] Fix reactivate logic in r10 decoder
- Ref: monad-bft PR #2740
- [Execution] Fix buffer overflow in C->Rust logging
- Ref: monad-bft PR #2769
- [Consensus] Add global connect rate limit to wireauth
- Ref: monad-bft PR #2765
- [Consensus] Validate ping/pong source address against name record in peer discovery
- Ref: monad-bft PR #2752
- [Consensus] Persist voted_head in ledger
- Ref: monad-bft PR #2744
- [Consensus] Add dual UDP packet sender for dataplane
- Ref: monad-bft PR #2746
- [Execution] Fix ThreadSanitizer race by joining bootstrap fiber before thread exit
- Ref: monad PR #2053
- [Execution] Include account balance in selfdestruct tracer frame
- Ref: monad PR #2039
- [Consensus] Ensure proposed head is on canonical chain
- Ref: monad-bft PR #2756
- [Execution] Fix sentinel collision in compact virtual chunk offset
- Ref: monad PR #2083
- [Execution] Fix potential race condition in execute_block_transactions
- Ref: monad PR #2092
Notable internal changes
- [Consensus] Remove unneeded channels when secondary raptorcast is disabled
- Ref: monad-bft PR #2808
- [Consensus] Upgrade alloy to stable release
- Ref: monad-bft PR #2792
- [Execution] Add
evm-assyntactic sugar for VM utilities- Ref: monad PR #2097
- [Consensus] Parametrize wireauth metrics for better observability
- Ref: monad-bft PR #2692
- [Consensus] Cleanup block persist implementation
- Ref: monad-bft PR #2767
- [Consensus] Fix wip extension in block-persist
- Ref: monad-bft PR #2776
- [Consensus] Remove legacy
do_local_insert- Ref: monad-bft PR #2728
- [Consensus] Add metrics for raptorcast deserialize failures
- Ref: monad-bft PR #2789
- [RPC] Reduce RPC event server broadcast channel size
- Ref: monad-bft PR #2815
- [Consensus] Pre-TFM base fee cleanup
- Ref: monad-bft PR #2664
- [Consensus] Remove pre-TFM reserve balance logic
- Ref: monad-bft PR #2622
- [RPC] Simplify hex encoding/decoding in RPC
- Ref: monad-bft PR #2806
- [Archive] Add exists(key) to kvstore
- Ref: monad-bft PR #2688
v0.12.7 [2026-01-29]
Revision: MONAD_EIGHT (unchanged)
Notable RPC/SDK changes
- [RPC] Allow block hash as block identifier in
eth_estimateGas- Ref: monad-bft PR #2676
- [RPC] Use
RawValuefor RPC id to preserve original JSON types- Reduces effectiveness of DoS attacks using large JSON arrays/dicts in request IDs
- Ref: monad-bft PR #2455
Notable robustness changes
- [Consensus] Remove consecutive sequence number assertion
- Ref: monad-bft PR #2704
- [Consensus] Improve liveness when advancing round using TC from timeout messages
- Ref: monad-bft PR #2701
- [Consensus] Disallow creating an empty validator set
- Ref: monad-bft PR #2682
Notable internal changes
- [Consensus] Add security tests for
secp256k1- Adds Wycheproof tests, malleability tests, and security unit tests
- Ref: monad-bft PR #2706
- [Node ops] Update
rkyvand other dependencies- Ref: monad-bft PR #2702
- [Consensus] Return bound socket addresses synchronously in dataplane
- Ref: monad-bft PR #2653
- [Consensus] Rename state backend cache for clarity
- Ref: monad-bft PR #2699
v0.12.6 [2026-01-14]
Revision: MONAD_EIGHT (unchanged)
Tags or hashes:
monad-bft: tagv0.12.6monad: tagv0.12.6
Notable RPC/SDK changes
- [RPC] Fix depth bug in selfdestructing call frames
- Ref: monad PR #1977
- [RPC] Prestate tracer conformance fixes
- Ref: monad PR #1946
Notable robustness changes
- [Consensus] Add signature verification rate limiting with authenticated peer bypass
- Ref: monad-bft PR #2601
- [Consensus] Validate confirm group message before updating peers
- Ref: monad-bft PR #2680
- [Consensus] Use Tai64N directly for wireauth timestamp comparison
- Ref: monad-bft PR #2678
- [Consensus] Improve RaptorCast decoding cache eviction
- Ref: monad-bft PR #2651
- [Consensus] Fix blocksync in-flight request tracking on cache hydration
- Ref: monad-bft PR #2635
- [Execution] Update triedb voted metadata before executing proposal
- Solves a race condition between Voted updates through websocket and corresponding JSON-RPC calls
- Ref: monad PR #1964
- [Node ops] Persist peers periodically for improved discovery resilience
- Ref: monad-bft PR #2633
Notable performance changes
- [Consensus] Boost dataplane throughput with ring buffer implementation
- Ref: monad-bft PR #2596
- [Execution] Native implementation for
MLOAD,MSTORE,MSTORE8,CALLDATALOADopcodes- Ref: monad PR #1963
- [Execution] Improve snapshot write performance
- Ref: monad PR #1973, monad PR #1960
- [Execution] Optimize database history length adjustment with binary search
- Ref: monad PR #1922
- [Execution] Unify single buffer and scatter read handling in AsyncIO
- Ref: monad PR #1944
Notable internal changes
- [Node ops] Docker single-node container updates for prebuilt images
- Fixes to Local Docker installation
- Ref: monad-bft PR #2674
- [Consensus] Add support for generic txpool sidecars
- Enables IPC transaction priority and forwarding controls
- Ref: monad-bft PR #2557
- [EVM] Osaka fork preparation
- Modexp gas changes and upper bound (EIP-7823/EIP-7883)
- Implement
CLZopcode- Ref: monad PR #1970, monad PR #1981
- [Node ops] Accept
--hyphen-stylelong options in CLI- Ref: monad PR #2005
- [Node ops / Archive] Archive pipeline improvements
- Add
WritePolicytoKVStorefor conditional write protection (NoClobber) - Add BFT-uploading stats logging
- Ref: monad-bft PR #2649, monad-bft PR #2661
- Add
- [Node ops] Simplify RPC txpool status tracking
- Ref: monad-bft PR #2644
- [Node ops] Snapshot tooling improvements in
monad_cli- Add
--dump_concurrency_limitparameter - Add sharding support for distributed snapshot creation
- Ref: monad PR #1967, monad PR #1965
- Add
- [Node ops] Add RaptorCast decoding cache metrics
- Ref: monad-bft PR #2667
- [Execution] Add
CommitBuilderAPI to execution database- Ref: monad PR #1968
- [Execution] Remove legacy
using_chunks_for_root_offsetsmetadata field- Ref: monad PR #1943
- [Node ops / Txgen] Add ERC-4337 + EIP-7702 generator (
erc4337_7702_bundled)- Ref: monad-bft PR #2628
- [Node ops] Add systemd service scripts for
blockcapdand execution events archivers- Ref: monad-bft PR #2590
- [SDK] Add
monad_event_resolve_ring_fileAPI- Ref: monad PR #1741
- [Execution] Enable VM host exception handling outside VM
- Ref: monad PR #1990
v0.12.4 [2025-12-05]
Revision: MONAD_EIGHT (unchanged)
Tags or hashes:
monad-bft: tagv0.12.4monad: tagv0.12.4(unchanged from v0.12.3)
Notable internal changes
- [Node ops] Fix peer discovery port configuration when constructing self name record
- Use port from peer discovery config instead of bound socket when constructing self name record. This bug affected node operators using a NAT.
- Ref: monad-bft PR #2655
v0.12.3 [2025-12-04]
Revision: MONAD_EIGHT (unchanged)
Tags or hashes:
monad-bft: tagv0.12.3monad: tagv0.12.3
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.