⚠️ 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.
Tags or hashes:
monad-bft(consensus): tagv0.16.5(33d9d5c03)monad(execution): tagv0.16.5(a3b16af1a)
Highlights
--triedb-pathmust name the triedb device, not a directory containing it. Packaged installs already pass/dev/triedband need no change; custom deployments should check before upgrading. See the upgrade instructions.monad-mpt --growuses the space added when the triedb device is extended in place, so archive nodes running out of disk no longer need a full--archiveand--restoreonto a new device. See the upgrade instructions for the required order.- Triedb update and compaction counters are exported as Prometheus gauges on packaged installs.
eth_simulateV1enforces a maximum response size, and an empty full state override now matches Geth.
Notable RPC/SDK changes
- [RPC] An empty full state override now zeroes the overridden account's storage, matching Geth.
- [RPC]
eth_simulateV1enforces the configured maximum response size. - [RPC]
eth_simulateV1and related paths exit gracefully when a block state merge fails, instead of terminating the request abnormally.
Notable robustness changes
- [EVM] Hardened RLP decoding of EIP-2718 transactions and EIP-4844 blob hash lists, and fixed list-prefix encoding writing past its size.
- [EVM] Hardened the offset trie decoder: the constructor validates that the data forms a tree, path length is bounded at
MAX_PATH_NIBBLES, and an out-of-bounds read inchecked_endis fixed. Not reachable in production: the offset trie is used only by execution-witness decoding, which has no caller in node execution today. - [Node ops] The execution event recorder no longer passes a null buffer to
mempcpywhen--record-exec-eventsis on. - [RPC] The triedb range query now validates its prefix key length, closing an over-read of the caller's buffer.
- [Node ops] Fixed two shutdown races: fiber pool threads could free their scheduler while another thread was still waking them, and the VM compile thread's lock was released from the wrong thread.
Notable performance changes
- [Node ops] The triedb storage pool is a single device. Opening a 700 GiB pool uses roughly 29% less peak memory in
monad-mpt. Existing pools open unchanged. - [EVM] Widened the
JUMPDESTscan index to 64-bit.
Notable internal changes
- [Node ops]
monad-mpt --growtakes up the space after the triedb device is extended in place withlvextendor a grown RAID array. It runs offline in seconds, moves no data, and can be re-run if interrupted. The node must run once on this release before the device is extended; a device extended earlier is refused. - [Node ops]
monad-nodeexports seven triedb update/compaction gauges read from a statistics file written by execution. The packaged units set--db-stats-fileand--triedb-stats-pathto the same path; both are off by default. - [EVM] The bn128 precompiles (
ecAdd,ecMul,ecPairing) are vendored in-tree with unchanged semantics, andecrecovershares one implementation with transaction sender recovery. - [EVM] MIP-8 page-storage accounting is routed through the EVMC host interface. No behaviour change.
- Upgraded
h2,rustlsand related TLS dependencies.- Ref: monad-bft PR #3268
Full Changelog: v0.16.4...v0.16.5