> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Testnet Changelog

This is a curated list of only changes affecting [testnet](/developer-essentials/testnets#testnet).

<Note>
  We group changes into

  * protocol changes (generally requiring a new [Revision](/developer-essentials/changelog#revisions))
    * 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]**)
</Note>

## v0.13.1 \[2026-03-16]

Revision: [`MONAD_NINE`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft` (consensus): [tag `v0.13.1`](https://github.com/category-labs/monad-bft/releases/tag/v0.13.1) (`7db6cea2`)
* `monad` (execution): [tag `v0.13.1`](https://github.com/category-labs/monad/releases/tag/v0.13.1) (`722cbf5b5`)

> **Note:** This is a patch release based on v0.13.0 to fix State Archive node RPC issues. The monad (execution) tag points to the same commit as v0.13.0.

#### Notable robustness changes

* **\[RPC]** Use latest voted as fallback for last\_proposed
  * Ref: [monad-bft PR #2857](https://github.com/category-labs/monad-bft/pull/2857)
  * Fixes State Archive node RPC returning stale block data when `last_proposed` is unavailable

## v0.13.0 \[2026-03-05]

Revision: [`MONAD_NINE`](/developer-essentials/changelog#revisions) (upgrade; Tuesday, 2026-03-10 at 14:30 GMT)

Tags or hashes:

* `monad-bft` (consensus): [tag `v0.13.0`](https://github.com/category-labs/monad-bft/releases/tag/v0.13.0)
* `monad` (execution): [tag `v0.13.0+1`](https://github.com/category-labs/monad/releases/tag/v0.13.0+1)

> **Note:** The canonical release version is `v0.13.0`. The `+1` build metadata on the monad execution tag indicates a post-release rebuild that includes the reserve balance precompile fallback cost fix ([PR #2109](https://github.com/category-labs/monad/pull/2109)).

#### Highlights

* **RPC: `latest` block tag: `Finalized` -> `Proposed`** — queries with the `latest` block tag now return data from the latest proposed block, reducing query latency for `eth_getBalance`, `eth_call`, and other state queries.
* **RPC: `eth_sendRawTransactionSync`: `Voted` -> `Proposed`** — earlier receipts when using the `eth_sendRawTransactionSync` method.
* **Websocket: `newHeads/logs`: `Finalized` -> `Voted`** — earlier notifications for websocket subscribers to either `newHeads` or `logs`.

#### Notable protocol changes

All updates below are gated by the `MONAD_NINE` revision

* **\[EVM]** [MIP-3](https://github.com/monad-crypto/MIPs/blob/main/MIPS/MIP-3.md): Linear memory implementation
  * Ref: [monad PR #2032](https://github.com/category-labs/monad/pull/2032)
* **\[Execution]** [MIP-4](https://github.com/monad-crypto/MIPs/blob/main/MIPS/MIP-4.md): Reserve balance precompile
  * Ref: [monad PR #2040](https://github.com/category-labs/monad/pull/2040) (scaffolding)
  * Ref: [monad PR #2065](https://github.com/category-labs/monad/pull/2065) (cached/incremental checks)
  * Ref: [monad PR #2086](https://github.com/category-labs/monad/pull/2086) (add dippedIntoReserve)
  * Ref: [monad PR #2106](https://github.com/category-labs/monad/pull/2106) (dippedIntoReserve argument length error)
  * Ref: [monad PR #2109](https://github.com/category-labs/monad/pull/2109) (fallback cost fix for clean spec)
  * Ref: [monad PR #2037](https://github.com/category-labs/monad/pull/2037) (skip reserve checks for init-selfdestruct)
* **\[EVM]** [MIP-5](https://github.com/monad-crypto/MIPs/blob/main/MIPS/MIP-5.md): Activate Osaka fork (CLZ opcode)
  * Ref: [monad PR #2024](https://github.com/category-labs/monad/pull/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](https://github.com/category-labs/monad-bft/pull/2675)
* **\[RPC]** Use voted blocks in websocket notifications
  * Ref: [monad-bft PR #2799](https://github.com/category-labs/monad-bft/pull/2799)
* **\[RPC]** Add experimental flag to RPC doc macro
  * Ref: [monad-bft PR #2773](https://github.com/category-labs/monad-bft/pull/2773)
* **\[RPC]** Refactor RPC middleware for improved request handling
  * Ref: [monad-bft PR #2805](https://github.com/category-labs/monad-bft/pull/2805)
* **\[RPC]** Add decompression guard to RPC
  * Ref: [monad-bft PR #2793](https://github.com/category-labs/monad-bft/pull/2793)

#### Notable robustness changes

* **\[Consensus]** Add signature verifier for Raptorcast
  * Ref: [monad-bft PR #2747](https://github.com/category-labs/monad-bft/pull/2747)
* **\[Consensus]** Fix reactivate logic in r10 decoder
  * Ref: [monad-bft PR #2740](https://github.com/category-labs/monad-bft/pull/2740)
* **\[Execution]** Fix buffer overflow in C->Rust logging
  * Ref: [monad-bft PR #2769](https://github.com/category-labs/monad-bft/pull/2769)
* **\[Consensus]** Add global connect rate limit to wireauth
  * Ref: [monad-bft PR #2765](https://github.com/category-labs/monad-bft/pull/2765)
* **\[Consensus]** Validate ping/pong source address against name record in peer discovery
  * Ref: [monad-bft PR #2752](https://github.com/category-labs/monad-bft/pull/2752)
* **\[Consensus]** Persist voted\_head in ledger
  * Ref: [monad-bft PR #2744](https://github.com/category-labs/monad-bft/pull/2744)
* **\[Consensus]** Add dual UDP packet sender for dataplane
  * Ref: [monad-bft PR #2746](https://github.com/category-labs/monad-bft/pull/2746)
* **\[Execution]** Fix ThreadSanitizer race by joining bootstrap fiber before thread exit
  * Ref: [monad PR #2053](https://github.com/category-labs/monad/pull/2053)
* **\[Execution]** Include account balance in selfdestruct tracer frame
  * Ref: [monad PR #2039](https://github.com/category-labs/monad/pull/2039)
* **\[Consensus]** Ensure proposed head is on canonical chain
  * Ref: [monad-bft PR #2756](https://github.com/category-labs/monad-bft/pull/2756)
* **\[Execution]** Fix sentinel collision in compact virtual chunk offset
  * Ref: [monad PR #2083](https://github.com/category-labs/monad/pull/2083)
* **\[Execution]** Fix potential race condition in execute\_block\_transactions
  * Ref: [monad PR #2092](https://github.com/category-labs/monad/pull/2092)

#### Notable internal changes

* **\[Consensus]** Remove unneeded channels when secondary raptorcast is disabled
  * Ref: [monad-bft PR #2808](https://github.com/category-labs/monad-bft/pull/2808)
* **\[Consensus]** Upgrade alloy to stable release
  * Ref: [monad-bft PR #2792](https://github.com/category-labs/monad-bft/pull/2792)
* **\[Execution]** Add `evm-as` syntactic sugar for VM utilities
  * Ref: [monad PR #2097](https://github.com/category-labs/monad/pull/2097)
* **\[Consensus]** Parametrize wireauth metrics for better observability
  * Ref: [monad-bft PR #2692](https://github.com/category-labs/monad-bft/pull/2692)
* **\[Consensus]** Cleanup block persist implementation
  * Ref: [monad-bft PR #2767](https://github.com/category-labs/monad-bft/pull/2767)
* **\[Consensus]** Fix wip extension in block-persist
  * Ref: [monad-bft PR #2776](https://github.com/category-labs/monad-bft/pull/2776)
* **\[Consensus]** Remove legacy `do_local_insert`
  * Ref: [monad-bft PR #2728](https://github.com/category-labs/monad-bft/pull/2728)
* **\[Consensus]** Add metrics for raptorcast deserialize failures
  * Ref: [monad-bft PR #2789](https://github.com/category-labs/monad-bft/pull/2789)
* **\[RPC]** Reduce RPC event server broadcast channel size
  * Ref: [monad-bft PR #2815](https://github.com/category-labs/monad-bft/pull/2815)
* **\[Consensus]** Pre-TFM base fee cleanup
  * Ref: [monad-bft PR #2664](https://github.com/category-labs/monad-bft/pull/2664)
* **\[Consensus]** Remove pre-TFM reserve balance logic
  * Ref: [monad-bft PR #2622](https://github.com/category-labs/monad-bft/pull/2622)
* **\[RPC]** Simplify hex encoding/decoding in RPC
  * Ref: [monad-bft PR #2806](https://github.com/category-labs/monad-bft/pull/2806)
* **\[Archive]** Add exists(key) to kvstore
  * Ref: [monad-bft PR #2688](https://github.com/category-labs/monad-bft/pull/2688)

## v0.12.7

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (unchanged)

#### Notable RPC/SDK changes

* **\[RPC]** Allow block hash as block identifier in `eth_estimateGas`
  * Ref: [monad-bft PR #2676](https://github.com/category-labs/monad-bft/pull/2676)
* **\[RPC]** Use `RawValue` for 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](https://github.com/category-labs/monad-bft/pull/2455)

#### Notable robustness changes

* **\[Consensus]** Remove consecutive sequence number assertion
  * Ref: [monad-bft PR #2704](https://github.com/category-labs/monad-bft/pull/2704)
* **\[Consensus]** Improve liveness when advancing round using TC from timeout messages
  * Ref: [monad-bft PR #2701](https://github.com/category-labs/monad-bft/pull/2701)
* **\[Consensus]** Disallow creating an empty validator set
  * Ref: [monad-bft PR #2682](https://github.com/category-labs/monad-bft/pull/2682)

#### Notable internal changes

* **\[Consensus]** Add security tests for `secp256k1`
  * Adds Wycheproof tests, malleability tests, and security unit tests
  * Ref: [monad-bft PR #2706](https://github.com/category-labs/monad-bft/pull/2706)
* **\[Node ops]** Update `rkyv` and other dependencies
  * Ref: [monad-bft PR #2702](https://github.com/category-labs/monad-bft/pull/2702)
* **\[Consensus]** Return bound socket addresses synchronously in dataplane
  * Ref: [monad-bft PR #2653](https://github.com/category-labs/monad-bft/pull/2653)
* **\[Consensus]** Rename state backend cache for clarity
  * Ref: [monad-bft PR #2699](https://github.com/category-labs/monad-bft/pull/2699)

## v0.12.6 \[2026-01-07]

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.12.6`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.6)
* `monad`: [tag `v0.12.6`](https://github.com/category-labs/monad/releases/tag/v0.12.6)

#### Notable RPC/SDK changes

* **\[RPC]** Fix depth bug in selfdestructing call frames
  * Ref: [monad PR #1977](https://github.com/category-labs/monad/pull/1977)
* **\[RPC]** Prestate tracer conformance fixes
  * Ref: [monad PR #1946](https://github.com/category-labs/monad/pull/1946)

#### Notable robustness changes

* **\[Consensus]** Add signature verification rate limiting with authenticated peer bypass
  * Ref: [monad-bft PR #2601](https://github.com/category-labs/monad-bft/pull/2601)
* **\[Consensus]** Validate confirm group message before updating peers
  * Ref: [monad-bft PR #2680](https://github.com/category-labs/monad-bft/pull/2680)
* **\[Consensus]** Use Tai64N directly for wireauth timestamp comparison
  * Ref: [monad-bft PR #2678](https://github.com/category-labs/monad-bft/pull/2678)
* **\[Consensus]** Improve RaptorCast decoding cache eviction
  * Ref: [monad-bft PR #2651](https://github.com/category-labs/monad-bft/pull/2651)
* **\[Consensus]** Fix blocksync in-flight request tracking on cache hydration
  * Ref: [monad-bft PR #2635](https://github.com/category-labs/monad-bft/pull/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](https://github.com/category-labs/monad/pull/1964)
* **\[Node ops]** Persist peers periodically for improved discovery resilience
  * Ref: [monad-bft PR #2633](https://github.com/category-labs/monad-bft/pull/2633)

#### Notable performance changes

* **\[Consensus]** Boost dataplane throughput with ring buffer implementation
  * Ref: [monad-bft PR #2596](https://github.com/category-labs/monad-bft/pull/2596)
* **\[Execution]** Native implementation for `MLOAD`, `MSTORE`, `MSTORE8`, `CALLDATALOAD` opcodes
  * Ref: [monad PR #1963](https://github.com/category-labs/monad/pull/1963)
* **\[Execution]** Improve snapshot write performance
  * Ref: [monad PR #1973](https://github.com/category-labs/monad/pull/1973), [monad PR #1960](https://github.com/category-labs/monad/pull/1960)
* **\[Execution]** Optimize database history length adjustment with binary search
  * Ref: [monad PR #1922](https://github.com/category-labs/monad/pull/1922)
* **\[Execution]** Unify single buffer and scatter read handling in AsyncIO
  * Ref: [monad PR #1944](https://github.com/category-labs/monad/pull/1944)

#### Notable internal changes

* **\[Node ops]** Docker single-node container updates for prebuilt images
  * Fixes to [Local Docker installation](https://github.com/category-labs/monad-bft/blob/master/README.md#using-pre-built-images)
  * Ref: [monad-bft PR #2674](https://github.com/category-labs/monad-bft/pull/2674)
* **\[Consensus]** Add support for generic txpool sidecars
  * Enables IPC transaction priority and forwarding controls
  * Ref: [monad-bft PR #2557](https://github.com/category-labs/monad-bft/pull/2557)
* **\[EVM]** Osaka fork preparation
  * Modexp gas changes and upper bound (EIP-7823/EIP-7883)
  * Implement `CLZ` opcode
    * Ref: [monad PR #1970](https://github.com/category-labs/monad/pull/1970), [monad PR #1981](https://github.com/category-labs/monad/pull/1981)
* **\[Node ops]** Accept `--hyphen-style` long options in CLI
  * Ref: [monad PR #2005](https://github.com/category-labs/monad/pull/2005)
* **\[Node ops / Archive]** Archive pipeline improvements
  * Add `WritePolicy` to `KVStore` for conditional write protection (`NoClobber`)
  * Add BFT-uploading stats logging
  * Ref: [monad-bft PR #2649](https://github.com/category-labs/monad-bft/pull/2649), [monad-bft PR #2661](https://github.com/category-labs/monad-bft/pull/2661)
* **\[Node ops]** Simplify RPC txpool status tracking
  * Ref: [monad-bft PR #2644](https://github.com/category-labs/monad-bft/pull/2644)
* **\[Node ops]** Snapshot tooling improvements in `monad_cli`
  * Add `--dump_concurrency_limit` parameter
  * Add sharding support for distributed snapshot creation
  * Ref: [monad PR #1967](https://github.com/category-labs/monad/pull/1967), [monad PR #1965](https://github.com/category-labs/monad/pull/1965)
* **\[Node ops]** Add RaptorCast decoding cache metrics
  * Ref: [monad-bft PR #2667](https://github.com/category-labs/monad-bft/pull/2667)
* **\[Execution]** Add `CommitBuilder` API to execution database
  * Ref: [monad PR #1968](https://github.com/category-labs/monad/pull/1968)
* **\[Execution]** Remove legacy `using_chunks_for_root_offsets` metadata field
  * Ref: [monad PR #1943](https://github.com/category-labs/monad/pull/1943)
* **\[Node ops / Txgen]** Add ERC-4337 + EIP-7702 generator (`erc4337_7702_bundled`)
  * Ref: [monad-bft PR #2628](https://github.com/category-labs/monad-bft/pull/2628)
* **\[Node ops]** Add systemd service scripts for `blockcapd` and execution events archivers
  * Ref: [monad-bft PR #2590](https://github.com/category-labs/monad-bft/pull/2590)
* **\[SDK]** Add `monad_event_resolve_ring_file` API
  * Ref: [monad PR #1741](https://github.com/category-labs/monad/pull/1741)
* **\[Execution]** Enable VM host exception handling outside VM
  * Ref: [monad PR #1990](https://github.com/category-labs/monad/pull/1990)

## v0.12.5 \[2025-12-16]

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.12.5`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.5)
* `monad`: [tag `v0.12.5`](https://github.com/category-labs/monad/releases/tag/v0.12.5)

#### Notable network changes

* **\[Network reset]** `testnet` reset from genesis starting from `MONAD_EIGHT`
  * Increases total supply to 100 B, consistent with `mainnet`
  * Clears a path to eliminate dead code (revisions required for early `testnet`)
  * Ref: [monad PR #1983](https://github.com/category-labs/monad/pull/1983), [monad-bft PR #2673](https://github.com/category-labs/monad-bft/pull/2673)

<Warning title="Testnet Reset">
  `testnet` has been reset from genesis as of `2025-12-16` (`v0.12.5`). The changelog below this point (pre-`v0.12.5`) is preserved for posterity.
</Warning>

## v0.12.4 \[2025-12-05]

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.12.4`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.4)
* `monad`: [tag `v0.12.4`](https://github.com/category-labs/monad/releases/tag/v0.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](https://github.com/category-labs/monad-bft/pull/2655)

## v0.12.3 \[2025-12-04]

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.12.3-rc.2`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.3-rc.2)
* `monad`: [tag `v0.12.3-rc.2`](https://github.com/category-labs/monad/releases/tag/v0.12.3-rc.2)

#### Notable RPC/SDK changes

* **\[RPC]** [EIP-7966](https://eips.ethereum.org/EIPS/eip-7966) (`eth_sendRawTransactionSync`) support
  * Ref: [monad-bft PR #2542](https://github.com/category-labs/monad-bft/pull/2542)
* **\[RPC]** Populate `value` field on traces for staking precompile syscalls (added in `0.12.3-rpc-hotfix2`)
  * Ref: [monad PR #1938](https://github.com/category-labs/monad/pull/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](https://github.com/category-labs/monad-bft/pull/2417), [monad-bft PR #2544](https://github.com/category-labs/monad-bft/pull/2544), [monad-bft PR #2626](https://github.com/category-labs/monad-bft/pull/2626), [monad-bft PR #2091](https://github.com/category-labs/monad-bft/pull/2091)
* **\[Execution]** Improve `statesync` shutdown and fix protocol corruption
  * Modified `statesync_server_recv()` to guarantee complete reads
  * Ref: [monad PR #1930](https://github.com/category-labs/monad/pull/1930)
* **\[RPC]** Prevent reserve balance crash in RPC
  * Add reserve balance violation error messages in call frames
  * Ref: [monad PR #1932](https://github.com/category-labs/monad/pull/1932), [monad-bft PR #2629](https://github.com/category-labs/monad-bft/pull/2629)
  * This was already previously released in `v0.12.2-rpc-hotfix`
* **\[Consensus]** Add timeout to `txpool` IPC stream
  * Prevents hanging connections in transaction pool communication
  * Ref: [monad-bft PR #2619](https://github.com/category-labs/monad-bft/pull/2619)
* **\[Consensus]** Reject timeout certificates with empty signers
  * Adds validation to prevent malformed timeout certificates
  * Ref: [monad-bft PR #2630](https://github.com/category-labs/monad-bft/pull/2630)
* **\[Consensus]** Verify RaptorCast chunk length is non-zero
  * Adds validation to prevent malformed RaptorCast chunks
  * Ref: [monad-bft PR #2638](https://github.com/category-labs/monad-bft/pull/2638)
* **\[Execution]** Fix MPT restore bug that failed to preserve `version_lower_bound`
  * Ref: [monad PR #1955](https://github.com/category-labs/monad/pull/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](https://github.com/category-labs/monad/pull/1957)
* **\[Execution]** Fix dangling pointers to intercode
  * Resolves memory safety issue with `get_code` and `read_code` functions
  * Ref: [monad PR #1941](https://github.com/category-labs/monad/pull/1941)
* **\[Execution]** Add retries to `runloop_monad_ethblocks`
  * Ref: [monad PR #1953](https://github.com/category-labs/monad/pull/1953)

#### Notable performance changes

* **\[RPC]** Improve `eth_getLogs` performance
  * Reduce memory copies and unify receipt-to-logs processing
  * Ref: [monad-bft PR #2588](https://github.com/category-labs/monad-bft/pull/2588), [monad-bft PR #2591](https://github.com/category-labs/monad-bft/pull/2591), [monad-bft PR #2631](https://github.com/category-labs/monad-bft/pull/2631)
* **\[Execution]** Fiber: add support for move-only functors
  * Improves execution efficiency by supporting move semantics
  * Ref: [monad PR #1936](https://github.com/category-labs/monad/pull/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](https://github.com/category-labs/monad-bft/pull/2613)
* **\[Node ops]** Add `--root-offsets-chunk-count` flag to `monad-mpt` to 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](https://github.com/category-labs/monad/pull/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](https://github.com/category-labs/monad-bft/pull/2607), [monad-bft PR #2538](https://github.com/category-labs/monad-bft/pull/2538)
* **\[Node ops / Archive]** Archive infrastructure improvements
  * Refactor `monad-block-writer` for improved reliability with `--max-blocks-per-iter` configuration
  * Async backfill with traces-only archive support
  * Add `require-traces` archiver flag and indexer fallback source
  * Support for historical execution event archiving with generic directory archiving
  * **Potentially breaking: Remove `--start-block` from `monad-archiver` systemd 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-backfill` flag to set the async-backfill marker instead of primary marker
  * Ref: [monad-bft PR #2610](https://github.com/category-labs/monad-bft/pull/2610), [monad-bft PR #2606](https://github.com/category-labs/monad-bft/pull/2606), [monad-bft PR #2598](https://github.com/category-labs/monad-bft/pull/2598), [monad-bft PR #2514](https://github.com/category-labs/monad-bft/pull/2514), [monad-bft PR #2612](https://github.com/category-labs/monad-bft/pull/2612), [monad-bft PR #2569](https://github.com/category-labs/monad-bft/pull/2569), [monad-bft PR #2623](https://github.com/category-labs/monad-bft/pull/2623)
* **\[Node ops]** Networking configuration updates
  * Use default MTU 1500
  * Add HDR histogram for broadcast latency tracking in `monad-executor` and `monad-raptorcast`
  * Ref: [monad-bft PR #2576](https://github.com/category-labs/monad-bft/pull/2576), [monad-bft PR #2602](https://github.com/category-labs/monad-bft/pull/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](https://github.com/category-labs/monad-bft/pull/2627), [monad-bft PR #2637](https://github.com/category-labs/monad-bft/pull/2637)
* **\[Consensus]** Dataplane: refactor to use socket handles
  * Prepares dataplane for future extension with authenticated sockets
  * Ref: [monad-bft PR #2458](https://github.com/category-labs/monad-bft/pull/2458)
* **\[Execution]** Replay monad: always execute first block off latest finalized state
  * Ref: [monad PR #1927](https://github.com/category-labs/monad/pull/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
  * Ref: [monad-bft PR #2568](https://github.com/category-labs/monad-bft/pull/2568), [monad-bft PR #2567](https://github.com/category-labs/monad-bft/pull/2567), [monad-bft PR #2577](https://github.com/category-labs/monad-bft/pull/2577), [monad-bft PR #2600](https://github.com/category-labs/monad-bft/pull/2600), [monad-bft PR #2527](https://github.com/category-labs/monad-bft/pull/2527), [monad-bft PR #2394](https://github.com/category-labs/monad-bft/pull/2394), [monad-bft PR #2608](https://github.com/category-labs/monad-bft/pull/2608)

## v0.12.2 \[2025-11-18]

Revision: [`MONAD_EIGHT`](/developer-essentials/changelog#revisions) (upgrade; Wednesday, 2025-11-19 at 14:30 GMT)

Tags or hashes:

* `monad-bft`: [tag `v0.12.2-rc`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.2-rc)
* `monad`: [tag `v0.12.2-rc`](https://github.com/category-labs/monad/releases/tag/v0.12.2-rc)

#### Notable protocol changes

All updates below are gated by the `MONAD_EIGHT` revision

* **\[Execution]** Reserve balance checks now use the final state code hash. This makes checks
  slightly more liberal (less likely to revert transactions during execution), and also makes the
  implementation closer to the
  [Coq model](https://category-labs.github.io/category-research/reserve-balance-coq-proofs/monad.proofs.reservebal.html#execValidatedTx)
  that was proven correct under some assumptions.
  * This changes the behavior of the following corner case:
    * In transaction 1, account X is sent a small amount of MON (e.g. 5 MON)
    * Then (much later) in transaction 2, someone both deploys a smart contract wallet at account
      X and sends MON out of that smart contract.
    * Previously, transaction 2's execution would treat account X as an EOA and apply reserve
      balance checks on it, thus reverting the transaction because it would be a dipping
      transaction that was not pre-authorized by consensus.
    * After this change, account X will be treated as a smart contract account and
      will be omitted from reserve balance checks.
    * Note that smart contract addresses are deterministic, making it effectively impossible for
      an address that receives a code deployment to also be an EOA (i.e. to correspond to a
      private key).
  * Ref: [monad PR #1916](https://github.com/category-labs/monad/pull/1916),
    [monad PR #1917](https://github.com/category-labs/monad/pull/1917)
* **\[EVM]** Reduce pagination on staking precompile inverse mappings from 100 to 50
  * Applies to `precompile_get_delegations()` and `precompile_get_delegators()`
  * Ref: [monad PR #1920](https://github.com/category-labs/monad/pull/1920)

#### Notable deployment changes

* **\[SDK]** Execution events no longer require a special "preview" release to enable all EVM notifications (there are no more `--exec-events` special versions)
* **\[SDK]** Fix race condition in event ring create
  * Ref: [monad PR #1914](https://github.com/category-labs/monad/pull/1914)

#### Notable robustness changes

* **\[RPC]** Fix `eth_feeHistory`
  * Ref: [monad-bft PR #2366](https://github.com/category-labs/monad-bft/pull/2366)
* **\[Consensus]** Update transaction classification logic to apply emptying before delegation
  * Improves delegation ordering in `try_apply_block_fees`
  * Ref: [monad-bft PR #2561](https://github.com/category-labs/monad-bft/pull/2561)
* **\[RPC]** Check reserve balance in `eth_call`
  * Prevent simulated transactions from violating reserve balance
  * Call `revert_transaction` in `eth_call` implementation
  * Ref: [monad PR #1912](https://github.com/category-labs/monad/pull/1912)
* **\[Execution]** Failsafe sanity checks for reward system transactions
  * Ref: [monad PR #1921](https://github.com/category-labs/monad/pull/1921)
* **\[Node ops]** Fix remotely fetched `forkpoint.toml` write format
  * Ensures forkpoint files are written in the correct format when fetched from remote sources
  * Ref: [monad-bft PR #2554](https://github.com/category-labs/monad-bft/pull/2554)
* **\[Node ops]** Fix `monad-keystore` key corruption issue
  * `to_bls` and `to_secp` now consume secret to prevent corrupted keystore files
  * Add tests for command line keystore app to verify all flags combinations work correctly
  * Ref: [monad-bft PR #2553](https://github.com/category-labs/monad-bft/pull/2553)
* **\[Execution]** Fix bad write offset in `storage_pool` `try_trim_contents()` when bytes to start TRIM is not a multiple of disk page size
  * Ref: [monad PR #1908](https://github.com/category-labs/monad/pull/1908)
* **\[RPC]** Use txpool bridge channel size for ratelimiting
  * Prevents `try_send` method from failing by using channel capacity for `eth_sendRawTransaction` ratelimiting
  * Ref: [monad-bft PR #2506](https://github.com/category-labs/monad-bft/pull/2506)
* **\[Consensus]** Improve RaptorCast message validation
  * Add sanity check for `chunk_id` range in message parsing
  * Reject overflowing `merkle_leaf_idx` in merkle proof construction
  * Update calculation of `encoded_symbol_capacity` in decoder
  * Ref: [monad-bft PR #2541](https://github.com/category-labs/monad-bft/pull/2541)
* **\[Consensus]** Improve RaptorCast group invite response checks
  * Add sanity check to prevent processing group invite accept after reject from same full node
  * Ref: [monad-bft PR #2574](https://github.com/category-labs/monad-bft/pull/2574)
* **\[Consensus]** Update txpool insertion policy - make balance check stricter
  * Ref: [monad-bft PR #2575](https://github.com/category-labs/monad-bft/pull/2575)

#### Notable performance changes

* **\[Consensus]** Add dataplane warnings when priority queues are overrun
  * Sets total priority queue capacity to 100MB per priority queue (200MB total max)
  * Messages will be dropped with warnings logged if capacity is exceeded
  * Ref: [monad-bft PR #2559](https://github.com/category-labs/monad-bft/pull/2559)
* **\[Execution / Node ops]** Remove read-only database `io_uring` SQ poll thread
  * **IMPORTANT**: Operators with `monad-execution` systemctl overrides should make the appropriate changes to eliminate the `--ro_sq_thread_cpu` parameter as demonstrated in [monad-bft PR #2558](https://github.com/category-labs/monad-bft/pull/2558). Overrides are commonly set when running an RPC or archive node with `--trace_calls` enabled.
  * Reduces thread contention during statesync, improving block execution performance
  * Make `ro_sq_thread_cpu` argument optional, remove from default configuration
  * Ref: [monad PR #1911](https://github.com/category-labs/monad/pull/1911), [monad-bft PR #2558](https://github.com/category-labs/monad-bft/pull/2558)
* **\[RPC]** Move recover authority logic inside submitted lambda for `eth_call`
  * Avoid blocking on fiber promises when called from rust thread, preventing performance issues
  * Replace parallelization with single call to `recover_authority()` since `eth_call` transactions have single authority
  * Ref: [monad PR #1827](https://github.com/category-labs/monad/pull/1827)
* **\[Execution]** Remove `iopoll` support
  * Ref: [monad PR #1910](https://github.com/category-labs/monad/pull/1910)

#### Notable internal changes

* **\[Node ops]** Add `monad-version` crate for git version info in binaries
  * Ref: [monad-bft PR #2572](https://github.com/category-labs/monad-bft/pull/2572)
* **\[Node ops]** Add CLI argument for number of fibers in trace transaction execution pool (default: 100)
  * Ref: [monad-bft PR #2584](https://github.com/category-labs/monad-bft/pull/2584)
* **\[Node ops]** Update block reward for mainnet
  * Ref: [monad-bft PR #2582](https://github.com/category-labs/monad-bft/pull/2582)
* **\[Node ops]** Add block writer binary for testing and debugging
  * Ref: [monad-bft PR #2546](https://github.com/category-labs/monad-bft/pull/2546)
* **\[Node ops]** Make cruft timer retention configurable
  * Add environment variable support for artifact retention times (override in `/home/monad/.env`)
  * Ref: [monad-bft PR #2548](https://github.com/category-labs/monad-bft/pull/2548)
* **\[Node ops]** Add warning when restoring from snapshot (hard reset) is required
  * Prompt node operator when local tip is behind by `STATESYNC_BLOCK_THRESHOLD`
  * Ref: [monad-bft PR #2581](https://github.com/category-labs/monad-bft/pull/2581)
* **\[Node ops]** Update `monad-cruft` permissions to monad user
  * Ref: [monad-bft PR #2556](https://github.com/category-labs/monad-bft/pull/2556)
* **\[Node ops]** Fix txpool metrics recording for transaction replacements
  * Ref: [monad-bft PR #2564](https://github.com/category-labs/monad-bft/pull/2564)
* **\[RPC]** Operator can configure RPC worker threads
  * Ref: [monad-bft PR #2562](https://github.com/category-labs/monad-bft/pull/2562)
* **\[Archive]** Add TOML config file support instead of CLI-only configuration
  * Enables `monad-archiver` binary to use `--config` flag for configuration
  * CLI arguments continue to work and take precedence over config file values
  * Ref: [monad-bft PR #2570](https://github.com/category-labs/monad-bft/pull/2570)
* **\[Node ops]** Add random mutations to `txgen` for improved testing
  * Ref: [monad-bft PR #2543](https://github.com/category-labs/monad-bft/pull/2543)
* **\[Node ops]** Add reserve balance coherency tests
  * Ref: [monad-bft PR #2573](https://github.com/category-labs/monad-bft/pull/2573)
* **\[SDK]** Record execution events
  * Includes state access and system transactions
  * Ref: [monad PR #1906](https://github.com/category-labs/monad/pull/1906), [monad PR #1907](https://github.com/category-labs/monad/pull/1907), [monad PR #1913](https://github.com/category-labs/monad/pull/1913)
* **\[SDK]** Explicitly clear flow info that doesn't apply to certain event types
  * Prevents poorly written event clients from reading invalid data
  * Ref: [monad PR #1919](https://github.com/category-labs/monad/pull/1919)
* **\[Execution]** Improve assertion messages with `MONAD_ASSERT_PRINTF`
  * Ref: [monad PR #1918](https://github.com/category-labs/monad/pull/1918)
* **\[Node ops]** Add statesync server metrics
  * Add `SyncDone` metric to track successes and failures
  * Add request timing metric for statesync server
  * Ref: [monad-bft PR #2555](https://github.com/category-labs/monad-bft/pull/2555)
* **\[Node ops]** Disambiguate triedb error logs
  * Improve error message clarity by making each log call unique
  * Ref: [monad-bft PR #2579](https://github.com/category-labs/monad-bft/pull/2579)
* **\[Node ops]** Update devnet chain configs
  * Shorten default devnet epoch length from 50,000 blocks to 10,000 blocks and epoch start delay from 5,000 rounds to 1,000 rounds
  * Ref: [monad-bft PR #2578](https://github.com/category-labs/monad-bft/pull/2578)
* **\[Node ops]** Update test infrastructure
  * Switch `test_state` and `precompiles_test` tests to `TraitsTest`
  * Add `runloop_monad_ethblocks` to CLI for Monad EVM block replay
  * Ref: [monad PR #1905](https://github.com/category-labs/monad/pull/1905), [monad PR #1894](https://github.com/category-labs/monad/pull/1894)
* **\[Execution]** Remove unused cross-thread pipe messaging infrastructure
  * Ref: [monad PR #1915](https://github.com/category-labs/monad/pull/1915)
* **\[Node ops]** Keep manytrace agent alive in node state
  * Ref: [monad-bft PR #2583](https://github.com/category-labs/monad-bft/pull/2583)
* **\[Node ops]** Update keystore documentation
  * Ref: [monad-bft PR #2380](https://github.com/category-labs/monad-bft/pull/2380)
* **\[Node ops]** Add more logging for block validation errors
  * Ref: [monad-bft PR #2550](https://github.com/category-labs/monad-bft/pull/2550)
* **\[Node ops]** Log round leader when processing certificates
  * Ref: [monad-bft PR #2580](https://github.com/category-labs/monad-bft/pull/2580)

## v0.12.1 \[2025-11-12]

Revision: [`MONAD_SEVEN`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.12.1`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.1)
* `monad`: [tag `v0.12.1`](https://github.com/category-labs/monad/releases/tag/v0.12.1)

#### Notable RPC/SDK changes

* **\[RPC]** Support for prestate and statediff tracing for the following RPC endpoints:
  * `debug_traceTransaction`
  * `debug_traceBlockByNumber`
  * `debug_traceBlockByHash`
  * Ref: [monad PR #1753](https://github.com/category-labs/monad/pull/1753), [monad-bft PR #2403](https://github.com/category-labs/monad-bft/pull/2403)
* **\[RPC]** New endpoint `eth_createAccessList`
  * Ref: [monad PR #1748](https://github.com/category-labs/monad/pull/1748), [monad-bft PR #2519](https://github.com/category-labs/monad-bft/pull/2519)
* **\[RPC]** Fix serialization for `to` address in historical traces
  * Follow on to [monad-bft PR #2516](https://github.com/category-labs/monad-bft/pull/2516) implemented in `v0.12.0` (in a historical context)
  * Ref: [monad-bft PR #2523](https://github.com/category-labs/monad-bft/pull/2523), [monad PR #1861](https://github.com/category-labs/monad/pull/1861)
* **\[RPC]** Remove artificial block height floor for `eth_call` and RPC queries
  * Previously limited queries using `latest` and `safe` block tags to `finalized + 1`, now uses actual latest voted block
  * Ref: [monad-bft PR #2148](https://github.com/category-labs/monad-bft/pull/2148)
* **\[RPC]** Fix RPC errors when requesting traces for call frames that include a self-destructing transaction
  * Ref: [monad PR #1887](https://github.com/category-labs/monad/pull/1887)
* **\[RPC]** Fix inconsistent results being reported when using state overrides in RPC calls
  * Ref: [monad PR #1812](https://github.com/category-labs/monad/pull/1812)
* **\[RPC]** Fix for a possible denial-of-service attack on RPC nodes by overriding balances in the staking contract
  * Ref: [monad PR #1903](https://github.com/category-labs/monad/pull/1903)

#### Notable robustness changes

* **\[Node ops/Consensus]** Validators limit statesync service to validators and whitelisted full nodes
  * Full nodes service all requests
  * Ref: [monad-bft PR #2524](https://github.com/category-labs/monad-bft/pull/2524)
* **\[Consensus]** More intelligent txpool eviction logic
  * Ref: [monad-bft PR #2525](https://github.com/category-labs/monad-bft/pull/2525)
* **\[Consensus]** Start vote pacing timer on startup
  * Ref: [monad-bft PR #2528](https://github.com/category-labs/monad-bft/pull/2528)
* **\[Consensus]** Fix historical logs `selfdestruct` issue
  * Ref: [monad-bft PR #2531](https://github.com/category-labs/monad-bft/pull/2531)
* **\[Consensus]** Graceful handling of gas limit check
  * Ref: [monad-bft PR #2518](https://github.com/category-labs/monad-bft/pull/2518)
* **\[Consensus]** Remove 0-stake validator support
  * Support for 0-stake validators in the validator set was used as a workaround for lack of full-node support in the past and should no longer be supported
  * Ref: [monad-bft PR #2545](https://github.com/category-labs/monad-bft/pull/2545)

#### Notable performance changes

* **\[Consensus]** Bias statesync requests to responsive peers
  * Support dynamic peer expansion/contraction
  * Nodes no longer panic if all peers are pruned (e.g., not whitelisted by any init peers)
  * Ref: [monad-bft PR #2536](https://github.com/category-labs/monad-bft/pull/2536)
* **\[Consensus]** Drop blocksync requests that hit disk after cache hydration (\~7min after startup)
  * Ref: [monad-bft PR #2533](https://github.com/category-labs/monad-bft/pull/2533)
* **\[Consensus]** Dataplane: replace interval with sleep
  * Ref: [monad-bft PR #2517](https://github.com/category-labs/monad-bft/pull/2517)
* **\[Execution]** Replace data structures in `VersionStack` code to improve performance when pushing and popping EVM call frames
  * Ref: [monad PR #1802](https://github.com/category-labs/monad/pull/1802), [monad PR #1877](https://github.com/category-labs/monad/pull/1877)

#### Notable internal changes

* **\[Node ops]** Try fetching remote `forkpoint.toml` and `validators.toml` on startup
  * **IMPORTANT**: Nodes now automatically attempt to download configuration files from remote locations on startup, no "Soft Reset" required. This remote fetch is subject to a configurable remote threshold
  * The following env variables must be set to enable this behavior:
    * `REMOTE_FORKPOINT_URL`
    * `REMOTE_VALIDATORS_URL`
  * Ref: [monad-bft PR #2484](https://github.com/category-labs/monad-bft/pull/2484), [monad-bft PR #2534](https://github.com/category-labs/monad-bft/pull/2534)
* **\[Node ops]** Serialize forkpoints in both TOML and RLP formats, with RLP as source of truth; cleanup `get_latest_config` branches
  * Ref: [monad-bft PR #2521](https://github.com/category-labs/monad-bft/pull/2521)
* **\[Node ops/Consensus]** Dynamically expand statesync upstream peers
  * Always initializes to `statesync.init_peers` (no longer defaults to bootstrap peers)
  * If `expand_to_group` is enabled, expands to validator set (for validators) and/or secondary raptorcast peers (for public / prioritized full nodes)
  * Ref: [monad-bft PR #2535](https://github.com/category-labs/monad-bft/pull/2535)
* **\[Node ops/Consensus]** Full nodes no longer default to blocksync from validator set
  * Dedicated full nodes must specify upstream as blocksync override
  * **IMPORTANT**: prioritized/public full nodes can only blocksync *after* joining secondary raptorcast group. `refresh_period` and `invite_lookahead` recommended to be lowered to 20 seconds
  * Ref: [monad-bft PR #2532](https://github.com/category-labs/monad-bft/pull/2532)
* **\[Consensus]** Use epoch field to encode round number for secondary raptorcast
  * Fixes issue where syncing full nodes receive unsolicited chunks from expired groups
  * Ref: [monad-bft PR #2442](https://github.com/category-labs/monad-bft/pull/2442)
* **\[Consensus]** Add statesync server pending requests metric (better load visibility)
  * Ref: [monad-bft PR #2530](https://github.com/category-labs/monad-bft/pull/2530)
* **\[Node ops]** Import `monad-execution` API changes
  * Ref: [monad-bft PR #2522](https://github.com/category-labs/monad-bft/pull/2522)

## v0.12.0 \[2025-11-04]

Revision: [`MONAD_SEVEN`](/developer-essentials/changelog#revisions) (upgrade; Wednesday, 2025-11-05 at 14:30 GMT)

Tags or hashes:

* `monad-bft`: [tag `v0.12.0`](https://github.com/category-labs/monad-bft/releases/tag/v0.12.0)
* `monad`: [tag `v0.12.0`](https://github.com/category-labs/monad/releases/tag/v0.12.0)

#### Notable protocol changes

* **\[EVM/Network params]** [Opcode/precompile repricing](/developer-essentials/opcode-pricing)
  * Opcode pricing: increase cost of cold storage access
  * Precompile pricing: better align a few underpriced precompile gas costs with the associated hardware / latency costs
  * Ref: [monad PR #1600](https://github.com/category-labs/monad/pull/1600) (for most of the repricings) and [monad PR #1700](https://github.com/category-labs/monad/pull/1700) (for `CREATE`/`CREATE2` repricing), [monad PR #1830](https://github.com/category-labs/monad/pull/1830) (for reduced v2 scope), [monad PR #1871](https://github.com/category-labs/monad/pull/1871) (activation for `MONAD_SEVEN`)
  * Gated by `MONAD_SEVEN` revision
* **\[Consensus/Network params]** \[Staking] Increase `BLOCK_REWARD_MON` from 1 MON to 25 MON
  * Note that this is not gated by `MONAD_SEVEN` (execution hard fork) but by a specific epoch start for `testnet`
  * Ref: [monad-bft PR #2511](https://github.com/category-labs/monad-bft/pull/2511)

#### Notable robustness changes

* **\[Consensus]** Consensus message prioritization in dataplane
  * Priority queues for UDP traffic ensure consensus messages are delivered before other traffic
  * All consensus messages to validators are published and rebroadcast with high priority
  * Ref: [monad-bft PR #2352](https://github.com/category-labs/monad-bft/pull/2352),
    [monad-bft PR #2354](https://github.com/category-labs/monad-bft/pull/2354)
* **\[Consensus]** DoS protection: Reject repeated invalid consensus messages
  * Prevents malicious validators from consuming CPU time by repeatedly sending invalid BLS signatures
  * Ref: [monad-bft PR #2445](https://github.com/category-labs/monad-bft/pull/2445)
* **\[Consensus]** Leader synchronization improvements
  * Forward AdvanceRound messages to current leader to prevent stale views due to message censorship
  * Ref: [monad-bft PR #2485](https://github.com/category-labs/monad-bft/pull/2485)
* **\[Consensus]** Validate group message sender authenticity
  * Ref: [monad-bft PR #2457](https://github.com/category-labs/monad-bft/pull/2457)

#### Notable RPC/SDK changes

* **\[RPC]** Fix `eth_syncing` serialization
  * Ref: [monad-bft PR #2476](https://github.com/category-labs/monad-bft/pull/2476)
* **\[RPC]** Update `debug_getRawReceipts` RLP encoding
  * Ref: [monad-bft PR #2490](https://github.com/category-labs/monad-bft/pull/2490)
* **\[RPC]** Failed contract creation should return null to address
  * Ref: [monad PR #1861](https://github.com/category-labs/monad/pull/1861),
    [monad-bft PR #2516](https://github.com/category-labs/monad-bft/pull/2516)

#### Notable performance changes

* **\[Consensus]** Dataplane: io\_uring batching for UDP sends
  * Replace GSO with io\_uring batching to preserve 64KB burst size while splitting payload
  * Batches multiple UDP sends into single io\_uring submission
  * Ref: [monad-bft PR #2317](https://github.com/category-labs/monad-bft/pull/2317)
* **\[Consensus]** Dataplane: Restore full 1500 byte MTU
  * Ref: [monad-bft PR #2438](https://github.com/category-labs/monad-bft/pull/2438)
* **\[Consensus]** RaptorCast: Modular packet assembly and round-robin ordering
  * Ref: [monad-bft PR #2377](https://github.com/category-labs/monad-bft/pull/2377),
    [monad-bft PR #2469](https://github.com/category-labs/monad-bft/pull/2469),
    [monad-bft PR #2318](https://github.com/category-labs/monad-bft/pull/2318)
* **\[Consensus]** Txpool optimizations
  * Add configurable limits, remove pending pool, refactor last commit state tracking
  * Ref: [monad-bft PR #2487](https://github.com/category-labs/monad-bft/pull/2487),
    [monad-bft PR #2363](https://github.com/category-labs/monad-bft/pull/2363),
    [monad-bft PR #2475](https://github.com/category-labs/monad-bft/pull/2475)
* **\[Archive]** Move indexer read-back to async task
  * Ref: [monad-bft PR #2486](https://github.com/category-labs/monad-bft/pull/2486)
* **\[RPC]** Remove unnecessary lock in request submission path
  * Ref: [monad-bft PR #2416](https://github.com/category-labs/monad-bft/pull/2416)

#### Notable internal changes

* **\[Node ops]** Docker support for local Monad installation
  * Optional `--use-prebuilt` flag to avoid compilation
  * Ref: [monad-bft PR #2456](https://github.com/category-labs/monad-bft/pull/2456),
    [monad-bft PR #2489](https://github.com/category-labs/monad-bft/pull/2489)
* **\[Node ops]** ledger-tail: New CLI configuration options
  * Supports custom paths for ledger, forkpoint, node config, and validators files
  * Fixes default `validators.toml` path
  * Ref: [monad-bft PR #2439](https://github.com/category-labs/monad-bft/pull/2439)
* **\[Node ops]** wal2json: Multi-file support with timestamp filtering
  * Fast timestamp seeking/filtering across multiple files (e.g., `wal2json -a"3:30pm EDT" -b"4:00pm EDT" wal*`)
  * Improved performance with parallel processing and reduced locking
  * Ref: [monad-bft PR #2496](https://github.com/category-labs/monad-bft/pull/2496),
    [monad-bft PR #2493](https://github.com/category-labs/monad-bft/pull/2493)

## v0.11.6 \[2025-10-30]

Revision: [`MONAD_SIX`](/developer-essentials/changelog#revisions) (upgrade; Friday, 2025-10-31 at 13:30 GMT)

Revision: [`MONAD_FIVE`](/developer-essentials/changelog#revisions) (upgrade; Tuesday, 2025-10-28 at 13:30 GMT)

Tags or hashes:

* `monad-bft`: [tag `v0.11.6-tn1`](https://github.com/category-labs/monad-bft/releases/tag/v0.11.6-tn1)
* `monad`: [tag `v0.11.6-tn1`](https://github.com/category-labs/monad/releases/tag/v0.11.6-tn1)

#### Notable protocol changes - `MONAD_SIX`

* **\[EVM]** EIP-2935 bugfix
  * Ref: [monad PR #1846](https://github.com/category-labs/monad/pull/1846)

#### Notable protocol changes - `MONAD_FIVE`

* **\[Consensus/EVM]** \[Staking] Lower `ACTIVE_VALIDATOR_STAKE` from 25,000,000 MON to **10,000,000 MON**
  * Ref: [monad PR #1810](https://github.com/category-labs/monad/pull/1810)
* **\[EVM]** \[Staking] Add `getProposerValId()` method to return the `val_id` of the most recent block proposer
  * Ref: [monad PR #1815](https://github.com/category-labs/monad/pull/1815)

#### Notable RPC/SDK changes

* **\[RPC]** Fix race condition in block number queries
  * Return triedb block number in ChainState to prevent errors when `eth_getBlockNumber` returns blocks not yet available in triedb
  * Fixes common wallet workflow issue with sequential `eth_getBlockNumber` and `eth_getBalance` calls
  * Ref: [monad-bft PR #2393](https://github.com/category-labs/monad-bft/pull/2393)
* **\[SDK]** Add call frame recording to execution events
  * Ref: [monad PR #1541](https://github.com/category-labs/monad/pull/1541)
  * These will not be recorded unless the `--trace_calls` command line argument is passed to execution
* **\[RPC]** Add `monad_eth_call_executor_get_state()` API for better visibility into `eth_call` requests
  * Ref: [monad PR #1764](https://github.com/category-labs/monad/pull/1764)
  * Returns counts of currently executing/queued requests and error counts

#### Notable robustness changes

* **\[Consensus]** Deterministic timeout certificate tiebreaking
  * When TC contains multiple tips with the same round, tiebreak by tip.qc for consistency
  * Ref: [monad-bft PR #2460](https://github.com/category-labs/monad-bft/pull/2460)
* **\[Consensus]** Transaction nonce overflow validation
  * Ref: [monad-bft PR #2388](https://github.com/category-labs/monad-bft/pull/2388)
* **\[Consensus]** More consistent checks on `EpochChange` between block proposer and validator
  * This addresses an observed chain halt in `testnet-2`
  * Ref: [monad-bft PR #2494](https://github.com/category-labs/monad-bft/pull/2494)

#### Notable performance changes

* **\[EVM]** Use komihash in StateDelta maps
  * Ref: [monad PR #1786](https://github.com/category-labs/monad/pull/1786)
* **\[EVM]** JIT compiler: only emit jump table for contracts with indirect jumps
  * Ref: [monad PR #1749](https://github.com/category-labs/monad/pull/1749)
* **\[RPC]** Improve eth call concurrency with atomic sequence numbers
  * Ref: [monad PR #1759](https://github.com/category-labs/monad/pull/1759)

#### Notable internal changes

* **\[Node ops]** Fuzzer refactor (`--focus` flag addition)
  * Ref: [monad PR #1744](https://github.com/category-labs/monad/pull/1744)
* **\[Node ops]** Build images with debug symbols
  * Ref: [monad-bft PR #2459](https://github.com/category-labs/monad-bft/pull/2459)

## v0.11.3 \[2025-10-14]

Revision: [`MONAD_FOUR`](/developer-essentials/changelog#revisions) (upgrade; takes effect
at 2025-10-14 13:30 GMT)

Tags or hashes:

* `monad-bft`: [tag `v0.11.3-tn1`](https://github.com/category-labs/monad-bft/releases/tag/v0.11.3-tn1)
* `monad`: [hash `3e17265`](https://github.com/category-labs/monad/tree/3e17265fae80710229c657d725d821053cec940b)

#### Notable protocol changes - `MONAD_FOUR`

* **\[Consensus/EVM]** [Staking](/monad-arch/consensus/staking) is live
  * (many PRs; see
    [staking](https://github.com/category-labs/monad/tree/main/category/execution/monad/staking))
  * Active validator set is now determined by on-chain state of the staking precompile
  * This takes effect starting from a designated `staking_activation` epoch
  * Note: staking rewards do not activate until `staking_rewards_activation` epoch
    (future point in time)
  * External rewards - enable external (non-block-reward) deposits to the validator pool, see
    [monad PR #1625](https://github.com/category-labs/monad/pull/1625)
  * Also added additional events to staking precompile in [monad PR #1742](https://github.com/category-labs/monad/pull/1742)
    * Adds `ValidatorRewarded`, `EpochChanged`, `ClaimRewards` events
* **\[Consensus/EVM]** [Reserve balance](/developer-essentials/reserve-balance) logic is live
  * Ref: [monad-bft PR #2160](https://github.com/category-labs/monad-bft/pull/2160) and
    [monad PR #1537](https://github.com/category-labs/monad/pull/1537)
  * Due to async execution, consensus does not have the latest state available for transaction
    inclusion logic. Reserve balance is a buffer that enables simpler accounting for a given
    account to mitigate the possibility of overspending in that delay window.
  * Per-EOA reserve balance is set to `10 MON`
* **\[Consensus/EVM]** [EIP-7702](/developer-essentials/eip-7702) is live
  * Ref: [monad-bft PR #2160](https://github.com/category-labs/monad-bft/pull/2160), [monad-bft PR #2218](https://github.com/category-labs/monad-bft/pull/2218) and
    [monad PR #1362](https://github.com/category-labs/monad/pull/1362)
* **\[Network params]** Set per-transaction gas limit of 30M gas
  * Ref: [monad-bft PR #2246](https://github.com/category-labs/monad-bft/pull/2246)
  * As discussed in the
    [Monad Initial Spec Proposal](https://forum.monad.xyz/t/monad-initial-specification-proposal/195)
* **\[Network params]** Increase block gas limit from 150M gas (375 Mgas/s) to **200M** gas
  (500 Mgas/s)
  * Ref: [monad-bft PR #2266](https://github.com/category-labs/monad-bft/pull/2266)
* **\[Network params]** Implement [dynamic base fee](/developer-essentials/gas-pricing)
  * Ref: [monad-bft PR #2207](https://github.com/category-labs/monad-bft/pull/2207)
  * As specified in the
    [Monad Initial Spec Proposal](https://forum.monad.xyz/t/monad-initial-specification-proposal/195)
  * Target gas is 80% of a block
  * Raise minimum base fee from 50 MON-gwei to **100 MON-gwei**
* **\[EVM]** Enable [EIP-2935](https://eips.ethereum.org/EIPS/eip-2935) + blockhash
  buffer
  * Ref: [monad PR #1520](https://github.com/category-labs/monad/pull/1520)
* **\[EVM]** Enable [EIP-7951](https://eips.ethereum.org/EIPS/eip-7951) (P256VERIFY
  precompile support)
  * Ref: [monad PR #1518](https://github.com/category-labs/monad/pull/1518)
* **\[EVM]** Enable [EIP-2537](https://eips.ethereum.org/EIPS/eip-2537) (BLS12-381 precompiles)
  * Ref: [monad-bft PR #1342](https://github.com/category-labs/monad/pull/1342) and [monad-bft PR #1350](https://github.com/category-labs/monad/pull/1350)
* **\[EVM]** Raise max contract size for `CREATE`/`CREATE2` to 128 kb
  * Ref: [monad PR #1440](https://github.com/category-labs/monad/pull/1440)
  * This brings `CREATE`/`CREATE2` to parity with toplevel contract creation transactions, which
    had their limit raised in `MONAD_TWO`.
  * Previously, they were unintentionally limited to Ethereum's max initcode size (49.152 kb)
    due to a bug

#### Notable RPC/SDK changes

* **\[SDK]** Added support for [Execution Events](/execution-events)
* **\[RPC]** Extend `eth_call` support for preStateTracer and stateDiffTracer with `debug_traceCall`
  * Ref: [monad-bft PR #2275](https://github.com/category-labs/monad-bft/pull/2275) and
    [monad PR #1471](https://github.com/category-labs/monad/pull/1471)
* **\[RPC]** Support the `withLog` parameter with `callTracer`
  * Ref: [monad-bft PR #2400](https://github.com/category-labs/monad-bft/pull/2400)
  * If `withLog` is set to true, `callTracer` includes event logs in the trace output

#### Notable performance changes

* **\[EVM]** Kernel caching of db reads and writes
  * Ref: [monad PR #1559](https://github.com/category-labs/monad/pull/1559)
  * Utilize available host memory to cache recent DB operations - this cache
    should increase performance of execution and RPC
* **\[RPC]** Improve RPC Db Node Cache and make it memory bounded
  * Ref: [monad PR #1581](https://github.com/category-labs/monad/pull/1581)
  * Note a rename of RPC cli flags: `--eth-call-executor-node-lru-size` to
    `--eth-call-executor-node-lru-max-mem` and a new flag `--triedb-node-lru-max-mem` with
    both default to 100MB.

#### Notable internal changes

* **\[Node ops]** Remove `bft-fullnode` binary; only `bft` binary now
  * Ref: [monad-bft PR #2072](https://github.com/category-labs/monad-bft/pull/2072)
  * `bft-fullnode` removed from `deb` pkg for `v0.11`
* **\[Node ops]** PeerDiscovery: Introduce precheck for peer self name address
* **\[Consensus]** Blocksync: only select blocksync peers from connected nodes
  * Ref: [monad-bft PR #2401](https://github.com/category-labs/monad-bft/pull/2401)
* **\[Consensus]** Raptorcast: DOS protection on decoding state cache
  * Ref: [monad-bft PR #2092](https://github.com/category-labs/monad-bft/pull/2092)
* **\[Node ops]** Secondary raptorcast config change
  * Ref: [monad-bft PR #2378](https://github.com/category-labs/monad-bft/pull/2378)
  * Replace ambiguous secondary raptorcast  `mode` parameter with `enable_publisher` and `enable_client`
* **\[Node ops]** Dynamically reload prioritized full-nodes
  * Ref: [monad-bft PR #2364](https://github.com/category-labs/monad-bft/pull/2364)
* **\[Node ops]** Fix wal2json
  * Ref: [monad-bft PR #2404](https://github.com/category-labs/monad-bft/pull/2404)
* **\[Node ops/RPC]** Support the RPC CLI param `ws-sub-per-conn-limit`
  * Ref: [monad-bft PR #2161](https://github.com/category-labs/monad-bft/pull/2161)
  * Sets the maximum number of websocket subscriptions per connection (default to 100)
* **\[Node ops/RPC]** Add configuration options for high eth-call pool
  * Ref: [monad-bft PR #2387](https://github.com/category-labs/monad-bft/pull/2387)

## v0.10.4 \[2025-08-18]

Revision: [`MONAD_THREE`](/developer-essentials/changelog#revisions) (unchanged)

Tags or hashes:

* `monad-bft`: [tag `v0.10.4`](https://github.com/category-labs/monad-bft/releases/tag/v0.10.4)
* `monad`: [hash `39c42e6`](https://github.com/category-labs/monad/tree/39c42e6ea5b2fccf8f4aa951da9d6281885511a5)

#### Notable RPC/SDK changes

* **\[RPC]** EIP-4844 related fields in RPC responses are removed.
  * Block headers returned from RPC will no longer have `blobGasUsed` , `excessBlobGas`, and
    `parentBeaconBlockRoot`.

#### Notable performance changes

* **\[Consensus]** Votes are now sent to current round leader. This is a consensus optimization that
  reduces the effective delay due to a round timeout
  * Ref: [monad-bft PR #2093](https://github.com/category-labs/monad-bft/pull/2093)
* **\[Consensus]** Caching of recently-verified quorum certificates
  * Ref: [monad-bft PR #2167](https://github.com/category-labs/monad-bft/pull/2167)
* **\[Node ops]** Enablement of trace calls is now controlled via `monad` (execution) command line
  arg `--trace_calls`.
  * To preserve legacy behavior, `--trace_calls` is currently enabled in the debian package. In the
    future we recommend disabling for validators and enabling it for RPC and archive nodes.
  * This allows voting validators to opt out of computing traces since they're only needed for
    RPC nodes.

#### Notable internal changes

* **\[Consensus]** TC forwarding to prioritized and public (non-dedicated) full nodes
  * Ref: [monad-bft PR #2149](https://github.com/category-labs/monad-bft/pull/2149)
  * Prior to `v0.10.4`, all full nodes were subject to lagging behind validators in the event of a
    timeout because round advancement due to TC was not forwarded (and still isn’t to dedicated full
    nodes).
  * As a result, after timeouts, full nodes would frequently forward transactions to the
    next three leaders relative to a stale state. This results in those transactions often missing
    and the ensuing blocks being comparatively empty.
* **\[Node ops]** Bugfix for secondary raptorcast (round gap crash) that affected validators in
  Publisher mode
  * Ref: [monad-bft PR #2090](https://github.com/category-labs/monad-bft/pull/2090)
* **\[Node ops]** `ledger-tail` improvements
  * Ref: [monad-bft PR #2144](https://github.com/category-labs/monad-bft/pull/2144)
  - Reduced memory usage on startup
  - `author_dns` field changed to `author_address` to reflect change in v10 addresses
  - Timeouts and finalizations are tracked and logged
* **\[Consensus]** Txpool account preloading bugfix
  * Ref: [monad-bft PR #2108](https://github.com/category-labs/monad-bft/pull/2108)

## v0.10.3 \[2025-08-12]

Revision: [`MONAD_THREE`](/developer-essentials/changelog#revisions) (upgrade; takes
effect immediately - not time-gated)

#### Notable protocol changes - `MONAD_THREE`

* **\[Consensus]** Consensus mechanism upgraded from [Fast-HotStuff](https://arxiv.org/abs/2010.11454)
  to [MonadBFT](/monad-arch/consensus/monad-bft). This is a major upgrade that adds
  *(i)* [resilience to tail forking](/monad-arch/consensus/monad-bft#no-tail-forking) and
  *(ii)* [1-slot speculative finality](/monad-arch/consensus/monad-bft#speculative-finality)
* **\[Network params]** Block time reduced from 500 ms to **400 ms**

#### Notable RPC/SDK changes

* **\[RPC]** Add support for [real-time data](/monad-arch/realtime-data) via
  [WebSocket](/reference/websockets) and shared memory queue access (docs coming soon):
  * Geth real-time events (via WebSocket)
  * Geth real-time events with Monad extensions (via WebSocket)
  * Real-time data via shared memory queue, for programs on a full node host using the execution event SDK

#### Notable performance changes

* **\[Execution]** Switch to JIT EVM. The bytecode of expensive or frequently-executed contracts is
  compiled directly to native code for faster execution
* **\[Execution]** Switch to using file pointer-based IPC to execute blocks. Previously, the client
  was using a write-ahead log (WAL), which did not take advantage of available consensus
  information and could result in avoidable execution

#### Notable internal changes

* **\[Node ops]** Adds peer discovery
* **\[Node ops]** Adds full node [RaptorCast](/monad-arch/consensus/raptorcast), making the full
  node network scalable

## v0.9.3 \[2025-05-29]

Revision: [`MONAD_TWO`](/developer-essentials/changelog#revisions) (unchanged)

#### Notable RPC/SDK changes

* **\[RPC]** `eth_call` and `eth_estimateGas` limits
  * RPC providers can now set individual per-transaction limits on maximum gas for `eth_call` and
    `eth_estimateGas`
    * Previously the limit would always be the block gas limit (150M), now the RPC provider may
      choose (default: 30M)
    * Controlled with `--eth-call-provider-gas-limit` and `--eth-estimate-gas-provider-gas-limit`
  * Add a maximum timeout for queueing when executing `eth_call` and `eth_estimateGas`
    * Controlled with `--eth_call_executor_queuing_timeout`

#### Notable performance changes

* **\[RPC]** Improve overall `eth_call` performance by maintaining separate queues for cheap and
  expensive `eth_call` operations, so that cheap `eth_call` operations will not be queued behind expensive ones.
  * This adds two new RPC error strings:
    * `failure to submit eth_call to thread pool: queue size exceeded`
    * `failure to execute eth_call: queuing time exceeded timeout threshold`
* **\[RPC]**  Added an archive index for `eth_getLogs` to support queries with address and/or topic
  filters
  * This enables larger block ranges to be queried efficiently, with work proportional to number
    of matching logs instead of number of blocks in range
* **\[Execution]** Better bounding of TrieDB traversals

#### Notable internal changes

* **\[Node ops]**  Performance improvements for slow statesync client upsert
* **\[Node ops]**  Bugfix for execution delay and abrupt history length drops caused by premature
  soft reset
* **\[Node ops]**  `keystore` QOL improvements
  * Support for importing from a private key in hex string format (previously required conversion
    to json file)
  * More helpful documentation via `--help` command

## testnet-1 active set expansion \[2025-05-02]

#### Notable internal changes

* **\[Network params]** Testnet validator set expanded from 72 to **99** nodes

## v0.9.2 \[2025-04-05]

Revision: [`MONAD_TWO`](/developer-essentials/changelog#revisions) (unchanged)

#### Notable performance changes

* **\[RPC]** Update to the `eth_call` execution implementation - uses fewer threads to achieve the
  same concurrency as in `v0.9.1`

#### Notable internal changes

* **\[Node ops]** Support for a faster [statesync](/monad-arch/consensus/statesync) mechanism
* **\[RPC]** RPC no longer accepts requests while node is statesyncing
* **\[Node ops]** Some reliability and efficiency improvements to how statesync traffic is carried
  between nodes
* **\[Node ops]** Bugfixes for execution crashes (`monad::mpt::deserialize_node_from_buffer`,
  `'Resource temporarily unavailable`)

- **\[Node ops]** Bug fix for unbounded blocksync requests that result in node OOM failures
- **\[Node ops]** Removal of DNS resolution panic on start up

## v0.9.1 \[2025-03-24]

Revision: [`MONAD_TWO`](/developer-essentials/changelog#revisions) (unchanged)

#### Notable internal changes

* **\[Node ops]** Bugfix for blocksync errors
* **\[Node ops]** Reliability and efficiency improvements to statesync

## v0.9.0 \[2025-03-14]

Revision: [`MONAD_TWO`](/developer-essentials/changelog#revisions) (upgrade; takes effect
at 2025-03-14 at 19:00 GMT)

#### Notable protocol changes - `MONAD_TWO`

* **\[EVM]** Max contract size increased from 24kb to **128kb**
  * [example 123 kb contract](https://testnet.monadvision.com/address/0x0E820425e07E4a992C661E4B970e13002d6e52B9?tab=Contract)

#### Notable RPC/SDK changes

* **\[RPC]** `debug_traceTransaction` fixes
  * Fixed a bug where, within one transaction, only the first 100 calls were being traced
  * Added `error` and `revertReason` fields to response data

#### Notable performance changes

* **\[Consensus]** Dataplane v2 - simpler and more efficient implementation; small performance
  improvement in broadcast time
* **\[RPC]** Improvements to RPC performance for `eth_call`

- **\[RPC]** Removed redundant sender\_recovery operation on raw transactions received via RPC

#### Notable internal changes

* **\[Node ops]** Statesync improvements to mitigate negative performance effects on upstream
  validator nodes

- **\[RPC]** EIP-2 signature validation added to RPC transaction validation
- **\[Node ops]** Miscellaneous tracing, logging and metrics additions
- **\[Consensus]** RaptorCast performance improvement when dealing with invalid symbols

## v0.8.1 \[2025-02-14]

Revision: [`MONAD_ONE`](/developer-essentials/changelog#revisions) (upgrade; takes effect
at 2025-02-14 at 19:00 GMT)

#### Notable protocol changes - `MONAD_ONE`

* **\[Network params]** Block time reduced from 1s to **500 ms**
* **\[Network params]** Block gas limit reduced from 300M to **150M** (to keep gas limit consistent)
* **\[EVM]** Transactions are [charged](/developer-essentials/gas-pricing) based on gas limit,
  not gas consumed

#### Notable RPC/SDK changes

* **\[RPC]** UX improvements for [transaction status](/monad-arch/transaction-lifecycle). RPC
  nodes track status of transactions submitted to them in order to provide updates to users.
