Releases: category-labs/monad
Release list
v0.16.1
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrades are communicated via official channels. See upgrade instructions for details.
⚠️ Mandatory upgrade for all mainnet nodes before 2026-09-02 14:30 UTC. This release sets the MONAD_TEN activation timestamp for mainnet. A node still on v0.16.0 or earlier after that instant will continue applying MONAD_NINE rules and diverge from the network.
monad (execution) v0.16.1 Changelog
Tag: v0.16.1
Commit: 7279dfc7b
Highlights
- MONAD_TEN activation on mainnet — MIP-8 (page-encoded storage) activates on mainnet at timestamp
1788359400(2026-09-02 14:30 UTC). Mainnet counterpart to the testnet activation shipped in v0.16.0. - Page-encoded timeline now required on mainnet — nodes must present either a page-encoded primary (Phase C) or an active secondary timeline (Phase A/B dual-db), or they will fail to start.
- Dual-db commit support in the ethblocks runloop, allowing nodes still in Phase A/B to commit to both timelines.
Protocol changes
- Set MONAD_TEN activation timestamp for mainnet —
1788359400(2026-09-02 14:30 UTC). MONAD_NINE remains in effect for timestamps below that. Ref: monad (execution) PR #2489 - Enforce page-encoded timeline assertion on mainnet — previously testnet-only. Nodes that have not completed Phase A (dual-db activation) will fail to start. Ref: monad (execution) PR #2489
Robustness fixes
- Allow dual-db commit in
runloop_monad_ethblockswheresecondary_dbis optional, so Phase A/B nodes commit to both timelines. Ref: monad (execution) commitdf14e67bb
Internal changes
- Consolidate dual-db mirroring behind
for_each_db, replacing duplicated commit paths inrunloop_monad. Ref: monad (execution) commitd836afc18
Full Changelog: v0.16.0...v0.16.1
v0.15.2
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrades are communicated via official channels. See upgrade instructions for details.
monad (execution) v0.15.2 Changelog
Tag: v0.15.2
Commit: 2422a8592
Highlights
- MIP-8 gas schedule — adds page-based storage gas schedule;
eth_createAccessListdeduplicates storage keys by page (activation in a future release) - Follow-up to MIP-12: Block reward validation — maximum block reward is now validated; blocks exceeding the cap are rejected
- EIP-7843: Consensus round in tx context — Monad consensus round number threaded into
evmc_tx_contextviaBlockHeader::slot_number - Dual-timeline DB support — MPT database supports a secondary page-encoded timeline; statesync works with both slot- and page-encoded databases
Protocol changes
- MIP-8: Gas schedule for page-based storage — adds page-based gas schedule (activation in a future release). Ref: monad (execution) PR #2268
- Follow-up to MIP-12: Validate maximum block reward — blocks exceeding the cap are now rejected. Ref: monad (execution) PR #2365
- EIP-7843: Thread Monad consensus round into
evmc_tx_contextviaBlockHeader::slot_number. Ref: monad (execution) PR #2324 - AMSTERDAM EVM revision — new EVM revision targeting the Amsterdam hardfork. Ref: monad (execution) PR #2368
RPC/SDK changes
eth_createAccessListnow deduplicates storage keys by page under MIP-8. Ref: monad (execution) PR #2253- Fix
eth_getStorageAtreturning 0 on page-encoded nodes. Ref: monad (execution) PR #2393 eth_callexecution revert error code changed from-32603to3— aligns with standard EVM behavior.
Robustness fixes
- Memory-bounded LRU cache for execution state reads. Ref: monad (execution) PR #2376
- Statesync: reject messages with trailing bytes. Ref: monad (execution) PR #2370
- Trim both timelines in tandem in dynamic history length adjustment. Ref: monad (execution) PR #2431
- Expose dual-DB migration phase via FFI. Ref: monad (execution) PR #2433
- Fix
monad-mpt --activate-secondarycorrupting DB metadata on nodes that previously ran--upgrade; addsmonad-mpt --repairto recover affected pools. Ref: monad (execution) PR #2403 - DbCache read-through caching — reads now cached on miss, reducing redundant disk reads during page-encoded commit. Ref: monad (execution) PR #2414
Internal changes
- Dual-timeline: MPT database supports a secondary timeline. Ref: monad (execution) PR #2228, PR #2302
- Page storage: TrieDb and runloop are page-encoding-aware; statesync works with page-encoded databases. Ref: monad (execution) PR #2354, PR #2383, PR #2385, PR #2386
monad-cli --versionnow acceptslatest_finalized. Ref: monad (execution) PR #2364- Support binary snapshot dump/load on secondary timeline and page-encoded DB. Ref: monad (execution) PR #2366
Full Changelog: v0.15.1...v0.15.2
v0.15.1
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrade instructions are communicated via official channels. See upgrade instructions for details.
monad (execution) v0.15.1
Tag: v0.15.1
Commit: 817a09f64
No execution-layer changes. The monad binary is identical to v0.15.0.
See monad-bft v0.15.1 release for full changelog.
Full Changelog: v0.15.0...v0.15.1
v0.15.0
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrades are communicated via official channels. See upgrade instructions for details.
monad (execution) v0.15.0 Changelog
Tag: v0.15.0
Commit: 817a09f64
Highlights
- One-time DB metadata migration required (
monad-mpt --upgrade) — bumps DB schema MONAD007 → MONAD008, initializing secondary timeline metadata for upcoming dual-timeline support
Robustness fixes
- Convert user-facing
MONAD_ASSERTtoMONAD_ASSERT_THROW— prevents panics on malformed RPC input - Enforce staking syscall ordering — validation now rejects staking syscalls submitted out of order
- Fix event payload overflow check — rounds up size before alignment check to prevent assertion failure on large payloads
- Fix MONAD007→MONAD008 migration data corruption on nodes with ≥15.8 TB disk — prevents db_offsets overrun and root-offsets ring bound violation during
monad-mpt --upgrade - Fix
monad-mpt --upgradecrash on legacy databases — fixes integer underflow causingAssertion 'r != MAP_FAILED'on nodes with databases created beforenum_cnv_chunkswas added to the storage pool footer
Internal changes
- Dual-timeline: add secondary timeline metadata and
monad-mpt --upgradeDB migration tool - MPT memory-ordering fix: route
version_lower_bound_reads through acquire accessor to fix data race on reader path - Fix missing cast from
monad_eth_revisiontoevmc_revision - Add
--disable-sq-thread-cpuflag tocmd/monad - Remove support for Petersburg and Constantinople forks (Ethereum replay only)
monad-mptstatus output format changed — the line previously showingMPT database has N history, earliest is X latest is Ynow readsMPT database has been configured to retain no more than Z versions., with block height on theLatest finalized is <block>line.monad-statushas been updated; operators using custom scripts parsingmonad-mptoutput should update to readLatest finalized isinstead of the oldlatest ispattern.
Full Changelog: v0.14.7...v0.15.0
v0.14.7
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrades are communicated via official channels. See upgrade instructions for details.
monad (execution) v0.14.7 Changelog
Tag: v0.14.7
Commit: 3d04e824b
v0.14.7 is a hotfix on top of v0.14.6. If upgrading from v0.14.5 or earlier, this release includes all v0.14.6 execution changes listed below.
v0.14.7 changes (hotfix)
RPC/SDK changes
- Mixed TX envelope decoding for
eth_simulateV1— accepts both direct legacy RLP list payloads and string-wrapped envelopes (EIP-2930, EIP-1559); fixes crash on legacy transactions- Ref: monad PR #2355
- Throw on missing TX result — converts
MONAD_ASSERTtoMONAD_ASSERT_THROWinexecute_block_transactionsso RPC process fails gracefully instead of crashing- Ref: monad PR #2356
v0.14.6 changes (included in this release)
RPC/SDK changes
eth_simulateV1implementation — simulate multiple transactions across multiple blocks with state/block overrides, trace transfers, and call limits- Ref: monad PR #2060
- Graceful state override failure —
eth_simulateV1state override errors now return a structured error response instead of an assertion failure- Ref: monad PR #2335
Internal changes
- Restructure
intrinsic_gasas additive feature gates (includes latent EIP-7702 gas bug fix)
Full Changelog: v0.14.6...v0.14.7
v0.14.6
⚠️ Do not upgrade your mainnet or testnet node until you receive an official announcement.
Upgrades are coordinated via official channels. See upgrade instructions for details.
monad (execution) v0.14.6 Changelog
Tag: v0.14.6
Commit: 19ea3f147
RPC/SDK changes
- Graceful state override failure —
eth_simulateV1state override errors now return a structured error response instead of an assertion failure eth_simulateV1implementation — simulate multiple transactions across multiple blocks with state/block overrides, trace transfers, and call limits
Internal changes
- Activate Prague on Ethereum mainnet replay
- Add EIP-6110 deposit requests (Ethereum replay)
- Add EIP-7691 blob parameters (Ethereum replay)
- Generalize EIP-7685 request hashing (Ethereum replay)
- Introduce in-tree
monad_eth_revisiontype, replacingevmc_revision - Vendor silkpre
is_valid_signature - Remove support for EVMC_BYZANTIUM
- Restructure
intrinsic_gasas additive feature gates (+ latent EIP-7702 gas bug fix)
Full Changelog: v0.14.5...v0.14.6
v0.14.5
monad (execution) v0.14.5 Changelog
Tag: v0.14.5
Commit: ffefb81a0
Robustness fixes
- Reject non-canonical RLP encoded strings/lists
- Ref: PR #2245
- Prevent iterator overrun on odd input length
- Ref: PR #2257
- Preserve access lists for reverted frames
- Ref: PR #2241
Internal changes
- Remove intx library, replace with custom uint128_t/uint256_t types
- Ref: PR #2143
- Make DbCache a member of TrieDb
- Ref: PR #2255
Full Changelog: v0.14.4...v0.14.5
v0.14.4
monad (execution) v0.14.4 Changelog
Tag: v0.14.4
Commit: 6c75a8851
Robustness fixes
- [Execution] Clamp precompile input allocations to prevent slow block vector
Internal changes
- [Execution] zkVM: add partial trie DB — new partial MPT implementation for the zkVM guest program (RISC-V), including RLP-encoded execution witness decoder
See monad-bft v0.14.4 release for full changelog.
Full Changelog: v0.14.3...v0.14.4
v0.14.3
Tag: v0.14.3
Commit: 7fcd693f7
Robustness fixes
- [Execution] Fix
DbCacheassert-fail when reading finalized state older than latest finalized block- Ref: PR #2190
- Replaces assertion with explicit checks; fixes incorrect
truncatedvalue propagation when walking the chain back past the latest finalized block
- [Execution] Raise
MIN_HISTORY_LENGTHfloor from 257 to 300- Ref: PR #2217
- Execution requires 256 history blocks for the block hash buffer; the old floor of 257 left only a one-block margin. Under disk pressure, history could shrink below 256 after a restart, forcing a full statesync. New floor gives ~44 blocks of headroom; also bumps the stored cap on existing DBs at init time so nodes carried over from an older binary aren't pinned at 257.
- [Execution] Fix
evm-asPushLabel encoding at offset zero for pre-Shanghai targets- Ref: PR #2213
- Fixes incorrect
PUSH0encoding in the EVM assembler for pre-Shanghai code paths
Performance changes
- [Execution] Extend trie span optimization to fnext, child_off, and SharedPtr arrays
- Ref: PR #2176
- [Execution] Remove inflight read coalescing from rwdb find path
- Ref: PR #2183
- [Execution] Elide DB fetch in
State::is_touched- Ref: PR #2198
Full Changelog: v0.14.2...v0.14.3
v0.14.2
monad (execution) v0.14.2 Changelog
Tag: v0.14.2
Commit: 169e5c45b
Robustness fixes
- [Execution] Fix possible UB in unaligned read
- Ref: PR #2168
- [Execution] Fix incorrect auto_expire_version initialization after DB reset
- Ref: PR #2167
- [Execution] Fix compaction progress reset during statesync
- Ref: PR #2133
- Fixes compaction head being incorrectly reset to 0 during statesync, causing compaction to restart from the beginning
Performance changes
- [Execution] Optimize trie node array access (8-9x speedup on compaction hot path)
- Ref: PR #2163
- Hoists base pointers for packed node arrays via
std::span<unaligned_t<T>>; reduces redundant pointer recomputation in compaction, expiration, and version tracking loops
Internal changes
- [Execution] Replace system boost fiber with submodule (boost-1.83.0)
- Ref: PR #2157
- [Execution] Separate precompile gas cost calculation from runtime implementation
- [Execution] Remove support for EVMC_FRONTIER
- Ref: PR #2041
- [Execution] Add block-level event recording for Ethereum and Monad replay
- Ref: PR #2006
- Emits BLOCK_START/BLOCK_END events during replay, making replay event streams usable for tooling