Skip to content

Releases: category-labs/monad-bft

v0.14.2

21 Apr 17:10

Choose a tag to compare

Tags or hashes:

Highlights

  • RPC: Debug trace improvementsdebug_* call tracer now includes a log index field reflecting global log order across nested call frames; eth_call now surfaces an explicit reserve balance violation error instead of a generic failure.
  • Performance: 8-9x speedup on compaction hot path — Trie node array optimization reduces redundant pointer recomputation in compaction, expiration, and version tracking loops.
  • Consensus: Fair queue forwarded ingress in txpool — Improves tx forwarding fairness between validators.

Notable RPC/SDK changes

  • [RPC] Move callframe retrieval methods to ChainState
    • Ref: monad-bft PR #2936, PR #2937
    • Covers block and transaction callframes; deduplicates call frame decoding in debug trace handlers
  • [RPC] Include log index in debug trace output; surface reserve balance error in eth_call
    • Ref: monad-bft PR #2658
    • Adds index field to each traced log in the debug call tracer; the index reflects the global log order within a transaction across all nested call frames
    • eth_call now returns an explicit reserve balance violation error instead of a generic failure when a transaction exceeds the sender's reserve balance
  • [RPC] Move eth call gas limit config to EthCallHandler
  • [RPC] debug_* methods now count toward eth call rate limiting
    • Ref: monad-bft PR #2868
    • debug_traceCall, debug_traceTransaction, and related methods now update the eth call stats tracker; previously they bypassed it. Clients that rely on debug methods will now have those calls counted against their rate limit.
  • [RPC] Enforce max response size earlier for debug RPC methods
  • [RPC] Lower RPC batch request limit to match Geth's default

Notable robustness changes

  • [Consensus] ConfirmGroup message fix
    • Ref: monad-bft PR #2652
    • Prevents oversized ConfirmGroup messages being rejected by full nodes; introduces NoConfirm response when group reaches max size
  • [Consensus] Fix leak in leanudp identity usage map
  • [Consensus] Enforce stale message timeout in leanudp
  • [RPC] Fix eth call stats tracking memleak in RPC
  • [Consensus] Relax statesync assertion for stale DoneSync edge case
  • [Execution] Fix possible UB in unaligned read
  • [Execution] Fix incorrect auto_expire_version initialization after DB reset
  • [Execution] Fix compaction progress reset during statesync
    • Ref: monad (execution) PR #2133
    • Fixes compaction head being incorrectly reset to 0 during statesync, causing compaction to restart from the beginning
  • [Consensus] Decode exact forwarded transactions
    • Ref: monad-bft PR #2810
    • Ensures forwarded transactions are decoded with no trailing bytes; paired with PR #2802 for strict transaction parsing in the forwarding layer

Notable performance changes

  • [Consensus] Front-load cheap consensus validation checks
  • [Consensus] Fair queue forwarded ingress in txpool client
  • [Consensus] Move forwarded tx pacing into executor, simplify ingress batching
  • [Consensus] Drop already-obsolete consensus messages before certificate validation
  • [Execution] Optimize trie node array access (8-9x speedup on compaction hot path)
    • Ref: monad (execution) 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

Notable internal changes

  • [Consensus] Raptorcast: direct UDP transport
    • Ref: monad-bft PR #2898, PR #2900
    • Adds a dedicated direct UDP socket for point-to-point traffic, bypassing Raptorcast erasure coding. Eliminates the ~2.5x bandwidth amplification inherent in Raptorcast for unicast sends. Falls back to the Raptorcast path gracefully for peers that don't support it.
    • Note: Still in testing — not recommended for production use in this release.
  • [Consensus] Wireauth: lower per-instance defaults
  • [Execution] Replace system boost fiber with submodule (boost-1.83.0)
  • [Execution] Separate precompile gas cost calculation from runtime implementation
  • [Execution] Remove support for EVMC_FRONTIER
  • [Consensus] Raptorcast: enforce type-level safety for BroadcastGroup in build target
  • [Execution] Add block-level event recording for Ethereum and Monad replay
    • Ref: monad (execution) PR #2006
    • Emits BLOCK_START/BLOCK_END events during replay, making replay event streams usable for tooling
  • [Consensus] Configure shared peer scoring for txpool and raptorcast
    • Ref: monad-bft PR #2907
    • Adds optional peer scoring configuration to node.toml; shares scoring source between txpool and raptorcast direct socket

v0.14.1

07 Apr 17:07
4ed7939

Choose a tag to compare

Patch release on top of v0.14.0. Execution layer unchanged.

Notable RPC/SDK changes

  • [RPC] Fix eth_fillTransaction gas estimation and reserve balance handling (#2949)
    • Maps reserve-balance failures to a dedicated ReserveBalanceViolation result instead of collapsing into a generic error
    • Makes omitted-gas fill estimation more permissive: applies a fill-only state override giving the sender an effectively unbounded balance during estimation
    • Note: eth_fillTransaction with insufficient balance now returns reserve balance violation (was: insufficient balance). Callers matching on the exact error string should update accordingly.

Hashes

  • monad-bft (consensus): 4ed79392
  • monad (execution): 54e132cfa — unchanged from v0.14.0

Upgrade instructions

See v0.14.1 upgrade instructions.

v0.14.0

01 Apr 16:32

Choose a tag to compare

Tags or hashes:

Highlights

  • RPC: ~400ms faster receipt queries — Receipts now tracked in chainstate buffer and available at Proposed time, eliminating trie lookups that added ~400ms on v0.13.0.
  • RPC: eth_fillTransaction — New endpoint to get a fully populated transaction (gas, nonce, etc.) without signing. Useful for wallets and dapps preparing transactions.
  • RPC: Websocket notifications on proposed blocksnewHeads and logs subscriptions now emit on proposed blocks instead of voted, reducing notification latency for real-time applications.

Notable RPC/SDK changes

  • [RPC] eth_fillTransaction RPC endpoint
    • Ref: monad-bft PR #2662, PR #2932
    • PR #2932 fixes several inconsistencies: preserves user-provided maxFeePerGas when sufficient, treats 0x0 gas/fee as missing, allows gas fill for failed txs, rejects blob-style requests, handles EIP-2930 legacy-fee correctly
  • [RPC] Use proposed blocks in websocket notifications
    • Ref: monad-bft PR #2817
    • Websocket newHeads and logs now emit on proposed blocks (earlier than voted)
  • [RPC] Consolidate triedb usage to ChainState
  • [RPC] Transaction receipts in chainstate buffer (~400ms faster receipt queries)
  • [RPC] Simplify RPC block height buffer mapping
  • [RPC] Use ChainStateBuffer for RPC logs
  • [Execution] Add execution events Rust SDK with path resolution and descriptor info
  • [Execution] Native transfer tracer scaffolding (not yet wired to RPC)

Notable robustness changes

Notable performance changes

Notable internal changes

v0.14.0-rc.1

25 Mar 16:52

Choose a tag to compare

v0.14.0-rc.1 Pre-release
Pre-release

v0.14.0-rc.1 is ready for testing. This release includes ~400ms faster receipt queries, a new eth_fillTransaction RPC endpoint, lower-latency websocket notifications, and numerous robustness and performance improvements across consensus and execution.

Note: This is a pre-release for testing and validation only. Not recommended for production use. If you run into any issues, please include Release: v0.14.0-rc.1 in the name of any issues you create.

⚠️ Breaking Changes

  • Auth UDP now requiredself_auth_port and authenticated_bind_address_port fields in node.toml are now required. Nodes without these fields will fail to start. (PR #2891)
  • raptor10_fullnode_redundancy_factor max lowered from 7→3 (default is 3, most nodes unaffected). (PR #2852)

Tags or hashes:

Highlights

  • ~400ms faster receipt queries — Receipts now tracked in chainstate buffer and available at Proposed time, eliminating trie lookups.
  • eth_fillTransaction — New RPC endpoint to get a fully populated transaction without signing.
  • Websocket notifications on proposed blocksnewHeads and logs subscriptions now emit on proposed blocks instead of voted, reducing notification latency.
  • Archive: per-source AWS profile support — Archiver source/sink/fallback now supports --profile flag for AWS credentials isolation. Reads from .aws/credentials and .aws/config. (PR #2865)

Notable RPC/SDK changes

Notable robustness changes

Notable performance changes

Notable internal changes

  • [Node ops] Systemd services changed from Restart=no to Restart=always — services now auto-restart on failure (affects monad-rpc, monad-archiver, monad-checker, monad-indexer, monad-ledger-tail)
  • [Consensus] Lightweight UDP framing protocol (leanudp)
  • [Archive] Support per-source AWS profile with isolation (--profile flag, reads from .aws/credentials and .aws/config)
  • [Consensus] Auth socket with codec abstraction, direct point-to-point routing
  • [Consensus] Raptorcast: remove legacy packet parser

Debian Package:

sudo apt update && sudo apt install monad=0.14.0~rc.1 -y --allow-downgrades --allow-change-held-packages

Note: The Debian package version is 0.14.0~rc.1 (with ~), while the git tag is v0.14.0-rc.1 (with -).

Complete Changelog:
v0.13.1...v0.14.0-rc.1

v0.13.1

16 Mar 16:18
7db6cea

Choose a tag to compare

v0.13.1

Tags or hashes:

Note: This is a patch release based on v0.13.0, not latest master.

Notable robustness changes

  • [RPC] Use latest voted as fallback for last_proposed
    • Ref: monad-bft PR #2857
    • Fixes State Archive node RPC returning stale block data when last_proposed is unavailable
    • Affects: monad-rpc on State Archive nodes (nodes running without BFT consensus)

v0.13.0

04 Mar 07:15

Choose a tag to compare

v0.13.0 (MONAD_NINE)

Tags or hashes:

Highlights

  • Faster RPC responses for latest block queries — The latest blocktag now returns proposed blocks instead of waiting for finalization, reducing query latency for eth_getBalance, eth_call, and other state queries.
  • Faster websocket block notificationsnewHeads subscriptions now emit voted blocks instead of waiting for finalization, providing earlier notifications to subscribers.

MONAD_NINE Activation

Hard Fork: This release activates MONAD_NINE at timestamp. Nodes must upgrade before activation.

Notable RPC/SDK changes

Notable robustness changes

Notable internal changes

v0.12.8

04 Mar 06:39

Choose a tag to compare

v0.12.8

Network Date released Comment
mainnet N/A
testnet N/A
devnet N/A

Tags or hashes:

Notable RPC/SDK changes

Notable robustness changes

Notable internal changes

Prep for future activation (MONAD_NINE)

v0.12.7

02 Feb 19:05

Choose a tag to compare

v0.12.7

Network Date released Comment
mainnet 01-29-2026
testnet 01-20-2026
devnet 01-13-2026

Tags or hashes:

Notable RPC/SDK changes

Notable robustness changes

  • [Execution] Fix modexp precompile crash on truncated input padding
  • [Consensus] Remove consecutive sequence number assertion
  • [Consensus] Improve liveness when advancing round using TC from timeout messages
  • [Consensus] Disallow creating an empty validator set

Notable internal changes

v0.12.6

16 Jan 23:49

Choose a tag to compare

v0.12.6

Network Date released Comment
mainnet 01-14-2025
testnet 01-07-2025
devnet N/A

Tags or hashes:

Notable RPC/SDK changes

Notable robustness changes

  • [Consensus] Add signature verification rate limiting with authenticated peer bypass
  • [Consensus] Validate confirm group message before updating peers
  • [Consensus] Use Tai64N directly for wireauth timestamp comparison
  • [Consensus] Improve RaptorCast decoding cache eviction
  • [Consensus] Fix blocksync in-flight request tracking on cache hydration
  • [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

Notable performance changes

  • [Consensus] Boost dataplane throughput with ring buffer implementation
  • [Execution] Native implementation for MLOAD, MSTORE, MSTORE8, CALLDATALOAD opcodes
  • [Execution] Improve snapshot write performance
  • [Execution] Optimize database history length adjustment with binary search
  • [Execution] Unify single buffer and scatter read handling in AsyncIO

Notable internal changes