This document investigates how the current BFT mechanism on the testnet aligns with the approach detailed in [https://www.arxiv.org/pdf/2502.20692]. Initially, we analyzed a single validator’s log and attempted to map the behavior of a single round to the paper’s descriptions. We then extended the analysis to two other validators. However, because the current testnet consensus protocol closely resembles Pipelined HotStuff, some of the information in this Notion document may be inapplicable to the MonadBFT protocol that will be deployed on mainnet. Notably, Monad should now revert two blocks (rather than one) whenever a slot is missed.

Analysis of the Timing of Logs for a Missed Slot on Monad Testnet

The novel Monad BFT protocol (as described in the white paper by Jalalzai, Babel et al, 2/28/2025) is currently not live on Monad Testnet. The consensus protocol currently on Monad Testnet most closely resembles “pipelined hotstuff,” which is exposed to the “Tail Forking” MEV strategy in which a proposer missing round N induces a “reorg” of the block from the proposer of round N-1. This graphic is an illustration of an actual -albeit accidental- occurrence on Testnet. Importantly, the actual Monad BFT protocol is not vulnerable to this attack.

Observing the Unhappy Path

The protocol switches to the unhappy path in two cases:

  1. when a leader fails to propose a valid block
  2. when the leader's proposal doesn't receive support from at least 2f + 1 validators.

Specifically, validators enter the unhappy path if they don't receive a valid proposal within the timeout period τ. When this happens, a validator broadcasts a timeout message ⟨view, tip, tc, σ⟩, as shown in Figure 3. After all validators—including the next leader—receive this timeout message, the (next?) leader builds a timeout certificate using 2f + 1 distinct timeout messages.

🧭 Interpretation Guide

The normal flow was disrupted by a leader or network failure.

Proposal Reception (Round N-1)

Log Events: "received proposal" (INFO) at 00:17:56.305Z, followed by "proposal message" (DEBUG) at 00:17:56.305Z with detailed block data.

Voting on the Proposal