Working Draft

# Simplex Consensus in TON

Simplex is a leader-based consensus protocol. Validators take turns proposing blocks and then collectively vote on them. The protocol produces a single, ever-growing chain of finalized blocks that every honest validator agrees on.

Simplex proceeds in slots, each representing a designated opportunity to propose a block. For every slot, a validator is selected as the leader responsible for proposing a candidate block. The leader broadcasts its candidate, every validator checks it, and if validation succeeds, casts a notarization vote. Once a validator sees notarization votes totaling 2/3\ge 2/3 of stake, it casts a finalization vote. A quorum of finalization votes irrevocably commits the block to the output ledger, and the protocol moves on to the next slot.

If the leader is offline or malicious, the slot eventually times out and validators cast skip votes instead. A quorum of skip votes lets the protocol move on without producing a block for that slot.

An honest validator never both finalizes and skips the same slot, and never notarizes two different candidates for the same slot. Because any two quorums overlap in at least one honest validator, these per-validator constraints lift to global guarantees: at most one candidate can be finalized per slot, and a finalized slot can never be skipped. This is the core of safety.

Multiple notarized but non-finalized chains may temporarily coexist if, because of network conditions or leader misbehavior, a sequence of slots is both skipped and has valid candidates. Such forks collapse as soon as the next finalization quorum is achieved, since any candidate in the later slot must necessarily be a descendant of a slot that was not skipped. Honest validators thus commit a candidate to the ledger once it has a finalized descendant.

The rest of this document rigorously develops the flavor of the protocol used in TON and is organized as follows:

# 1. Model and Definitions

# 1.1 System Model

We consider a system of nn validators V={v1,,vn}\mathcal{V} = \{v_1, \dots, v_n\}, each with a positive integer weight wiw_i. Let W=iwiW = \sum_i w_i. At most f<W/3f < W/3 total weight of validators may be Byzantine. Define the quorum threshold q=2W/3+1q = \lfloor 2W/3 \rfloor + 1.

Each honest validator holds an EUF-CMA-resistant signing key pair; each validator’s public key is known to all. No assumption is made about Byzantine validators’ keys beyond possession of a public key.

# 1.2 Ledger Validity

Let D\mathcal{D} denote the set of all possible block payloads. We assume an external predicate ValidSeq:D{true,false}\mathsf{ValidSeq} : \mathcal{D}^* \rightarrow \{\mathsf{true}, \mathsf{false}\}, which determines whether a sequence of payloads represents a valid ledger state. The predicate satisfies the following properties:

  1. Genesis validity. ValidSeq()=true\mathsf{ValidSeq}(\varnothing) = \mathsf{true}.
  2. Extendability. For every valid sequence (d1,,dm)(d_1,\dots,d_m), there exists some dd such that ValidSeq(d1,,dm,d)\mathsf{ValidSeq}(d_1,\dots,d_m,d) holds.

A sequence (d1,,dm)(d_1,\dots,d_m) is called valid if ValidSeq(d1,,dm)=true\mathsf{ValidSeq}(d_1,\dots,d_m) = \mathsf{true}.

Consensus does not depend on the internal structure of payloads beyond these properties.

# 1.3 Protocol Objects

Slots. Slot number is a discrete index sN0s \in \mathbb{N}_0. Slots are grouped into leader windows of size LL. Window kk covers slots [kL,(k+1)L)[kL, (k+1)L) with an associated leader v(kmodn)+1v_{(k \bmod n)+1}.

Candidates. A candidate is a tuple (s,d,sp,hp,σ)(s, d, s_p, h_p, \sigma) where

For a candidate (s,d,sp,hp,σ)(s, d, s_p, h_p, \sigma), define h=hash(d,sp,hp)h = \mathsf{hash}(d, s_p, h_p). The pair (s,h)(s,h) uniquely identifies the candidate.

Chains. A chain ending at (sm,hm)(s_m, h_m) is a sequence of candidates where each candidate’s parent reference points to the previous candidate in the sequence. Formally, it is a sequence of candidates (s1,d1,sp1,hp1,σ1),,(sm,dm,spm,hpm,σm)(s_1,d_1,s_{p1},h_{p1},\sigma_1), \dots, (s_m,d_m,s_{pm},h_{pm},\sigma_m), identified by (s1,h1),,(sm,hm)(s_1, h_1), \dots, (s_m, h_m), such that:

The slot set of a chain is {s1,,sm}\{s_1, \dots, s_m\}.

The associated sequence (d1,,dm)(d_1,\dots,d_m) is called the chain state.

A candidate (s,h)(s,h) is called valid if there exists a chain ending at (s,h)(s, h) with a state that is valid.

Votes. At any point, a validator may cast a vote signed by its signing key certifying some statement SS. Votes can be sent over the network.

Certificates. A certificate for a statement SS is a set of votes for SS from distinct validators with total weight q\ge q.

We say that SS is reached in the network if a certificate for SS can be produced by an oracle that knows all cast votes. We say that SS is observed on validator vv when validator vv receives enough votes to construct a certificate for SS (possibly by receiving an already constructed certificate). Note that a statement can be reached without any single validator knowing it.

# 1.4 Statements

We implicitly set the statements Notar(1,)\mathsf{Notar}(-1, \varnothing), Final(1,)\mathsf{Final}(-1, \varnothing) to be reached.

A particular validator vv may cast votes certifying the following statements:

Honest validators cast votes only when they can verify that the corresponding conditions hold. They are not required to cast votes immediately when the conditions become provable.

# 2. Safety

Lemma 2.1 (Final–Skip exclusion). For any slot ss and hash hh, the statements Final(s,h)\mathsf{Final}(s,h) and Skip(s)\mathsf{Skip}(s) cannot both be reached.

Proof. Suppose both are reached. Each certificate has total signing weight q\ge q. Since 2q=2(2W/3+1)>4W/3>W+W/3>W+f2q = 2(\lfloor 2W/3 \rfloor + 1) > 4W/3 > W + W/3 > W + f, the honest overlap is positive: some honest validator vv voted for both Final(s,h)\mathsf{Final}(s,h) and Skip(s)\mathsf{Skip}(s). But Section 1.4 requires that a Final\mathsf{Final} voter has not voted Skip\mathsf{Skip}, and a Skip\mathsf{Skip} voter has not voted Final\mathsf{Final}. Contradiction. \square

Lemma 2.2 (Unique notarization). For any slot ss, at most one hh can have Notar(s,h)\mathsf{Notar}(s,h) reached.

Proof. If Notar(s,h1)\mathsf{Notar}(s,h_1) and Notar(s,h2)\mathsf{Notar}(s,h_2) are both reached with h1h2h_1 \ne h_2, the same overlap argument yields an honest validator that voted for both, contradicting the local uniqueness constraint on Notar\mathsf{Notar}. \square

Lemma 2.3 (Finalization implies notarization). If Final(s,h)\mathsf{Final}(s,h) is reached, then Notar(s,h)\mathsf{Notar}(s,h) is reached.

Proof. The certificate for Final(s,h)\mathsf{Final}(s,h) has honest signing weight >0> 0 (since q>fq > f). Each honest signer verified that Notar(s,h)\mathsf{Notar}(s,h) is reached before voting. \square

Lemma 2.4 (Unique finalization). For any slot ss, at most one hh can have Final(s,h)\mathsf{Final}(s,h) reached.

Proof. Suppose Final(s,h1)\mathsf{Final}(s,h_1) and Final(s,h2)\mathsf{Final}(s,h_2) are both reached with h1h2h_1 \ne h_2. By Lemma 2.3, Notar(s,h1)\mathsf{Notar}(s, h_1) and Notar(s,h2)\mathsf{Notar}(s, h_2) are reached. This contradicts Lemma 2.2. \square

Lemma 2.5 (Chain notarization). If Notar(s,h)\mathsf{Notar}(s,h) is reached, then for every (s,h)(s',h') in the chain ending at (s,h)(s,h), the statement Notar(s,h)\mathsf{Notar}(s',h') is reached.

Proof. By induction on chain length. For the head, Notar(s,h)\mathsf{Notar}(s,h) is reached by assumption. For the parent (sp,hp)(s_p,h_p), the Notar(s,h)\mathsf{Notar}(s,h) conditions require Notar(sp,hp)\mathsf{Notar}(s_p,h_p) to be reached. Apply the inductive hypothesis to (sp,hp)(s_p,h_p). \square

Theorem 2.6 (Safety). If Final(sa,ha)\mathsf{Final}(s_a,h_a) and Final(sb,hb)\mathsf{Final}(s_b,h_b) are both reached with sasbs_a \le s_b, then the chain ending at (sa,ha)(s_a,h_a) is a prefix of the chain ending at (sb,hb)(s_b,h_b).

Proof. If sa=sbs_a = s_b, then by Lemma 2.4, ha=hbh_a = h_b.

Otherwise, let CbC_b be the chain ending at (sb,hb)(s_b,h_b) with slot set SbS_b. Suppose saSbs_a \notin S_b. Since sa<sbs_a < s_b, the chain CbC_b must skip slot sas_a: there exists a candidate (sc,dc,sd,hd,σc)(s_c, d_c, s_d, h_d, \sigma_c) identified by (sc,hc)(s_c, h_c) in CbC_b with sd<sa<scs_d < s_a < s_c. By Lemma 2.3, Notar(sb,hb)\mathsf{Notar}(s_b,h_b) is reached; by Lemma 2.5, so is Notar(sc,hc)\mathsf{Notar}(s_c,h_c). The notarization conditions for (sc,hc)(s_c,h_c) require Skip(sa)\mathsf{Skip}(s_a) to be reached. But Final(sa,ha)\mathsf{Final}(s_a, h_a) is also reached, contradicting Lemma 2.1. \square

Let (s,h)(s^*, h^*) be the candidate identifier with the largest slot ss^* such that vv has observed Final(s,h)\mathsf{Final}(s^*, h^*), or (1,)(-1, \varnothing) if no finalization has been observed. The output log of vv is the chain state of the chain ending at (s,h)(s^*, h^*).

Corollary 2.7 (Consistency). Any two honest validators’ output logs are such that one is a prefix of the other.

Proof. Let (sa,ha)(s_a^*, h_a^*) and (sb,hb)(s_b^*, h_b^*) be the latest finalized identifiers observed by validators vav_a and vbv_b respectively. WLOG, sasbs_a^* \le s_b^*. Both Final\mathsf{Final} statements are reached (since they were observed). By Theorem 2.6, the chain ending at (sa,ha)(s_a^*, h_a^*) is a prefix of the chain ending at (sb,hb)(s_b^*, h_b^*), so the output log of vav_a is a prefix of the output log of vbv_b. \square

The permission for Notar(s,h)\mathsf{Notar}(s,h) and Skip(s)\mathsf{Skip}(s) to coexist means non-finalized histories may fork (a slot that is both skipped and notarized can be included or excluded by later candidates), but Theorem 2.6 guarantees that finalization collapses any such forks into a single consistent chain.

# 3. Liveness

Safety holds unconditionally but says nothing about progress. The voting rules in Section 1.4 are compatible with validators never casting a single vote. To prove liveness, we need to specify when honest validators actually vote, how leaders produce candidates, and how the network delivers messages between validators. This section provides those operational rules (Section 3.1), introduces a probabilistic network model (Section 3.2), and then proves that, under these rules and this model, finalization happens infinitely often with probability 11.

# 3.1 Honest Validator Rules

Fix parameters T0T_0 (skip-timeout scale), TsT_s (standstill period), and α>1\alpha > 1 (skip-timeout growth rate).

An honest validator vv maintains per-slot voting state (which Notar\mathsf{Notar}, Skip\mathsf{Skip}, and Final\mathsf{Final} votes it has cast) and a local frontier FvF_v (Rule 1). In all cases, “broadcast” means sending the message to every other validator.

Rule 1 (Frontier tracking). A slot ss is cleared for vv if vv has observed Notar(s,)\mathsf{Notar}(s,\cdot), Skip(s)\mathsf{Skip}(s), or Final(s,)\mathsf{Final}(s',\cdot) for some sss' \ge s. The frontier Fv(t)F_v(t) is the smallest slot that is not cleared for vv. Initially Fv=0F_v = 0.

When FvF_v crosses a window boundary kLkL, window kk becomes active for vv.

The next two rules describe how validators obtain and produce candidates.

Rule 2 (Candidate resolution). Honest validators store candidates they have voted Notar\mathsf{Notar} for. Validator vv can obtain a notarized candidate identified by (s,h)(s,h) by requesting it from a uniformly random peer and retrying after an exponentially increasing timeout. When vv receives such a request for a candidate it has stored, it replies.

Given a certificate proving that Notar(s,h)\mathsf{Notar}(s,h) is reached, a node can resolve the state of the chain at (s,h)(s,h) (or simply, resolve the state at (s,h)(s,h)) by following parent links and recursively requesting missing candidates from other nodes.

Rule 3 (Leader duty). When window kk becomes active and vv is its leader, vv chooses any base (sp,hp)(s_p,h_p) for which it can prove all of the following:

  1. sp<kLs_p < kL,
  2. Notar(sp,hp)\mathsf{Notar}(s_p,h_p) is reached,
  3. Skip(s)\mathsf{Skip}(s') is reached for every sp<s<kLs_p < s' < kL.

Validator vv then resolves the state at (sp,hp)(s_p,h_p) and produces a valid candidate (kL,d,sp,hp,σ)(kL,d,s_p,h_p,\sigma).

The candidate is broadcast to all validators.

The following three rules govern how validators vote on candidates and handle leader failures.

Rule 4 (Notarize). Upon receiving a candidate (s,d,sp,hp,σ)(s,d,s_p,h_p,\sigma) identified by (s,h)(s,h), validator vv starts state resolution for (sp,hp)(s_p,h_p). It votes Notar(s,h)\mathsf{Notar}(s,h) and broadcasts the vote as soon as it can prove all of the following:

  1. vv has not previously voted Notar(s,)\mathsf{Notar}(s,\cdot) for any candidate at slot ss.
  2. Notar(sp,hp)\mathsf{Notar}(s_p,h_p) is reached.
  3. For every slot ss' with sp<s<ss_p < s' < s, Skip(s)\mathsf{Skip}(s') is reached.
  4. Candidate (s,h)(s,h) is valid.

Rule 5 (Finalize). Validator vv votes Final(s,h)\mathsf{Final}(s,h) and broadcasts the vote as soon as it can prove all of the following:

  1. vv has voted Notar(s,h)\mathsf{Notar}(s,h),
  2. Notar(s,h)\mathsf{Notar}(s,h) is reached,
  3. vv has not voted Skip(s)\mathsf{Skip}(s).

Rule 6 (Skip). For each window kk, after the window becomes active for vv, and for each slot ss in the window, there is a finite timeout Tskip(s)T0T_\mathsf{skip}(s) \ge T_0 after which vv votes Skip(s)\mathsf{Skip}(s) (unless it has already voted Final(s,)\mathsf{Final}(s,\cdot)), and broadcasts the vote.

Let kk^* be the window containing the largest slot ss^* such that vv can prove Final(s,)\mathsf{Final}(s^*,\cdot) is reached at the moment window kk becomes active. Then Tskip(s)T0αkk1T_\mathsf{skip}(s) \ge T_0 \cdot \alpha^{k-k^*-1} for every slot ss in window kk.

The final two rules handle certificate propagation and recovery from stalls.

Rule 7 (Certificate formation and rebroadcast). When vv has received votes for a statement SS with total weight at least qq, it forms the corresponding certificate. Upon forming or receiving any certificate, vv broadcasts it.

Rule 8 (Standstill resolution). When vv has not observed any new finalized blocks since time t0t_0, the jj-th standstill-resolution attempt (jN0j \in \mathbb{N}_0) occurs at time t0+(j+1)Tst_0 + (j+1)T_s. Each standstill-resolution attempt is a broadcast that sends:

  1. the certificate for Final(s,)\mathsf{Final}(s,\cdot) with largest slot ss that vv has observed (unless s=1s=-1),
  2. all certificates vv holds for slots >s> s,
  3. all votes cast by vv for slots >s> s.

# 3.2 Network Model

We consider the following two-phase network model:

Unlike the standard GST model, which assumes perfect delivery after stabilization, we retain independent message loss after TGSTT_\mathsf{GST}. This forces the liveness proof to account explicitly for the operational mechanisms (standstill and candidate resolution) that a real implementation needs anyway.

Assumption 9 (Vote and certificate delivery). Each vote or certificate sent from one honest validator to another after TGSTT_\mathsf{GST} is an independent trial that arrives within δ\delta with probability at least psdeliv>0p_\mathrm{sdeliv} > 0.

Assumption 10 (Candidate broadcast delivery). For any slot where the designated leader is honest and broadcasts a candidate after TGSTT_\mathsf{GST}, independently of other slots, some adversarially chosen set of honest validators with total weight at least qq receives that candidate within Δbcast\Delta_\mathrm{bcast} with probability at least pbcast>0p_\mathrm{bcast} > 0.

Assumption 11 (Candidate resolution success). Each candidate-resolution request sent to an honest validator after TGSTT_\mathsf{GST} is an independent trial that returns the candidate within Δresolv\Delta_\mathrm{resolv} with probability at least presolv>0p_\mathrm{resolv} > 0.

# 3.3 Almost-sure Liveness

Let H\mathcal{H} be the set of honest validators.

Let t0TGSTt_0 \ge T_\mathsf{GST}, and let sfs_f be the largest slot such that Final(sf,)\mathsf{Final}(s_f,\cdot) is reached by time t0t_0. Consider the event

E0:={no slot s>sf is ever finalized after t0}. E_0 := \{\text{no slot } s > s_f \text{ is ever finalized after } t_0\}.

Lemma 3.1 (Eventual dissemination of honest-held data). Condition on E0E_0. Then, with probability 11, every vote cast by an honest validator for a slot >sf> s_f, and every certificate for a slot >sf> s_f that is observed by an honest validator, is eventually delivered to every other honest validator.

Proof. Under E0E_0, no honest validator ever observes a new finalized block after time t0t_0. By Rule 8, every honest validator therefore performs standstill broadcasts forever, once every TsT_s time units. Each such broadcast contains all certificates the validator holds above its latest observed finalization, as well as all of its own votes above that finalization.

Fix u,vHu,v \in \mathcal{H} and a specific object XX for a slot >sf> s_f, where XX is either a vote cast by uu or a certificate observed by uu. By Rule 8, validator uu retransmits XX infinitely many times. By Assumption 9, each retransmission reaches vv within δ\delta with probability at least psdeliv>0p_\mathrm{sdeliv} > 0. Hence

Pr[v never receives X]=limm(1psdeliv)m=0. \Pr[\text{}v\text{ never receives }X\text{}] = \lim_{m\to\infty}(1-p_\mathrm{sdeliv})^m = 0.

Since the set of honest sender-receiver pairs is finite, this holds simultaneously for all of them with probability 11. \square

Lemma 3.2 (Every slot is eventually cleared under an infinite standstill). Condition on E0E_0. Then, with probability 11, every slot s>sfs > s_f is eventually cleared for every honest validator. Consequently, Fv(t)F_v(t) \to \infty for every vHv \in \mathcal{H} as tt \to \infty.

Proof. Proceed by induction on s>sfs > s_f.

Assume that every slot s<ss' < s is eventually cleared for every honest validator. Then, for every honest validator vv, the local frontier FvF_v eventually reaches at least ss. Hence the window containing slot ss eventually becomes active for every honest validator.

Now consider slot ss. There are two cases.

  1. Some honest validator eventually observes Notar(s,h)\mathsf{Notar}(s,h) for some hh.

    By Lemma 3.1, every honest validator eventually observes the same notarization certificate. Therefore slot ss is eventually cleared for every honest validator by Rule 1.

  2. No honest validator ever observes any Notar(s,)\mathsf{Notar}(s,\cdot).

    It can be shown that in this case no honest validator can ever prove that any Notar(s,)\mathsf{Notar}(s,\cdot) is reached. (Broadly, if no honest validator observes a particular certificate, no honest validator can prove the existence of such.)

    Therefore no honest validator ever votes Final(s,)\mathsf{Final}(s,\cdot), because Rule 5 requires proving that some Notar(s,)\mathsf{Notar}(s,\cdot) is reached. Since the window containing ss is active and Rule 6 gives a finite skip timeout, every honest validator eventually votes Skip(s)\mathsf{Skip}(s).

    The total honest weight is WfqW-f \ge q, so honest skip votes alone suffice to reach Skip(s)\mathsf{Skip}(s). Each honest validator includes its own skip vote in every subsequent standstill broadcast, so by Lemma 3.1 every honest validator eventually receives enough honest skip votes to observe Skip(s)\mathsf{Skip}(s). Thus slot ss is eventually cleared for every honest validator.

In both cases, slot ss is eventually cleared for every honest validator. This completes the induction. \square

Lemma 3.3 (Locally provable eligible bases in sufficiently late active windows). Condition on E0E_0. Let kfk_f be the window containing slot sfs_f. Let vHv \in \mathcal{H}, and let k>kfk > k_f be a window that is active for vv. Then, at the moment window kk becomes active for vv, there exists at least one base for Rule 3 that vv can already prove is eligible. Moreover, any chain ending at such a base has length at most kLkL.

Proof. Fix such vv and kk.

If vv has observed some Notar(b,)\mathsf{Notar}(b,\cdot) or Final(b,)\mathsf{Final}(b,\cdot) with b<kLb < kL, let bb be the largest such slot. Otherwise set b=1b=-1, using the implicit genesis base.

Since window kk is active for vv, every slot s<kLs < kL is cleared for vv. Also, because k>kfk > k_f, no slot skLs \ge kL is ever finalized on E0E_0. Therefore, for every slot ss with b<s<kLb < s < kL, clearing cannot come from any observed finalization at or above ss. By maximality of bb, it also cannot come from any observed notarization or finalization at a slot in (b,kL)(b,kL). Hence each such slot must be cleared by an observed skip certificate. Thus vv can prove Skip(s)\mathsf{Skip}(s) is reached for every b<s<kLb < s < kL.

If b=1b=-1, the genesis base is eligible by the implicit Notar(1,)\mathsf{Notar}(-1,\varnothing). If b0b \ge 0, then the observed notarization or finalization certificate at slot bb, together with the skip certificates for all slots in (b,kL)(b,kL), gives vv a proof that (b,)(b,\cdot) is an eligible base for Rule 3. This proves existence.

Finally, any chain ending at a base with slot b<kLb < kL contains strictly increasing slot numbers, so its length is at most b+1kLb+1 \le kL. \square

Lemma 3.4 (Tail bound for state resolution). There exist constants Cres>0C_\mathrm{res} > 0 and β>0\beta > 0 such that the following holds.

Let m1m \ge 1. Suppose an honest validator needs to resolve the state of a chain whose length is at most mm. Then for every T>0T > 0,

Pr[resolution is not completed within time T]Cresmβ+1Tβ. \Pr[\text{resolution is not completed within time } T] \le C_\mathrm{res} m^{\beta+1} T^{-\beta}.

In particular, for a base in window kk one may take mkLm \le kL, so

Pr[base state is not resolved within time T]Creskβ+1Tβ \Pr[\text{base state is not resolved within time } T] \le C'_\mathrm{res} k^{\beta+1} T^{-\beta}

for a suitable constant Cres>0C'_\mathrm{res} > 0 depending only on LL and the protocol parameters.

Proof. Consider one missing candidate on the chain. Because the chain is certified slot-by-slot, at least one honest validator stores that candidate: honest validators store all candidates they vote Notar\mathsf{Notar} for, and every notarized or finalized slot has positive honest overlap.

A single resolution request chooses a uniformly random peer. The probability that the request is addressed to an honest holder is at least 1/n1/n. Conditioned on that event, Assumption 11 implies a reply within Δresolv\Delta_\mathrm{resolv} with probability at least presolvp_\mathrm{resolv}. Hence one request attempt succeeds within Δresolv\Delta_\mathrm{resolv} with probability at least a:=presolvn>0a := \frac{p_\mathrm{resolv}}{n} > 0.

By Rule 2, retries use exponentially increasing timeouts. Therefore there exist constants B,B>0B,B' > 0 such that by time TT at least Bln(T/B)\left\lfloor B' \ln(T/B) \right\rfloor request attempts have been made whenever TBT \ge B. Hence

Pr[one fixed candidate is still unresolved after time T](1a)Bln(T/B). \Pr[\text{one fixed candidate is still unresolved after time } T] \le (1-a)^{\lfloor B' \ln(T/B) \rfloor}.

Setting β:=Bln(1a)>0\beta := -B' \ln(1-a) > 0, the right-hand side is bounded by C0TβC_0 T^{-\beta} for a suitable constant C0>0C_0 > 0.

Now let the chain length be at most mm. Resolve candidates sequentially from the base upward and allocate time T/mT/m to each candidate. Let PP be “some candidate on the chain is not resolved within its allotted time”. By the bound above and a union bound,

Pr[P]mC0(T/m)β=C0mβ+1Tβ. \Pr[P] \le m \cdot C_0 (T/m)^{-\beta} = C_0 m^{\beta+1} T^{-\beta}.

This proves the claim with Cres=C0C_\mathrm{res} = C_0. The window-kk specialization follows from Lemma 3.3. \square

Lemma 3.5 (Uniform positive chance of finalization in late honest windows). There exist constants k0>kfk_0 > k_f and ε>0\varepsilon > 0 such that the following holds.

Let kk0k \ge k_0 be a window whose designated leader is honest, and let aka_k be the time when window kk becomes active for that leader. Condition on any execution history up to time aka_k in which no slot larger than sfs_f has been finalized by time aka_k. Then the probability that slot kLkL is finalized before the skip timeout in that window is at least ε\varepsilon.

Proof. Fix such a window kk, and let uu be its honest leader. Let τk:=T0αkkf1\tau_k := T_0 \alpha^{k-k_f-1}, the lower bound from Rule 6 for skip timeouts in window kk.

Let (b,hb)(b,h_b) be the base chosen by uu under Rule 3. By Rule 3, at the moment of choice, leader uu already has a local proof that (b,hb)(b,h_b) is eligible: one certificate proving Notar(b,hb)\mathsf{Notar}(b,h_b) is reached, together with certificates proving Skip(s)\mathsf{Skip}(s) is reached for every b<s<kLb < s < kL. By Lemma 3.3, such a base exists in every active window k>kfk > k_f.

We will show that, for all sufficiently large kk, there is a uniform positive probability that:

  1. uu resolves the chosen base and produces the candidate quickly,
  2. the candidate reaches a quorum-weight honest set HkH_k,
  3. the leader’s proof of eligibility reaches every validator in HkH_k via standstill broadcasts,
  4. every validator in HkH_k resolves the base state quickly,
  5. notarization and finalization votes are exchanged quickly enough.

We treat these steps in order.

First, the leader must resolve the chosen base state and produce its candidate. Since any chain ending at a base with slot b<kLb < kL has length at most kLkL, Lemma 3.4 gives

Pr[leader does not finish this within time τk/4]C1kβ+1τkβ \Pr[\text{leader does not finish this within time } \tau_k/4] \le C_1 k^{\beta+1} \tau_k^{-\beta}

for some constant C1>0C_1 > 0.

Second, once the candidate is produced and broadcast, Assumption 10 implies that with probability at least pbcastp_\mathrm{bcast} some honest set HkHH_k \subseteq \mathcal{H} with total weight at least qq receives the candidate within Δbcast\Delta_\mathrm{bcast}.

Third, the validators in HkH_k must receive enough certificates to prove Rule 4(2) and 4(3) for the leader’s chosen base. Let PkP_k be the set of certificates needed for that proof: one certificate for the base, and one skip certificate for each slot between bb and kLkL. Thus PkkL+1|P_k| \le kL+1.

As long as no new finalized block is observed, Rule 8 makes the leader rebroadcast all of these certificates every TsT_s time units. Over any interval of length τk/2\tau_k/2, there are at least

Mk:=τk2Ts1 M_k := \left\lfloor \frac{\tau_k}{2T_s} \right\rfloor - 1

standstill attempts once kk is large enough. For any fixed certificate CPkC \in P_k and any fixed validator wHkw \in H_k, the probability that none of those MkM_k transmissions from uu to ww arrives within δ\delta is at most (1psdeliv)Mk(1-p_\mathrm{sdeliv})^{M_k}. Let PP' be “some validator in HkH_k is still missing some certificate in PkP_k after time τk/2\tau_k/2”. A union bound over all certificate-recipient pairs shows that

Pr[P]n(kL+1)(1psdeliv)Mk. \Pr[P'] \le n(kL+1)(1-p_\mathrm{sdeliv})^{M_k}.

The right-hand side tends to 00 exponentially fast in τk\tau_k.

Fourth, each validator in HkH_k must resolve the same base state before voting Notar(kL,)\mathsf{Notar}(kL,\cdot). Applying Lemma 3.4 and union bounding over at most nn validators,

Pr[some validator in Hk fails to resolve within time τk/4]C2kβ+1τkβ \Pr[\text{some validator in } H_k \text{ fails to resolve within time } \tau_k/4] \le C_2 k^{\beta+1} \tau_k^{-\beta}

for some constant C2>0C_2 > 0.

Fifth, the resulting notarization and finalization votes must be exchanged quickly enough. Choose some collector ckHkc_k \in H_k. Let EvoteE_\mathrm{vote} be the event that:

  1. every validator in HkH_k delivers its notarization vote to ckc_k within δ\delta;
  2. ckc_k delivers the resulting notarization certificate to every validator in HkH_k within δ\delta;
  3. every validator in HkH_k delivers its finalization vote to ckc_k within δ\delta.

This involves at most 3n3n point-to-point deliveries between honest validators. By Assumption 9,

Pr[Evote]psdeliv3n. \Pr[E_\mathrm{vote}] \ge p_\mathrm{sdeliv}^{3n}.

Now define the success event EkE_k as the conjunction of the following:

  1. the leader resolves the chosen base and produces the candidate within τk/4\tau_k/4;
  2. the candidate reaches an honest set HkH_k of total weight at least qq within Δbcast\Delta_\mathrm{bcast};
  3. by time τk/2\tau_k/2, every validator in HkH_k has received all certificates in PkP_k;
  4. by time τk/2+τk/4\tau_k/2 + \tau_k/4, every validator in HkH_k has resolved the base state;
  5. EvoteE_\mathrm{vote} occurs.

On EkE_k, by time τk/2+τk/4\tau_k/2 + \tau_k/4 every validator in HkH_k has all information needed to prove Rule 4(2)–(4). Moreover, because the leader is honest and produces only one candidate per slot, no other properly signed candidate for slot kLkL exists, so no validator in HkH_k can have previously voted Notar(kL,)\mathsf{Notar}(kL,\cdot) for a different candidate, satisfying Rule 4(1). Thus all validators in HkH_k vote Notar(kL,)\mathsf{Notar}(kL,\cdot). The collector forms the notarization certificate and rebroadcasts it. Since all of these validators have not yet skipped slot kLkL, they then vote Final(kL,)\mathsf{Final}(kL,\cdot), and the collector receives finalization votes of total weight at least qq.

The total time used on EkE_k is at most τk2+τk4+Δbcast+3δ\frac{\tau_k}{2} + \frac{\tau_k}{4} + \Delta_\mathrm{bcast} + 3\delta. Because τk\tau_k grows exponentially in kk while Δbcast\Delta_\mathrm{bcast} and δ\delta are constant, there exists k0>kfk_0 > k_f such that for all kk0k \ge k_0, Δbcast+3δτk4\Delta_\mathrm{bcast} + 3\delta \le \frac{\tau_k}{4}, and simultaneously

C1kβ+1τkβ+C2kβ+1τkβ+n(kL+1)(1psdeliv)Mk12. C_1 k^{\beta+1}\tau_k^{-\beta} + C_2 k^{\beta+1}\tau_k^{-\beta} + n(kL+1)(1-p_\mathrm{sdeliv})^{M_k} \le \frac{1}{2}.

For such kk, the chain rule gives

Pr[Ek]12pbcastpsdeliv3n. \Pr[E_k] \ge \frac{1}{2}\, p_\mathrm{bcast}\, p_\mathrm{sdeliv}^{3n}.

Set ε:=12pbcastpsdeliv3n>0\varepsilon := \frac{1}{2}\, p_\mathrm{bcast}\, p_\mathrm{sdeliv}^{3n} > 0.

Finally, on EkE_k the finalization certificate for slot kLkL is formed before time τk\tau_k, hence before any honest validator’s skip timeout for that slot expires. Therefore slot kLkL is finalized before timeout. Thus every sufficiently late honest-leader window succeeds with conditional probability at least ε\varepsilon. \square

Theorem 3.6 (A later finalization occurs almost surely). Fix any finite execution prefix ending at time t0TGSTt_0 \ge T_\mathsf{GST}, and let sfs_f be the largest slot finalized by time t0t_0. Then, conditioned on that prefix, with probability 11 some slot s>sfs > s_f is eventually finalized.

Proof. Let E0E_0 be the event that no slot larger than sfs_f is ever finalized.

By Lemma 3.2, on E0E_0 every honest validator’s frontier tends to infinity. Therefore every sufficiently late window eventually becomes active for every honest validator. Since leader windows rotate cyclically and the honest stake is positive, infinitely many of those active windows have honest leaders.

Enumerate, on the event E0E_0, the honest-leader windows with index at least k0k_0 from Lemma 3.5 as K1<K2<K_1 < K_2 < \cdots. For each ii, let AiA_i be the event that the leader slot of window KiK_i is finalized before its skip timeout.

Lemma 3.5 states that for every ii, Pr[AiFi]ε\Pr[A_i \mid \mathcal{F}_i] \ge \varepsilon, where Fi\mathcal{F}_i is the full execution history up to the activation time of window KiK_i, under the condition that no slot larger than sfs_f has been finalized before that activation time. Hence, by the chain rule,

Pr ⁣[i=1mAic](1ε)mfor every m1. \Pr\!\left[\bigcap_{i=1}^m A_i^c\right] \le (1-\varepsilon)^m \qquad\text{for every } m \ge 1.

But on E0E_0, all of the windows KiK_i exist and all of the events AiA_i fail. Therefore

Pr[E0]Pr ⁣[i=1mAic](1ε)mfor every m1. \Pr[E_0] \le \Pr\!\left[\bigcap_{i=1}^m A_i^c\right] \le (1-\varepsilon)^m \qquad\text{for every } m \ge 1.

Letting mm \to \infty yields Pr[E0]=0\Pr[E_0] = 0. Thus, conditioned on the execution prefix up to time t0t_0, some later slot is finalized almost surely. \square

Theorem 3.7 (Infinitely many finalized blocks). With probability 11, infinitely many slots are finalized.

Proof. Define a sequence of random slots (Sj)j0(S_j)_{j \ge 0} recursively by S0:=1S_0 := -1, and for each j0j \ge 0, let Sj+1S_{j+1} be the smallest slot strictly larger than SjS_j that is finalized, if such a slot exists.

Theorem 3.6 applies after any finite execution prefix. In particular, on the event that SjS_j exists, condition on the history up to the time when SjS_j is finalized. Then, with probability 11, some later slot is finalized. Equivalently,

Pr[Sj+1<Sj<]=1for every j0. \Pr[S_{j+1} < \infty \mid S_j < \infty] = 1 \qquad\text{for every } j \ge 0.

By induction on jj,

Pr[Sj<]=1for every j0. \Pr[S_j < \infty] = 1 \qquad\text{for every } j \ge 0.

Hence, with probability 11, the sequence (Sj)(S_j) is defined for all jj, which means that infinitely many slots are finalized. \square

Theorem 3.7 establishes almost-sure liveness. Under the operational rules of Section 3.1 and the probabilistic post-TGSTT_\mathsf{GST} network model of Section 3.2, the protocol finalizes blocks infinitely often with probability 11. Combined with the safety theorem from Section 2, this implies that honest validators’ output logs form a single ever-growing chain.

# 4. Implementation Notes

# 4.1 Concept-to-Code Map

In the C++ node, the implementation lives in validator/consensus/. The following table maps protocol concepts to their code counterparts:

Protocol concept Code
Slot CandidateId::slot (types.h); per-slot state in ConsensusState::slots_ (simplex/state.h)
LL slots_per_leader_window in NewConsensusConfig::Simplex
Leader rotation SimplexCollatorSchedule::expected_collator_for: s/Lmodn\lfloor s/L \rfloor \bmod n (simplex/bus.cpp)
Candidate struct Candidate (types.h): id, parent, block data, leader signature
Notar\mathsf{Notar}/Skip\mathsf{Skip}/Final\mathsf{Final} votes NotarizeVote, SkipVote, FinalizeVote (simplex/votes.h)
Certificates Certificate<T> template (simplex/certificate.h); aliases NotarCert, SkipCert, FinalCert
Frontier FvF_v PoolImpl::now_ (simplex/pool.cpp): smallest slot not yet notarized or skipped
Rule 1 (frontier tracking) PoolImpl::advance_present advances now_; ConsensusState::notify_finalized prunes old slots
Rule 2 (candidate resolution) CandidateResolverImpl (simplex/candidate-resolver.cpp): random-peer fetch with exponential backoff (0.5 s initial, 1.5$\times$, 30 s cap)
Rule 3 (leader duty) BlockProducerImpl::generate_candidates (block-producer.cpp): produces LL candidates per window
Rule 4 (notarize) ConsensusImpl::try_notarize (simplex/consensus.cpp): async pipeline of parent wait \to state resolve \to validate \to vote
Rule 5 (finalize) ConsensusImpl::try_vote_final (simplex/consensus.cpp)
Rule 6 (skip) ConsensusImpl::alarm (simplex/consensus.cpp): fires after first_block_timeout_s_ per window
Rule 7 (cert formation/rebroadcast) PoolImpl::handle_vote (simplex/pool.cpp) forms certs at quorum; PoolImpl::handle_our_certificate rebroadcasts obtained certificates
Rule 8 (standstill) PoolImpl::alarm (simplex/pool.cpp): fires every 10 s, broadcasts all held certs and own votes

Communication uses a private validator overlay (simplex/private-overlay.cpp). Votes and certificates are sent individually to each peer. Candidates are broadcast using two-step FEC erasure coding (overlay/broadcast-twostep.cpp), where the data is split into k2n/3k \approx 2n/3 symbols and each peer receives one symbol.

# 4.2 Deviations from the Rules

Rule 3 only requires the leader to produce one candidate per window. The implementation produces LL: generate_candidates loops over all slots in the window, producing one candidate per slot with each referencing the previous as its parent. Later candidates in the window begin generation immediately without waiting for earlier ones to be notarized, since the leader already knows the only possible parent — it just produced it.

The implementation sometimes suppresses votes that the Section 3.1 rules would require. None of these affect liveness, since in all such situations the suppressed vote would not lead to formation of a new certificate for a non-finalized slot.

Rule 6 requires Tskip(s)T0αkk1T_\mathsf{skip}(s) \ge T_0 \cdot \alpha^{k - k^* - 1}, where kk^* is determined by the last finalization that was reached. The implementation currently resets the timeout upon seeing a leader window without skip votes — this is a bug and will be fixed. We additionally cap Tskip(s)T_\mathsf{skip}(s) at 100 s, in the expectation that any reasonable consensus synchronization will not require longer skip timeouts. Regardless, a mechanism to manually increase first_block_max_timeout_s is planned.

# 4.3 Network Model Discussion

Assumptions 10 and 11 require bounded delivery times Δbcast\Delta_\mathrm{bcast} and Δresolv\Delta_\mathrm{resolv}. This is justified because the implementation caps candidate payload size at a constant CmaxC_\mathsf{max}, so delivery time is δ+Θ(Cmax)\delta + \Theta(C_\mathsf{max}) for both broadcast and resolution.

The egress induced by the protocol is currently unbounded. In particular, a sufficiently long period of asynchrony (or a bug) can induce a state whose synchronization saturates link capacity, causing unsynchronized state to only grow further — a death spiral. We plan to address this with better timeout tuning and optimizations to the standstill resolution mechanism.

The two-step FEC encoding uses k2n/3k \approx 2n/3 data symbols distributed one per peer. Reconstruction requires any kk of the nn symbols, tolerating at most nkn/3n - k \approx n/3 losses. This is a count threshold, not a weight threshold. We consider this acceptable since we do not expect the number of Byzantine validators to significantly exceed their share of total weight.

The network model requires drop probabilities to be independent across packets. In practice, QUIC is more likely to drop packets after a burst of high momentary egress, even when it could have spread the load over time. We plan to address this by more precise tracking of the moment each message becomes irrelevant for the protocol, allowing earlier cancellation and reducing unnecessary egress.

# 4.4 Empty Candidates

The leader sometimes produces an empty candidate — one that references an existing block by its BlockIdExt rather than carrying new block data. Empty candidates participate in consensus normally (they are notarized, finalized, and form chains) but do not advance any user-visible blockchain state.

Empty candidates are generated in two situations, both driven by constraints external to consensus:

  1. A shardchain leader generates empty candidates when the masterchain’s last finalized seqno falls more than 8 blocks behind the shard’s current tip. This is a legacy validation requirement that prevents the shardchain from building an arbitrarily long tail of blocks that the masterchain has not yet acknowledged.

  2. A masterchain leader generates empty candidates when the next block to produce would be more than one seqno ahead of the last consensus-finalized block. This ensures that every masterchain block eventually receives finalization signatures, which all non-validator nodes depend on.