A Fast Confirmation Rule (aka Fast Synchronous Finality) for the Ethereum Consensus Protocol

Aditya Asgaonkar
Offchain Labs
1

,

Francesco D’Amato
Ethereum Foundation

,

Roberto Saltini
Ethereum Foundation
2

,

Luca Zanolini
Ethereum Foundation

,

Chenyi Zhang
University of Canterbury


Abstract

A Confirmation Rule, within blockchain networks, refers to an algorithm implemented by network nodes that determines (either probabilistically or deterministically) the permanence of certain blocks on the blockchain. An example of Confirmation Rule is the Bitcoin’s longest chain Confirmation Rule where a block \(b\) is confirmed (with high probability) when it has a sufficiently long chain of successors, its siblings have notably shorter successor chains, the majority of the network’s total computation power (hashing) is controlled by honest nodes, and network synchrony holds.

The only Confirmation Rule currently available in the Ethereum protocol, Gasper, is the FFG Finalization Rule. While this Confirmation Rule works under asynchronous network conditions, it is quite slow for many use cases. Specifically, best-case scenario, it takes around 13 to 19 min to confirm a transaction, where the actual figure depends on when the transaction is submitted to the network.

In this work, we devise a Fast Confirmation Rule for Ethereum’s consensus protocol. Our Confirmation Rule relies on synchrony conditions, but provides a best-case confirmation time of 12 seconds only, greatly improving on the latency of the FFG Finalization Rule.

Users can then rely on the Confirmation Rule that best suits their needs depending on their belief about the network conditions and the need for a quick response.

1 Introduction and Related Work↩︎

A crucial aspect of every consensus protocol for blockchains is the Confirmation Rule, which determines the permanency of blocks on the chain. Specifically, a Confirmation Rule is an algorithm run by nodes that enables them to identify a confirmed chain. Within this chain, blocks are considered permanent. In other terms, a Confirmation Rule outputs (either probabilistically or deterministically) whether a certain block is confirmed. One such example is found in the Bitcoin’s longest chain Confirmation Rule [1] where a block \(b\) is confirmed (with high probability) when it has a sufficiently long chain of successors, its siblings have notably shorter successor chains, the adversary does not control more computational (hashing) power than honest nodes and network synchrony holds.

Such Confirmation Rule, which originated in Bitcoin, was also used in Ethereum prior to The Merge [2]. However, with The Merge and the transition to the Ethereum Proof of Stake (PoS) protocol, Gasper [3], the Confirmation Rule underwent significant changes.

Gasper, Ethereum’s Proof of Stake protocol, consists of two key protocols, as shown by Neu, Tas, and Tse [4], each with its own Confirmation Rule. One protocol is FFG-Casper [5], which provides a Confirmation Rule that, differing from the synchronous Confirmation Rule such as the one adopted by the Bitcoin’s protocol, ensures asynchronous safety, or finality. We refer to this Confirmation Rule as the FFG Finalization Rule. Such Confirmation Rule indicates that, unlike synchronous Confirmation Rules where reorganizations (commonly referred to as reorgs) of previously confirmed blocks can occur under asynchrony, FFG-Casper mitigates such events by leveraging the concept of quorums. Specifically, the FFG Confirmation Rule does not confirm a block until it receives a quorum of votes in its favor. Also, the FFG Confirmation Rule confirms a block \(b\) only after either 64 or 96 other blocks have been proposed, with the figure depending on the time when block \(b\) is proposed. Given that blocks are proposed at a cadence of 12 seconds each, this translates to a best confirmation time of either \(12.8\) or \(19.2\) minutes.

The other protocol is Latest Message Driven GHOST (LMD-GHOST), which is designed to ensure liveness under both dynamic participation and synchrony. In the context of LMD-GHOST, there is not yet a standardized rule for confirming blocks, and various service providers may use different methods for block confirmation. Hence, the only Confirmation Rule currently available for the Ethereum protocol is the FFG Finalization Rule. This means that any use case that is dependant on knowing whether a transaction will never be removed from the blockchain (e.g., paying for goods using cryptocurrencies, enabling trading of cryptocurrencies on centralized exchanges after a deposit is made) must wait at leat \(12.8\) minutes after the transaction is submitted to the Ethereum network before it can proceed.

In this paper, we introduce a novel, Fast Confirmation Rule for LMD-GHOST, grounded in a formalized understanding of the Gasper protocol as per the Ethereum consensus specifications [6]. Our Fast Confirmation Rule provides a best-case confirmation time of only one block, i.e., \(12\) seconds. However, given that LMD-GHOST is a synchronous protocol, compared to the FFG Finalization Rule, our Fast Confirmation Rule relies on synchronous network assumptions. Hence, our Fast Confirmation Rule is not a replacement for the FFG Finalization Rule, but it is rather complementary to it. Now, ue cases where one needs a fast confirmation time but relaying on network synchrony is acceptable are possible. An example of such scenario is using low-value cryptocurrency transaction, like paying for a coffee.

We begin with a foundational Confirmation Rule for LMD-GHOST, treating it as an independent protocol. This Confirmation Rule aims for fast block confirmations by adopting a heuristic that balances speed against reduced safety guarantees, potentially confirming blocks immediately after their creation under optimal conditions. We devise such a Confirmation Rule based on two safety indicators: \(Q_b^n\) and \(P_b^n\). The first indicator, \(Q_b^n\), quantifies the support ratio for a specific block \(b\) relative to the total committee weight from the slot of \(b\) to slot \(n\). The second, \(P_b^n\), measures the honest proportion of support for block \(b\). We demonstrate that with a suitable value of \(P_b^n\), a user can reliably confirm block \(b\). Conversely, as direct observation of honest support by users is not feasible, we show how, under certain adversarial conditions, reaching a specific threshold of \(Q_b^n\), which is observable, allows for the inference of \(P_b^n\), thereby enabling the confirmation of block \(b\).

Then, we enhance this rule by incorporating FFG-Casper’s effects. As we will see, this amounts to adding conditions that ensure that once a block is confirmed, the FFG-Casper protocol will never remove (filter out) this block from the set of blocks to give as input to the LMD-GHOST protocol.

The remainder of this paper is organized as follows. Section 2 introduces the system model, provides a formal definition of the existing protocol Gasper in line with the consensus specification, and formally presents the concept of the Confirmation Rule. This sets the groundwork for developing our Confirmation Rule as an algorithm characterized by two main properties, namely Safety and Monotonicity. In Section 3, we introduce a basic version of the Confirmation Rule that exclusively considers LMD-GHOST as a standalone protocol, without integrating FFG-Casper. Section [sec:conf-rule-ldmghosthfc] builds upon the initial framework by exploring how FFG-Casper influences LMD-GHOST, thereby enhancing the initial Confirmation Rule. In this section, we also show that the resulting confirmation rule can confirm blocks within one slot in the best-case scenario. Note that in Section 3 and Section [sec:conf-rule-ldmghosthfc], we base our discussion on the premise that the set of participants in the protocol remains constant, with no new additions, and that there are no rewards, exits, or penalties for honest participants (Assumption 1, Section 3). This assumption is revisited in Section 5, where we present a new Confirmation Rule for LMD-GHOST-HFC that accommodates changes in participant status. In Appendix 7, we further analyze a variant of the Confirmation Rule introduced in Section [sec:conf-rule-ldmghosthfc]. Specifically, we present a Confirmation Rule that, although less practical than the one introduced in Section [sec:conf-rule-ldmghosthfc], operates under less stringent assumptions. We conclude this work in Section 6, where we draw the conclusions and outline potential future directions.

2 System model, Gasper and Confirmation Rule↩︎

2.1 System Model↩︎

2.1.0.1 Validators.

We consider a (possibly infinite) set \(\mathcal{W}\) of validators that communicate with one another by exchanging messages. Each validator is associated with a distinct cryptographic identity, and the public keys are shared among all validators. A validator always abiding by its protocol is referred to as honest. Conversely, a validator that deviates arbitrarily from its specification is called Byzantine, for example when corrupted by an adversary. We let \(\mathcal{J}\subseteq \mathcal{W}\) be the set of all honest validators and \(\mathcal{A}:= \mathcal{W}\setminus \mathcal{J}\) the set of all Byzantine validators. The composition of the set \(\mathcal{J}\) is unknown. We assume the existence of a probabilistic polynomial-time adversary that may forge (non-encrypted) messages, temporarily delay the network traffic, and corrupt (Byzantine) validators over an entire protocol execution. Nevertheless, we assume the cryptographic primitives used in a protocol are perfect. For example, the adversary can never forge a signature without using the corresponding private key. The signer of a given message \(m\) is denoted as \(\mathit{signer}(m)\).

2.1.0.2 Confirmation Rule Executors.

We distinguish between validators and confirmation rule executors. The latters are those executing the Confirmation Rule by having read-only access to the internal state of an honest validator of their choice.

2.1.0.3 Network Model.

We assume a network model in which honest validators have synchronized clocks and any message sent at time \(t\) are received by time \(\max(t, \mathsf{GST})+\Delta\) where \(\mathsf{GST}\) is known as the global stabilization time and \(\Delta\) represents the maximum message latency after \(\mathsf{GST}\). As we detail in Section 2.2, \(\Delta\) is assumed to have a well defined upper bound. While do not know the value of \(\mathsf{GST}\), it is assumed that any confirmation rule executor does. 3

2.1.0.4 Gossiping.

We assume that any honest validator immediately gossip (i.e., broadcast) any message that they receive.

2.1.0.5 View.

The view of a validator corresponds to the set of all the messages that the validator has received. More specifically, we use \(\setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\) to denote the set of all messages received by validator \(v\) at time \(t\).

2.2 Gasper↩︎

Gasper is a proof-of-stake consensus protocol made of two components [4], namely LMD-GHOST-HFC and FFG-Casper [5]. The former is a synchronous consensus protocol that works under dynamic participation and outputs a canonical chain, while the latter is a partially synchronous protocol, also referred to as finality gadget, whose role is to finalize blocks in the canonical chain and preserve safety of such finalized blocks during asynchronous periods. In the following, we summarise the concepts and properties pertaining to Gasper that are required in the remaining part of this work.

2.2.0.1 Time and Slots.

Time is organized into a consecutive sequence of slots. We denote the time at which a slot \(s\) begins with \(\mathsf{st}(s)\), and use \(\mathsf{slot}(t)\) to denote the slot associated with time \(t\), i.e., \(\mathsf{slot}(t) = s\) implies that \(t \in [\mathsf{st}(s),\mathsf{st}(s+1))\).

2.2.0.2 Epochs.

A sequence of \({E}\) consecutive slots forms an epoch where \({E}\geq 2\). Epochs are numbered starting from 0. We use \(\mathsf{first\_slot}(e)\) and \(\mathsf{last\_slot}(e)\) to denote the first slot and last slot of epoch \(e\), respectively, i.e., \(\mathsf{first\_slot}(e) := e {E}\) and \(\mathsf{last\_slot}(e):= (e+1) {E}- 1\). We write \(\mathsf{epoch}(s)\) for the epoch associated with slot \(s\), i.e., \(\mathsf{epoch}(s) = e\) implies \(s \in [\mathsf{first\_slot}(e), \mathsf{last\_slot}(e)]\). Also we define \(\mathsf{epoch}(t) := \mathsf{epoch}(\mathsf{slot}(t))\). Finally, we let \(\mathsf{st}(e) := \mathsf{st}(\mathsf{first\_slot}(e))\).

2.2.0.3 Validator Sets and Committees.

According to the view of an honest validator \(v\) at time \(t\), only a finite subset of all the validators are active for each epoch \(e\). We denote such set as \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e,val=v,when=t} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\) and refer to it as the valdiator set for epoch \(e\) according to the view of validator \(v\) at time \(t\). The validator set for epoch \(e\) (according to the view of validator \(v\) at time \(t\)) is then partitioned into committees, with one committee per slot. The union of all the committees from slot \(s\) to slot \(s'\) included, according to the view of validator \(v\) at time \(t\) is denoted by \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',val=v,when=t} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\). We also define \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e,val=v,when=t} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } := \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e,val=v,when=t} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \cap \mathcal{J}\) and \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',val=v,when=t} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } := \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',val=v,when=t} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \cap \mathcal{J}\). We assume that, if \(\mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(t)-2)\geq\mathsf{GST}\), then, from time \(t\) onwards, all honest validators have the same view on the committee assignment for each slot. Given that we will need to always work under the condition that all honest validators have the same view on the committee assignment for each slot, for ease of notation, we define \[\mathbb{GST}:= \begin{cases} \mathsf{st}(\mathsf{epoch}(\mathsf{GST})+1), \text{ if } \mathsf{GST}\leq\mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(\mathsf{GST})))\\ \mathsf{st}(\mathsf{epoch}(\mathsf{GST})+2), \text{ otherwise} \end{cases}\] This allows us to say that for any two times \(t\) and \(t'\) and any two honest validators \(v\) and \(v'\), if \(t\geq \mathbb{GST}\land t'\geq\mathbb{GST}\), then \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',val=v,when=t} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } = \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',val=v',when=t'} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\). For additional ease of notation, we drop the validator and time parameters and simply write \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s'} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\), \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s'} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\), \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\), \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\) to mean \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',when=t,val=v} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\), \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=s',when=t,val=v} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\), \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e,when=t,val=v} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\), \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e,when=t,val=v} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\), respectively, for any value \(t\geq \mathbb{GST}\) and honest valdiator \(v\).

2.2.0.4 Voting Time and Upper Bound for \(\Delta\).

As detailed later in this section, one of the main duties of validators is casting votes of different types (FFG and GHOST). If and only if an honest validator \(v\) is in the committee of a slot \(s\), then, during slot \(s\), \(v\) casts exactly one vote per type. For any slot \(s\) and honest validator \(v\), we assume that \(\Delta\) is less than the time between when \(v\) casts any vote in slot \(s\) and the beginning of slot \(s+1\), i.e., for any slot \(s'\) such that \(\mathsf{st}(s') \geq \mathsf{GST}\), all the votes sent by honest validators during any slot, up to \(s'\) included, are received by any honest validator by time \(\mathsf{st}(s'+1)\).

2.2.0.5 Blocks.

Blocks are the data structures used by Gasper to order transactions. Except for the genesis block \(b_{\texttt{gen}}\), each block \(b\) has a parent which we denote via the writing \(\mathsf{parent}(b)\). Conversely, \(b \neq b_{\texttt{gen}}\) is said to be a child of \(\mathsf{parent}(b)\). We use the notations \(b_a \prec b_d\) and \(b_d \succ b_a\) to indicate that block \(b_a\) can be reached from block \(b_d\) by recursively applying the function \(\mathsf{parent}(\cdot)\) to \(b_d\). We define \(b\preceq b'\) naturally as \(b\prec b'\) or \(b=b'\). For any two blocks \(b\) and \(b'\) such that \(b \preceq b'\), we say that \(b\) is an ancestor of \(b'\) and that \(b'\) is a descendant of \(b\). We say that two blocks \(b\) and \(b'\) conflict iff neither of the two blocks is the descendant of the other, i.e., \(b' \npreceq b \land b \npreceq b'\). We let \(\setkeys{children}{blck=b,view=\mathcal{V}} \mathsf{children}(\children@Blck,\children@View)\) be the set of blocks in \(\mathcal{V}\) that have \(b\) as parent, i.e., \(\setkeys{children}{blck=b,view=\mathcal{V}} \mathsf{children}(\children@Blck,\children@View) := \{b' \in \mathcal{V}: \mathsf{parent}(b') = b \}\). The chain of a block \(b\), which we denote as \(\mathsf{chain}(b)\), is the set of all ancestors of \(b\), i.e., \(\mathsf{chain}(b) := \{b' : b' \preceq b\}\). Sometimes, we refer to “the chain of \(b\)” simply as “chain \(b\)”. We assume that set of all possible blocks to be finite, which implies that the chain of any block is also finite and includes \(b_{\texttt{gen}}\). To each block \(b\) is associated a slot \(\mathsf{slot}(b)\) which, as we will see later, is supposed to indicate the slot during which block \(b\) is proposed. By definition, \(\mathsf{slot}(b_{\texttt{gen}}) = 0\). A block \(b\) is considered valid only if (i) the signer of \(b\) is the expected proposer for slot \(\mathsf{slot}(b)\) and (ii) \(\mathsf{slot}(b) > \mathsf{slot}(\mathsf{parent}(b))\). We let \(\mathit{blocks}(\mathcal{V})\) denote the set of all valid blocks in the view \(\mathcal{V}\). Finally, we establish a total pre-order amongs blocks by letting \(b \leq b'\) iff \(\mathsf{slot}(b') \leq \mathsf{slot}(b)\).

2.2.0.6 Checkpoints.

A checkpoint is a tuple \(C = (\mathsf{block}(C), \mathsf{epoch}(C))\) composed of a block \(\mathsf{block}(C)\) and an epoch \(\mathsf{epoch}(C)\). For any epoch \(e'\), the checkpoint \(C\) in the chain of \(b\) with \(\mathsf{epoch}(C) = e'\) is denoted by \(\mathsf{C}(b, e')\) and corresponds to the pair \((b_c, e')\), where \(b_c\) is the block in the chain of \(b\), i.e., \(b_c \preceq b\), with the highest slot such that \(\mathsf{slot}(b_c) \leq e\)4. The latest checkpoint of a block \(b\), denoted by \(\mathsf{C}(b)\), is defined as \(\mathsf{C}(b) := \mathsf{C}(b, \mathsf{epoch}(b))\). Checkpoint \((b_{\texttt{gen}},0)\) is defined as the genesis checkpoint. We write \(b \preceq C\) to mean \(b \preceq \mathsf{block}(C)\), while \(C \prec b\) means that \(\mathsf{C}(b, \mathsf{epoch}(C)) = C\). Also, \(C_d \prec C_a\) or \(C_a \succ C_d\) means that \(\mathsf{epoch}(C_a) < \mathsf{epoch}(C_d)\) and \(C_a \prec \mathsf{block}(C_d)\). The definition of conflicting blocks is naturally extended to blocks and checkpoints. We say that a block or checkpoint \(x\) conflicts with a block or checkpoint \(x'\) iff \(x \npreceq x' \land x' \npreceq x\). Also, we say that a checkpoint \(C\) is valid to mean that \(\mathsf{block}(C)\) is valid. Finally, we establish a strict order between any two checkpoints \(C\) and \(C'\) by defining \(C < C'\) to mean \(\mathsf{epoch}(C) < \mathsf{epoch}(C')\).

2.2.0.7 Effective balance.

An effective-balance-assignment is a mapping \(\mathcal{B}: \mathcal{W}\to \mathbb{R}_{\geq 0}\) which assigns to each validator \(v\) its effective balance. Intuitively, the effective balance of a validator determines its voting power within the protocol. Each block \(b\) contains an effective-balance-assignment which we denote as \(\mathsf{EBA}(b)\). We define \(\setkeys{weightofset}{chkp=\mathcal{B}} \left|{v}\right|^{\weightofset@Chkp} := \mathcal{B}(v)\) and, given a finite set of validators \(\mathcal{X}\subseteq \mathcal{W}\), we define \(\setkeys{weightofset}{chkp=\mathcal{B}} \left|{\mathcal{X}}\right|^{\weightofset@Chkp} := \sum_{v \in \mathcal{X}} \setkeys{weightofset}{chkp=\mathcal{B}} \left|{v}\right|^{\weightofset@Chkp}\). Also, we write \(\setkeys{totvalset}{chkp=\mathcal{B}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\) for the set of validators that have a non-zero effective-balance according to \(\mathcal{B}\), i.e., \(\setkeys{totvalset}{chkp=\mathcal{B}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} := \{v \in \mathcal{W}: \setkeys{weightofset}{chkp=\mathcal{B}} \left|{v}\right|^{\weightofset@Chkp} > 0 \}\). We call such a set the total validator set according to \(\mathcal{B}\). Generally, hereafter, whenever we define a set of validators of the form \(\mathcal{X}_{\mathit{parlist}_b}^{\mathit{parlist}_t}\) where \(\mathit{parlist}_b\) and \(\mathit{parlist}_t\) can be any list of parameters, we implicitly also define \(X_{\mathit{parlist}_b}^{\mathit{parlist}_t,\mathcal{B}} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{\mathcal{X}_{\mathit{parlist}_b}^{\mathit{parlist}_t}}\right|^{\weightofset@Chkp}\). Also, whenever using a block \(b\) or a checkpoint \(C\) in place of an effective-balance-assignment\(\mathcal{B}\), we mean the effective-balance-assignment\(\mathsf{EBA}(b)\) or \(\mathsf{EBA}(\mathsf{block}(C))\), respectively. For any valid block \(b\), the set \(\setkeys{totvalset}{chkp=b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\) is finite. Also, by definition, \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(b_{\texttt{gen}})} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=b_{\texttt{gen}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\).

2.2.0.8 Changes to the Validator Set and Effective Balances.

The Gasper protocol provisions a way to allow both new validators to join the validator set and existing validators to exit the validator set. Exiting can be either voluntarily or involuntarily. A validator is involuntarily exited if it can be proved that it did not act in accordance to the protocol. We provide more details on what this means later in Section 2.2.1 Aside from these changes to the validator set, the effective balance of a validator can also increase (or decrease) due the validator accruing rewards (or penalties), for performing (or not performing) their duties in a timely manner.

2.2.1 FFG-Casper↩︎

Casper [5] is a partially synchronous consensus protocol that operates atop a block proposal mechanism and is responsible for determining when a block is final. The key property of a final block \(b\) is that, provided that the effective-balance-weighted ratio of Byzantine validators over the total validator set is less than \(\frac{1}{3}\), any other final block does not conflict with \(b\). This mechanism also introduces a system of accountability, which enables the detection, identification, and punishment of a validator not following the protocol’s rules. Proposed by Buterin and Griffith [5], and then integrated within Gasper [3], Casper is based on a two-phase traditional propose-and-vote-based Byzantine fault-tolerant (BFT) system, resembling the PBFT [8] or HotStuff [9] protocols. However, as already mentioned, unlike the latter two, Casper is not a fully defined protocol and is structured to function as a gadget, specifically a finality gadget (FFG), atop an existing protocol that generates a chain of blocks which, in the case of Gasper, is the LMD-GHOST-HFC protocol.

2.2.1.1 FFG Votes.

In Casper, participants vote for links between checkpoints. Such votes, which we call FFG votes, are tuples of the form \(a = \langle C_s, C_t\rangle\). Checkpoint \(C_s\) is referred to as the source checkpoint of the FFG vote \(a\), while \(C_t\) is referred to as the target checkpoint of \(a\).

2.2.1.2 Unrealized Justified Checkpoint.

Each block includes a (possibly empty) set of FFG votes. The set of FFG votes included in the chain of a block \(b\) determines the set of unrealized justified checkpoints5 for that chain, which we denote as \(\mathsf{AU}(b)\). We do not provide the details of how such a set is computed by Gasper as it is not straightforward. We will instead limit ourselves to list those properties of such a set that are relied upon by some of the proofs in the remainder of this paper. When we say that a checkpoint \(C\) can never be justified we mean that it is impossible to create a valid block \(b\) such that \(C \in\mathsf{AU}(b)\).

2.2.1.3 Greatest Unrealized Justified Checkpoint in the chain of \(b\).

The greatest unrealized justified checkpoint in the chain of a block \(b\), denoted as \(\mathsf{GU}(b)\), is the unrealized justified checkpoint \(C \in \mathsf{AU}(b)\) in the chain of \(b\) such that \(C \geq C'\) for any \(C' \in \mathsf{AU}(b)\). Assume that ties are broken arbitrarily 6.

2.2.1.4 Greatest Justified Checkpoint in the chain of \(b\).

The greatest justified checkpoint in the chain of block \(b\), denoted as \(\mathsf{GJ}(b)\), is the greatest unrealized checkpoint of the prefix of chain \(b\) including only and all the blocks with epoch strictly lower than \(\mathsf{epoch}(b)\), i.e.,

Definition 1 (Greatest Justified Checkpoint in the chain of \(b\)).
\[\mathsf{GJ}(b) = \mathsf{GU}(\max(\{b' : b'\prec b \land \mathsf{epoch}(b') < \mathsf{epoch}(b)\}))\]

Assume that ties are broken arbitrarily6.

2.2.1.5 FFG Voting Process and Voting Source of block \(b\).

The FFG voting process is dependant on the LMD-GHOST-HFC protocol which is described in Section 2.2.2. Specifically, let \(b\) be the output of LMD-GHOST-HFC at time \(t\) when an honest validator casts an FFG vote \(a\). Then, the target checkpoint of \(a\) is simply \(\mathsf{C}(b,\mathsf{epoch}(t))\), and the source of \(a\), also called the voting source of block \(b\) in epoch \(\mathsf{epoch}(t)\) corresponds to \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=\mathsf{epoch}(t)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\) as defined below.

Definition 2 (Voting Source). \[\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ) := \begin{cases} \mathsf{GJ}(b), & \text{if \mathsf{epoch}(b) = e}\\ \mathsf{GU}(b), & \text{if \mathsf{epoch}(b) < e}\\ \text{undefined,} &\text{otherwise} \end{cases}\]

We also let \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ) := \setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=\mathsf{epoch}(t)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\).

2.2.1.6 Greatest Justified Checkpoint in view \(\mathcal{V}\) at time \(t\).

The greatest justified checkpoint in view \(\mathcal{V}\), denoted as \(\setkeys{gjview}{view=\mathcal{V}, time=t} \mathsf{GJ}(\gjview@View, \gjview@Time)\) corresponds to the greatest voting source in epoch \(\mathsf{epoch}(t)\) according to the blocks in \(\mathcal{V}\) with slot no higher than \(\mathsf{slot}(t)\), i.e.,

Definition 3 (Greatest Justified Checkpoint in view \(\mathcal{V}\) at time \(t\)). \[\setkeys{gjview}{view=\mathcal{V}, time=t} \mathsf{GJ}(\gjview@View, \gjview@Time) := \max(\{\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ): b \in \mathit{blocks}(\mathcal{V}) \land \mathsf{slot}(b) \leq \mathsf{slot}(t)\})\]

We let \(\setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} := \setkeys{gjview}{view={ \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}}, time=t} \mathsf{GJ}(\gjview@View, \gjview@Time)\). Assume that ties are broken arbitrarily6.

2.2.1.7 Greatest Finalized Checkpoint in the chain of \(b\).

For each block \(b\), Gasper determines the set of finalized checkpoints according to block \(b\), denoted as \(\mathsf{AF}(b)\). Such set is a subset of all the Unrealized Justified Checkpoint of a block \(b\), i.e., \(\mathsf{AF}(b) \subseteq \mathsf{AU}(b)\). The greatest finalized checkpoint in the chain of block \(b\), denoted as \(\mathsf{GF}(b)\), is the checkpoint \(C \in \mathsf{AF}(b)\) such that \(C \geq C'\) for all \(C' \in \mathsf{AF}(b)\). Assume that ties are broken arbitrarily6.

2.2.1.8 Greatest Finalized Checkpoint in view \(\mathcal{V}\) at time \(t\).

The greatest finalized checkpoint in view \(\mathcal{V}\), denoted as \(\setkeys{gfview}{view=\mathcal{V}, time=t} \mathit{GF}(\gfview@View, \gfview@Time)\) corresponds to the greatest finalized checkpoint according to any block in \(\mathcal{V}\) with slot no higher than \(\mathsf{slot}(t)\), i.e., \[\setkeys{gfview}{view=\mathcal{V}, time=t} \mathit{GF}(\gfview@View, \gfview@Time) := \max(\{\mathsf{GF}(b): b \in \mathit{blocks}(\mathcal{V}) \land \mathsf{slot}(b) \leq \mathsf{slot}(t)\})\] Assume that ties are broken arbitrarily6.

2.2.1.9 Slashing.

Participants in Casper must adhere to key rules to ensure integrity. Any violation, called a slashable offence, is met with a penalty called slashing, where the participant’s effective balance is (partially) confiscated, the participant is eventually exited from the validator set and the evidence submitter is rewarded. Honest validators never commit slashable offences and therefore they are never slashed. Evidence of a slashable offence is included in blocks. We use the notation \(\setkeys{slashedset}{chkp=b} \mathcal{D}^{\slashedset@Chkp}\) to represent the set of validators that have committed slashable offences according to the evidence included in the chain of \(b\). For any checkpoint \(C\), we define \(\setkeys{slashedset}{chkp=C} \mathcal{D}^{\slashedset@Chkp} := \setkeys{slashedset}{chkp=\mathsf{block}(C)} \mathcal{D}^{\slashedset@Chkp}\). The specifics of the Casper’s integrity rules are not provided as they are not required by the reminder of this paper.

2.2.1.10 Safety Decay.

Because the validator set can change over time, Gasper is exposed to long-range attacks [10], where, for example, validators that have exited the validator set on one chain can then finalize a competing chain without ever being slashed. To prevent such attacks, honest validators never switch their greatest finalized checkpoint to a conflicting one.7 However, even with this mechanism in place, possible changes to the validator set reduce the maximum threshold of Byzantine-controlled effective-balance that the protocol can cope with, compared to the theoretical case where the validator set never changes [3]. In this work, we assume that even during periods of asynchrony, validators finalize new checkpoints with a frequency that is high enough to ensure that such threshold is never lower than \(\frac{1}{3}-d\) for some known value of \(d\) called the safety decay [12].

2.2.2 LMD-GHOST↩︎

LMD-GHOST, an acronym for Latest Message Driven Greediest Heaviest Observed Sub-Tree (\(\operatorname{\mathrm{\small LMD-GHOST}}\)), is a synchronous consensus protocol. In each slot, a proposer constructs a new block \(b\) and sends it to all other validators. The other honest validators in the committee of slot \(s\) then vote for block \(b\). Every validator \(v\) needs to decide where to append a new block (if \(v_i\) is a proposer) or which block \(v\) should vote for. To make this decision, each validator executes a fork-choice function, specifically the LMD-GHOST-HFC fork-choice function that we define below.

2.2.2.1 Fork-choice and Canonical Chain

A fork-choice function is a deterministic rule denoted as \(\setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) that accepts as input a (possibly filtered) view \(\mathcal{V}\) and a time \(t\), outputs a block \(b\) and is parametrized by a function \(\mathfrak{B}\) that given in input \(\mathcal{V}\) and \(t\) outputs the effective-balance-assignment to be used to weigh votes. We also define \(\setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t) := \setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}( \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time},t)\). We say that \(\setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t)\) is the canonical chain of validator \(v\) at time \(t\) according to the fork-choice \(\mathsf{FC}_\mathfrak{B}\).

2.2.2.2 GHOST Votes and Voting Process.

A GHOST vote \(a\) is a tuple \(\langle \mathsf{slot}(a),\mathsf{block}(a)\rangle\) where, for honest validators, \(\mathsf{slot}(a)\) corresponds to the slot during which \(a\) has been cast and \(\mathsf{block}(a)\) corresponds to the result of the fork-choice function \(\setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) used by validator \(v\),i.e., \(\mathsf{block}(a) = \setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t)\). We say that a GHOST vote is in support of a block \(b\) iff \(b \preceq \mathsf{block}(a)\). We denote the set of all GHOST votes in a view \(\mathcal{V}\) with \({\mathit{GHOSTs}}(\mathcal{V})\).

2.2.2.3 GHOST.

GHOST is a fork-choice function based on the fork-choice procedure introduced by Sompolinsky and Zohar [13], a greedy algorithm that grows a blockchain on sub-branches with the most activity. However, the GHOST fork-choice, defined in Algoritm 1, is vote-based rather than block-based, i.e., it weighs sub-trees based on votes’ weight rather than blocks. Given a view \(\mathcal{V}\) and a block \(b\), we define \(\setkeys{ghostvoters}{block=b, view=\mathcal{V}} {GS}(\ghostvoters@Block,\ghostvoters@View)\) to be the set of validators that according to view \(\mathcal{V}\) have voted in support of \(b\). The weight of a block \(b\) is then defined as the total effective balance of this set of validators according to the effective-balance-assignment\(\mathfrak{B}(\mathcal{V},t)\), i.e., \(\setkeys{weightofset}{chkp={\mathfrak{B}(\mathcal{V},t)}} \left|{ \setkeys{ghostvoters}{block=b, view=\mathcal{V}} {GS}(\ghostvoters@Block,\ghostvoters@View) }\right|^{\weightofset@Chkp}\). Starting from the \(b_{\texttt{gen}}\) block, GHOST iterates over a sequence of valid and non-future (i.e., with slot no higher than the current slot) blocks from \(\mathcal{V}\), selecting as the next block the descendant of the current block with the highest weight. This continues until it reaches a block that does not have any descendant in \(\mathcal{V}\), which is the block being output.

2.2.2.4 GHOST Equivocation.

Two GHOST votes \(a\) and \(a'\) are said to be equivocating iff they are from the same validator and same slot but target two different blocks, i.e., \(\mathit{signer}(a) = \mathit{signer}(a') \land \mathsf{slot}(a) = \mathsf{slot}(a') \land \mathsf{block}(a) \neq \mathsf{block}(a')\). Honest validators never sign equivocating GHOST votes.

2.2.2.5 LMD-GHOST.

LMD-GHOST corresponds to the application of GHOST onto a view from which, all GHOST votes that are invalid, are from current or future slots, or are sent by a validator that has equivocated at least once, are removed. LMD-GHOST defines a GHOST vote as invalid if either it is not signed by a validator in the committee in \(\mathsf{slot}(s)\) or the slot of the block that it votes for is higher than the slot of the vote itself.

Additionally, for each validator, only its vote with the highest slot is kept. Any GHOST vote \(a\) left after this last step such that \(\mathsf{block}(a) \succeq b\) is said to LMD-GHOST support \(b\). This is formalized in Algorithm 2.

2.2.2.6 LMD-GHOST-HFC

LMD-GHOST-HFC is the fork-choice rule used by Gasper which is presented in Algorithm 3. It works by applying LMD-GHOST on a filtered view where the blocks kept after the filtering correspond to those in any chain \(b'\) such that \(b'\) does not conflict with \(\setkeys{gjview}{view=\mathcal{V}, time=t} \mathsf{GJ}(\gjview@View, \gjview@Time)\) and either the voting source of \(b'\) is \(\setkeys{gjview}{view=\mathcal{V}, time=t} \mathsf{GJ}(\gjview@View, \gjview@Time)\) or the epoch of the voting source of \(b'\) is at least \(\mathsf{epoch}(t)-2\). Details for the reasons behind this type of filtering can be found in [14].

Figure 1: GHOST fork-choice
Figure 2: LMD-GHOST fork-choice
Figure 3: LMD-GHOST-HFC fork-choice

2.2.2.7 Proposer Boost.

The original version of LMD-GHOST protocol has been shown to suffer from security issues [4], [15]. The proposer boost technique [16] was later introduced as a mitigation to this issue. It requires honest voters to temporarily grant extra weight to the current proposal, if such a block is received in a timely manner. Other methodologies [17] have been put forth, although they remain subjects of ongoing investigation [18], [19]. In Gasper, the value of the proposer boost value that a validator \(v\) assigns at time \(t\) is defined as a fraction of the average weight of the committee of a slot according to \(\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\). We denote the value of such a fraction with \(p\). In general, we write \(\setkeys{boostweight}{chkp=\mathcal{B}} W_p^{\boostweight@Chkp}\) to mean the proposer boost value based off the weight total validator set according to \(\mathcal{B}\). In summary, the definitions just proved imply that \(\setkeys{boostweight}{chkp=\mathcal{B}} W_p^{\boostweight@Chkp} := \frac{p}{{E}} \setkeys{totvalsetweight}{chkp=\mathcal{B}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\) and that \(\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}\) is the proposer boost value assigned by honest validator \(v\) at time \(t\) to blocks received in a timely manner.

2.3 Confirmation Rule↩︎

In general, a Confirmation Rule is an algorithm that allows determining whether a block is confirmed, meaning that that will forever stay in the canonical chain of any honest validator under certain assumptions. For example, in the classical Bitcoin longest chain consensus protocol [1], a block \(b\) can be regarded as confirmed with high probability, if (1) in the view of an honest miner, block \(b\) has a chain of successor blocks that is sufficiently longer than all \(b\)’s siblings, (2) the majority of the network’s total computation power (hashing) is controlled by honest nodes, and (3) the network is in good condition and it will stay in that way for sufficiently long, so that the miner’s current view is representative of the protocol’s true global state, and block \(b\)’s advantage will not be disrupted by any future network partition. We also would like that, under reasonable assumptions, any block that is confirmed at time \(t\) according to the view of an honest validator \(v\) will always appear as confirmed according to the view of the same honest validator \(v\) at any time \(t\) and thereafter.

Definition 4. A Confirmation Rule for the fork-choice function \(\setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) is a tuple \((\mathsf{CONF}, \mathit{sg})\) where

  • \(\mathsf{CONF}\) is an algorithm that has access to the view of any validator \(v\), and provides a function \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) which takes in input a block and a time, and outputs a boolean value

  • \(\mathit{sg}\), called security guard, is a function that takes in input a block, a time and the value of \(\mathbb{GST}\), and outputs a boolean value ensuring the following properties hold for any block \(b\) and time \(t\) such that \(\mathit{sg}(b,t,\mathbb{GST}) = \mathrm{\small True}\)

  1. Safety: \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t)\) implies that there exists a time \(t_0\) such that for any \(v' \in \mathcal{J}\) and \(t' \geq t_0\), \(b \preceq \setkeys{fcparam}{fc=\mathsf{FC},balf=\mathfrak{B},val=v'} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t')\). Specifically, if a block \(b\) is confirmed at time \(t\), there exists a finite time \(t_0\) such that, at time \(t_0\) and thereafer, \(b\) is part of the canonical chain of any validator \(v' \in \mathcal{J}\).

  2. Monotonicity:8\(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t)\) implies that for any time \(t' \geq t\), \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathsf{CONF}.\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t')\). Specifically, once a block \(b\) is confirmed at time \(t\), it remains confirmed for all future times \(t' \ge t\).

3 A Confirmation Rule for LMD-GHOST↩︎

We begin by presenting a Confirmation Rule for the fork-choice function \(\ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) which weighs GHOST votes according to the greatest justified checkpoint in the view of a validator. In this section, we work under the following simplifying assumption, which will however be dropped for the Confirmation Rule presented in Section 5.

Assumption 1. The only change that can occur to the validator set and effective balances is due to Byzantine validators potentially getting slashed. In other words, no new validator is ever added to the validator set, no rewards are incurred, and honest validators never exit or incur penalties. This immediately implies that

  1. \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(b_{\texttt{gen}})} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=b_{\texttt{gen}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\)

  2. \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(b_{\texttt{gen}})} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=b_{\texttt{gen}}} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}\)

  3. for any valid block \(b\) and honest validator \(v\), \(\setkeys{weightofset}{chkp=b} \left|{v}\right|^{\weightofset@Chkp}= \setkeys{weightofset}{chkp=b_{\texttt{gen}}} \left|{v}\right|^{\weightofset@Chkp}\)

  4. for any valid block \(b\) and Byzantine validator \(v\), \(\setkeys{weightofset}{chkp=b} \left|{v}\right|^{\weightofset@Chkp}\leq \setkeys{weightofset}{chkp=b_{\texttt{gen}}} \left|{v}\right|^{\weightofset@Chkp}\)

As we will see in Section 5, the overall logic behind the Confirmation Rule that we present under Assumption 1 will not change. The main difference will be that some of the conditions that a block has to pass in order to be confirmed will need to be slightly stronger to accommodate for the effect of validators entering, exiting, and accruing rewards and penalties. However, the related proofs become longer and more tedious making it harder to grasp the overall intuition behind the Confirmation Rule. Hence, by initially working under Assumption 1, we can better illustrate the fundamental mechanics of the Confirmation Rule presented in this work.

We can now proceed with introducing definitions that will be used throughout this work.

Definition 5.

  1. Let \({\mathsf{ps}^{+1}}(b)\) be the next slot after the parent of \(b\), i.e., \({\mathsf{ps}^{+1}}(b) := \mathsf{slot}(\mathsf{parent}(b))+1\).

  2. Let \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\) be the union of the committees between slot \({\mathsf{ps}^{+1}}(b)\) and slot \(s'\) included according to the view of validator \(v\) at time \(t\), i.e., \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } := \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from={\mathsf{ps}^{+1}}(b), to=s',when=t,val=v} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\).

  3. Let \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\) be the subset of honest validators in \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), i.e., \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } := \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } \cap \mathcal{J}\).

  4. Let \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',val=v,when=t} {\mathcal{A}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\) be the subset of Byzantine validators in \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), i.e., \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{A}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } := \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } \cap \mathcal{A}\).

  5. Let \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\) be the set of validators in \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\) that, according to \(\setkeys{viewattime}{val=v,time=t} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\), have sent a GHOST vote that LMD-GHOST supports \(b\), i.e., \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} := \setkeys{ghostvoters}{block=b,view={\textsf{FIL}_{\mathsf{lmd}}(\textsf{FIL}_{\lnot \mathsf{valid}}(\textsf{FIL}_{\mathsf{cur}}(\textsf{FIL}_{\mathsf{eq}}(\mathcal{V}),t)))}} {GS}(\ghostvoters@Block,\ghostvoters@View) \cap \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\) where function \(GS\) is defined in Algorithm 2.

  6. Let \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\) be the subset of honest validators in \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\), i.e., \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} := \setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \cap \mathcal{J}\).

Informally, we call (\(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\)) \(\setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\) the (honest) support for \(b\).

Note that, as per Section 2.2, the definitions above implicitly define \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{ \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }}\right|^{\weightofset@Chkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{ \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }}\right|^{\weightofset@Chkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{ \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{A}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }}\right|^{\weightofset@Chkp}\), \(\setkeys{attsetweightfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B},when=t,val=v} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{ \setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{S}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}}\right|^{\weightofset@Chkp}\), \(\setkeys{attsetweightfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} := \setkeys{weightofset}{chkp=\mathcal{B}} \left|{ \setkeys{attsetfromblockunfiltered}{from=b,to=s',val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}}\right|^{\weightofset@Chkp}\).

Also, as mentioned in 2.2, for ease of notation, we drop the \(v\) and \(t\) parameters and write \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s'} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s'} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s'} {\mathcal{A}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\) to mean \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b, to=s',when=t,val=v} {\mathcal{A}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\), \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\), respectively, for any \(t \geq \mathbb{GST}\) and honest validator \(v\).

3.1 Safety↩︎

First, we develop a Confirmation Rule algorithm that ensures safety. Then, we extend it to provide monotonicity as well.

Key to the Confirmation Rule algorithm presented in this work is the concept of LMD-GHOST safety indicator introduced by the following definition.

Definition 6 (LMD-GHOST Safety Indicator). Let \(\setkeys{indicatorfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}:=\frac{ \setkeys{attsetweightfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\) be the proportional weight, according to the effective-balance-assignment\(\mathcal{B}\), of the LMD-GHOST support of \(b\) against the total weight of the committees between slot \({\mathsf{ps}^{+1}}(b)\) and slot \(s'\) as per the view of validator \(v\) at time \(t\).

Intuitively, assuming that we are after \(\mathbb{GST}\) and that there is no proposer boost (i.e., \(\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}=0\)), if, according to the view of an honest validator \(v\) at time \(t\geq\mathbb{GST}\), for any block \(b' \preceq b\), \(\setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2} + \beta\), where \(\beta = \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\) is the effective-balance-weighted ratio of Byzantine validators over the total effective balance of the committees that can support \(b'\) (i.e., \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\)), then it is quite easy to see that \(b\) is canonical in the view of any honest validator at any time during \(\mathsf{slot}(t)\). This is because honest validators only consider GHOST votes for slots strictly lower than \(\mathsf{slot}(t)\) and, worst case scenario, in the view of an honest validator, all Byzantine validators included in the set \(\setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}\) equivocate. Should this happen, the ratio of the effective balance LMD-GHOST supporting \(b'\) would still be higher than half the maximum possible effective balance supporting any sibling of \(b'\), which, as per Algorithm 2, would ensure that \(b\) is part of the canonical chain output by LMD-GHOST.

However, so far we have just looked at ensuring safety within the same slot. When considering future slots as well, it turns out to be quite convenient to reason using what we call the honest LMD-GHOST safety indicator.

Definition 7 (Honest LMD-GHOST Safety Indicator). Let \(\setkeys{indicatorfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}:=\frac{ \setkeys{attsetweightfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s',chkp=\mathcal{B},when=t,val=v} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\) be the proportional weight, according to the effective-balance-assignment\(\mathcal{B}\), of the honest LMD-GHOST support of \(b\) against the total honest weight between slot \({\mathsf{ps}^{+1}}(b)\) and slot \(s'\) as per the view of validator \(v\) at time \(t\).

The key property of this indicator is that, as long as all the honest validators keep GHOST voting in support of a block, then the honest LMD-GHOST safety indicator for such a block never decreases. Also, it turns out that if, at a time after \(\mathbb{GST}\), the honest LMD-GHOST safety indicator for a block \(b\) and all its ancestors is higher than \(\frac{1}{2(1-\beta)}\), still assuming no proposer boost, then \(b\) is canonical in the view of any honest validator. So, given the monotonicity property of the honest LMD-GHOST safety indicator, once the condition \(\setkeys{indicatorfromblock}{from=b,to=s',val=v,when=t,chkp=\mathcal{B}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2(1-\beta)}\) is satisfied, it will always be satisfied, which implies that a block will always be canonical for any honest validator.

However, there are two complications. First, the honest LMD-GHOST safety indicator cannot be measured directly as the composition of the set of honest validators is unknown. This is not a big issue as we can use the LMD-GHOST safety indicator to infer that the honest LMD-GHOST safety indicator is higher than the desired threshold. Second, when we consider the effect of proposer boost, the reasoning gets a bit more complicated as the threshold for the honest LMD-GHOST safety indicator then is not a constant anymore, but it depends on both the total effective balance that could support a block, which can change as we move from one slot to the next, and the value of the proposer boost which is itself dependant on the total effective balance of the entire validator set. We will discuss how to tackle these challenges in due course.

Before proceeding, we introduce an assumption on the effective-balance-weighted ratio of Byzantine validators that we rely on extensively in the remainder of this paper.

Assumption 2. There exists a constant \(\beta\), known to anyone using the Confirmation Rule, such that, for any honest validator \(v\), time \(t\geq \mathbb{GST}\), two slots \(s'\) and \(s\), valid block \(b\), and checkpoint \(C \in \mathsf{AU}(b)\), \(\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s,to=s',chkp=C,when=t,val=v} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \geq (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s,to=s',chkp=C,when=t,val=v} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}\).

Intuitively, this means that in the union of committees for any consecutive slots weighted according to the effective-balance-assignment associated with any justified checkpoint, the number of distinct adversarial validators is bounded by a fraction \(\beta\) of the number of total distinct validators.

For the following reasons, we believe that such an assumption is reasonable to make. First, anyone using Gasper and relying on the property that no two conflicting blocks can ever be finalized, assumes that \(\beta ' := \frac{ \setkeys{totvalsetweight}{chkp=b_{\texttt{gen}}} {\addweight{\mathcal{A}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{totvalsetweight}{chkp=b_{\texttt{gen}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} < \frac{1}{3}\). When considering a sequence of slots within the same epoch, one can apply the Chernoff-Hoeffding [20] inequality to conclude that \(\mathrm{Pr}[\beta \leq \beta' - \epsilon]\) increases exponentially in \(\epsilon \frac{M}{{E}}\) where \(M\) is the total number of validators (not weighted). Given that in Ethereum \(M\) is around one million [21] and \(E = 32\) [6], even for small values of \(\epsilon\) we get a very high probability that \(\beta \leq \beta' - \epsilon\). When considering intervals including slots from more than one epoch, then working out the exact probability formula gets much more complicated. However, given the high number of validators compared to the number of slots in an epoch, intuitively, the probability of \(\beta \leq \beta' - \epsilon\) should still be pretty high for even small values of \(\epsilon\).

We are now ready to proceed with the definition of a Confirmation Rule for LMD-GHOST. In the next Lemma, we prove that, after \(\mathbb{GST}\), as long as all honest validators GHOST vote in support of a block \(b\), the honest LMD-GHOST safety indicator for \(b\) never decreases.

Lemma 1. Given Assumption 1, for any two honest validator \(v\) and \(v'\), block \(b\), times \(t'\) and \(t\), and any two checkpoints \(C\) and \(C'\), if

  1. \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\),

  2. \(t'\geq \mathsf{st}(\mathsf{slot}(t))\) and

  3. all honest validators in the committees for slots \([\mathsf{slot}(t),\mathsf{slot}(t') -1]\) GHOST vote in support of \(b\),

then \[\forall b' \preceq b,\; \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v',when=t',chkp={C'}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \geq \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={C}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}\]

Proof. Let \(s := \mathsf{slot}(t)\), \(s' := \mathsf{slot}(t')\), and \(b'\) any block such that \(b' \preceq b\). Then we can proceed as follows. \[\begin{align} \setkeys{indicatorfromblock}{from=b',to=s'-1,val=v,when=t',chkp={C '}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &= \frac{ \setkeys{attsetweightfromblock}{from=b', to=s'-1,val=v',when=t', chkp={C '}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={C '}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- By definition.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b', to=s'-1,val=v',when=t', chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- As, per Assumption~\ref{assum:no-change-to-the-validator-set}, the effective balance of honest validators never changes.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, per Assumption~\ref{assum:no-change-to-the-validator-set}, the effective balance of honest validators never changes. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b', to=s'-1, val=v, when=t', chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} } && \ifthenelse{\equal{7cm}{}}{ \text{--- Given that \mathsf{st}(s'-1)\geq\mathsf{st}(s-1)\geq\mathbb{GST} and t' \geq \mathsf{st}(s'), any honest attestation for slots up to s'-1 received by v' at time t', it is also received by v' by the same time t'.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that \mathsf{st}(s'-1)\geq\mathsf{st}(s-1)\geq\mathbb{GST} and t' \geq \mathsf{st}(s'), any honest attestation for slots up to s'-1 received by v' at time t', it is also received by v' by the same time t'. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b', to=s-1, val=v, when=t, chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} + \setkeys{weightofset}{chkp=C} \left|{ \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s, to=s'-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \setminus \setkeys{attsetfromblockunfiltered}{from=b', to=s-1, val=v, when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} }\right|^{\weightofset@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} } && \ifthenelse{\equal{7cm}{}}{ \text{---\setkeys{attsetfromblockunfiltered}{from=b', to=s'-1, val=v, when=t'} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} corresponds to the union of the honest validators whose \textsf{GHOST} votes in support of b and for slots up to s-1 are in the view of validator v at time t with the honest validators in the committees between slot s ans slot s'-1, as we assume that any of these validators has \textsf{GHOST} voted in support of b and \mathsf{st}(\mathsf{slot}(s))\geq \mathbb{GST}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item\setkeys{attsetfromblockunfiltered}{from=b', to=s'-1, val=v, when=t'} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} corresponds to the union of the honest validators whose \textsf{GHOST} votes in support of b and for slots up to s-1 are in the view of validator v at time t with the honest validators in the committees between slot s ans slot s'-1, as we assume that any of these validators has \textsf{GHOST} voted in support of b and \mathsf{st}(\mathsf{slot}(s))\geq \mathbb{GST}. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b', to=s-1, val=v,when=t, chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} + \setkeys{weightofset}{chkp=C} \left|{ \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s, to=s'-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \setminus \setkeys{attsetfromblockunfiltered}{from=b', to=s-1, val=v, when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} }\right|^{\weightofset@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{weightofset}{chkp=C} \left|{ \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s, to=s'-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \setminus \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b', to=s-1} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } }\right|^{\weightofset@Chkp} } && \ifthenelse{\equal{7cm}{}}{ \text{--- By definition} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{attsetweightfromblock}{from=b', to=s-1, val=v, when=t, chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} } && \ifthenelse{\equal{7cm}{}}{ \text{--- From,\setkeys{attsetfromblockunfiltered}{from=b', to=s-1, val=v, when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b', to=s-1} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } and the fact that \frac{a+x}{b+y} \geq \frac{a}{b}, if a \leq b \land x \geq y. } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item From,\setkeys{attsetfromblockunfiltered}{from=b', to=s-1, val=v, when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b', to=s-1} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } and the fact that \frac{a+x}{b+y} \geq \frac{a}{b}, if a \leq b \land x \geq y. \end{itemize} \end{minipage} } \\ &= \setkeys{indicatorfromblock}{from=b',to=s-1,val=v,when=t,chkp={C}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \end{align}\] ◻

In the next two Lemmas, we show a sufficient condition on the honest LMD-GHOST safety indicator to ensure that a block is canonical in the view of an honest validator.

Lemma 2. Let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block, if

  1. \(t\geq \mathbb{GST}\),

  2. \(\mathsf{chain}(b) \subseteq \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\),

  3. \(\mathsf{slot}(b) \leq \mathsf{slot}(t)\) and

  4. \(\forall b' \preceq b,\; \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} }{2}\),

then block \(b\) is canonical in the view of validator \(v\) at time \(t\).

Proof. We want to prove that \(b \preceq \setkeys{fcparam}{fc=\textsf{LMD-GHOST},balf=\mathsf{GJ},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t)\).

Let \(b_i\) be the value of the variable \(b\) at the end of the \(i\)-th iteration of the while loop of Algorithm 1, with \(b_0\) corresponding to the value of the variable \(b\) at the beginning of the first iteration. We now prove by induction on \(i\) that either \(b_i \succeq b\) or \(b_i \preceq b\).

Base case: \(i=0\).

Trivial as the while loop in Algorithm 2 starts with variable \(b\) set to \(b_{\texttt{gen}}\preceq b\).

Inductive step.

By the inductive hypothesis, we assume that \(b_i \succeq b \lor b_i \preceq b\) and prove that \(b_{i+1} \succeq b \lor b_{i+1} \preceq b\). By line [ln:alg:GHOST:argmax] of Algorithm 1, \(b_{i+1}\) is the descendant of \(b_i\) with the heaviest total weight. Let us proceed by cases.

Case \(b_i \succeq b\).

This immediately implies that \(b_{i+1} \succeq b\).

Case \(b_i \prec b\).

Let \(b_c\) be the child of \(b_i\) in the chain of \(b\), i.e., \(b_c \preceq b \land \mathsf{parent}(b_c) = b_i\), and let \(b'\) be any child of \(b_i\). Let \(\textsf{FIL}_\textsf{LMD-GHOST}(\mathcal{V}, t) := \textsf{FIL}_{\mathsf{lmd}}(\textsf{FIL}_{\lnot \mathsf{valid}}(\textsf{FIL}_{\mathsf{cur}}(\textsf{FIL}_{\mathsf{eq}}(\mathcal{V}),t)))\) and note that, for \(\textsf{LMD-GHOST}^{\mathsf{GJ}}\), the argument of \(\mathop{\mathrm{arg\,max}}\) at line [ln:alg:GHOST:argmax] of Algorithm 1 corresponds to \(\setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{ghostvoters}{block=b',view={\textsf{FIL}_\textsf{LMD-GHOST}(\mathcal{V}), t}} {GS}(\ghostvoters@Block,\ghostvoters@View) }\right|^{\weightofset@Chkp}\). Due to \(\textsf{FIL}_{\lnot \mathsf{valid}}\) and \(\textsf{FIL}_{\mathsf{cur}}\), the maximum value that such expression can evaluate to corresponds to the weight of the the committees between slot \(\mathsf{slot}(b_i)+1\) and slot \(\mathsf{slot}(t)-1\) plus, potentially, the proposer boost weight, i.e., \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from={b},to={\mathsf{slot}(t)-1},chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}\). Given that honest validators never equivocate, we have that \[\setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{ghostvoters}{block=b_c,view={\textsf{FIL}_\textsf{LMD-GHOST}(\mathcal{V}, t)}} {GS}(\ghostvoters@Block,\ghostvoters@View) }\right|^{\weightofset@Chkp} \geq \setkeys{attsetweightfromblock}{from=b_c,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} }{2}\] Take any \(b' \neq b_c\). This means that \(b'\) and \(b_c\) conflict which implies that

\[\begin{align} \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{ghostvoters}{block=b',view={\textsf{FIL}_\textsf{LMD-GHOST}(\mathcal{V}, t)}} {GS}(\ghostvoters@Block,\ghostvoters@View) }\right|^{\weightofset@Chkp} &< \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from={b},to={\mathsf{slot}(t)-1},chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} - \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{ghostvoters}{block=b_c,view={\textsf{FIL}_\textsf{LMD-GHOST}(\mathcal{V}, t)}} {GS}(\ghostvoters@Block,\ghostvoters@View) }\right|^{\weightofset@Chkp}\\ &\leq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} }{2} \end{align}\]

This furhter implies that \(b_c = b_{i+1}\) and hence \(b_{i+1} \preceq b\).

Note that any block in \(\mathsf{chain}(b)\) has at least one child, except potentially for \(b\). Note also that the while loop continues till it finds a block that either is for a slot higher than \(\mathsf{slot}(t)\) or that has no valid children. Given that we assume \(\mathsf{slot}(b) \leq \mathsf{slot}(t)\), honest validators never GHOST vote for an invalid block and that above we have established that \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST},balf=\mathsf{GJ},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t) \succeq b \lor \setkeys{fcparam}{fc=\textsf{LMD-GHOST},balf=\mathsf{GJ},val=v} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}(t) \preceq b\), we can conclude the proof for this Lemma. ◻

Lemma 3. Given Assumption 2, for any time \(t\geq\mathbb{GST}\), honest validator \(v\), block \(b\), slot \(s\), and checkpoint \(C \in \mathsf{AU}(b)\) with \(b\) being any valid block,
if \(\forall b' \preceq b,\; \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\) then, \(\forall b' \preceq b,\; \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{2}\).

Proof. Let \(b'\) by any block such that \(b' \preceq b\). Now we can proceed as follows. \[\begin{align} \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} &= \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} && \ifthenelse{\equal{}{}}{ \text{--- By definition} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By definition \end{itemize} \end{minipage} } \\ &> \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{}{}}{ \text{--- By expanding the condition on \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By expanding the condition on \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta)}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{}{}}{ \text{--- As, due to Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta)} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta) \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{2} \end{align}\] ◻

It is now time to introduce the LMD-GHOST safety condition which will be used extensively in the remainder of this work.

Definition 8 (LMD-GHOST safety condition). The LMD-GHOST safety condition for block \(b\) according to checkpoint \(C\) and the view of validator \(v\) at time \(t\geq\mathbb{GST}\) corresponds to the following condition, formally named \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t)\). \[\setkeys{varforvalattime}{val=v}\ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t) := \forall b' \preceq b,\; \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C,when=t,val=v} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta \lor b' = b_{\texttt{gen}}\]

The following Lemma shows that the LMD-GHOST safety condition implies the condition on the honest LMD-GHOST safety indicator just presented in Lemma 3 which ensures that a block is canonical in the view of an honest validator.

Lemma 4. Given Assumption 2, for any time \(t\geq\mathbb{GST}\), honest validator \(v\), block \(b'\), slot \(s\) and checkpoint \(C \in \mathsf{AU}(b')\) with \(b'\) being any valid block,
if \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{Q}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta\), then \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\)

Proof. We proceed as follows.
\[\begin{align} \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &= \frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{9cm}{}}{ \text{--- By definition.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}- \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{9cm}{}}{ \text{--- By definition,\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}= \setkeys{valsetfromblock}{from=b',to=s,chkp=C} {\mathcal{W}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \setminus \mathcal{J}.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition,\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}= \setkeys{valsetfromblock}{from=b',to=s,chkp=C} {\mathcal{W}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \setminus \mathcal{J}. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}- \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} - \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{9cm}{}}{ \text{--- By definition,\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition,\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}- \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} - \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{9cm}{}}{ \text{--- By Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\leq \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}, and, given that\setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} \leq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}, the function g(x)=\frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}-x}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}-x} is monotone decreasing in [0, \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}] } }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item By Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\leq \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}, and, given that\setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} \leq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}, the function g(x)=\frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}-x}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}-x} is monotone decreasing in [0, \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}] \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}- \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \left( \frac{1}{1-\beta} \right) && \ifthenelse{\equal{9cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &= \left( \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} -\beta\right)\left(\frac{1}{1-\beta}\right) && \ifthenelse{\equal{9cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &> \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{9cm}{}}{ \text{--- By applying the condition on\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}.} }{ \begin{minipage}[t]{9cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying the condition on\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}. \end{itemize} \end{minipage} } \end{align}\] ◻

Before proceeding with the last Lemma of this section, which ties everything that we have discussed so far together, we need to show that, after \(\mathbb{GST}\), any block satisfying the LMD-GHOST safety condition, is necessarily in the view of any honest validator. This is a, perhaps obvious, condition that is needed in the proof of the Lemma coming immediately after.

Lemma 5. Let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block If

  1. \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\) and

  2. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},t)\),

then

  1. block \(b\) is in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter

  2. \(\mathsf{slot}(b) \leq \mathsf{slot}(t).\)

Proof. We can apply Lemmas 4 and 3, in this order, to conclude that \(\setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2}\). This implies that at least one honest validator \(v' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=n(b),to=\mathsf{slot}(t)-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) has GHOST voted in support of \(b\). This implies that block \(b\) was in the view of validator \(v'\) by the time it voted in a slot \(s \leq \mathsf{slot}(t)-1\) as by definition of LMD-GHOST, honest validators only GHOST vote for blocks that are in their view. This further implies that \(v'\) broadcast block \(b\) no later than the time \(t\) it voted in slot \(s \leq \mathsf{slot}(t)-1\) as honest validators immediately broadcast any message that they receive. Then \(b\) is in the view of any honest validator by time \(\mathsf{st}(\mathsf{slot}(t))\).

Also, given that \(v'\) GHOST votes in support of \(b\), Algorithm 1 implies that \(\mathsf{slot}(b) \leq \mathsf{slot}(t)\). ◻

We are now ready to show that the LMD-GHOST safety condition ensures the safety property required by Confirmation Rules for \(\ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\). However, as we will see during the proof, we need an additional condition, namely that the the weight of the validator set according to the greatest justified checkpoint in the view of any honest validator is no greater than the weight of the validator set according to the greatest justified checkpoint in the view of the honest validator used to evaluate the LMD-GHOST safety condition. A counter-example showing why such a condition on the greatest justified checkpoints is necessary is provided immediately after the proof. Rather than making this condition explicit, we could have just relied on an assumption stronger than Assumption 1 stating that no slashing can happen. However, by doing so, we would have unable to re-use this Lemma in the following section dealing with LMD-GHOST-HFC.

Lemma 6. Given Assumptions 1 and 2, let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, if

  1. \(\mathsf{st}(\mathsf{slot}(t)-1) \geq \mathbb{GST}\),

  2. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},t)\),

  3. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\) and

  4. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\), \(\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \leq \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. We proceed by induction on \(t'\).

Base case.

This is a strong induction quantified over \(t'\), so there is no need for a base case. Alternatively, we can take \(t' < \mathsf{st}(\mathsf{slot}(t))\) as base case for which the Lemma is vacuously true.

Inductive step: \(t' \geq \mathsf{st}(\mathsf{slot}(t))\).

Let \(s := \mathsf{slot}(t)\), \(s':= \mathsf{slot}(t')\), \(v'\) be any honest validator, \(\mathsf{GJ}:= \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\), \(\mathsf{GJ}' := \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) and \(b'\) be any block such that \(b' \preceq b\). We assume that the Lemma holds for any time \(t''\) such that \(t'' < t'\) and we prove that it holds at time \(t'\) as well.

Given that, as described in Section 2.2.2, honest validators always GHOST vote for the block returned by the fork-choice function executed at the time of voting, any honest validator in the committees between slot \(s\) and slot \(s'-1\) has GHOST voted in support of \(b\) and, consequently, in support of \(b'\).

Also, note that due condition 4 of the Lemma’s statement we can conclude that \(\setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}\).

Then, we can apply Lemma 5 to conclude that \(b\) is in the view of \(v'\) at time \(t'\) and that \(\mathsf{slot}(b)\leq \mathsf{slot}(t)\).

With all of the above in mind, we can now proceed by cases.

Case \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\).

\[\begin{align} \setkeys{indicatorfromblock}{from=b',to=s'-1,val=v',when=t,chkp={\mathsf{GJ}'}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &\geq \setkeys{indicatorfromblock}{from=b',to=s-1,val=v,when=t,chkp={\mathsf{GJ}}} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} && \ifthenelse{\equal{7cm}{}}{ \text{--- By Lemma~\ref{lem:lmd-p-monotonic}. } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By Lemma~\ref{lem:lmd-p-monotonic}. \end{itemize} \end{minipage} } \\ &> \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s-1,chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{7cm}{}}{ \text{--- By condition 2 of the Lemma's statement and Lemma~\ref{lem:lmd-cond-on-q-implies-cond-on-p}. } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By condition 2 of the Lemma's statement and Lemma~\ref{lem:lmd-cond-on-q-implies-cond-on-p}. \end{itemize} \end{minipage} } \\ &\geq \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{7cm}{}}{ \text{--- As we assume\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} and have established above that\setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp} . } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As we assume\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} and have established above that\setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp} . \end{itemize} \end{minipage} } \end{align}\]

From here, we can apply Lemmas 2 and 3 to conclude the proof for this case.

Case \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} < \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\).

\[\begin{align} \setkeys{attsetweightfromblock}{from=b', to=s'-1, val=v', when=t', chkp={\mathsf{GJ}'}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} &= \setkeys{weightofset}{chkp={\mathsf{GJ}'}} \left|{ \setkeys{attsetfromblockunfiltered}{from=b', to=s-1, val=v', when=t'} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \cup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s, to=s'-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- As, by the inductive hypothesis, all honest validators in the committees between slot s and slot s'-1 \textsf{GHOST} vote in support of b.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by the inductive hypothesis, all honest validators in the committees between slot s and slot s'-1 \textsf{GHOST} vote in support of b. \end{itemize} \end{minipage} } \\ \\ &\geq \setkeys{attsetweightfromblock}{from=b', to=s-1, val=v', when=t, chkp={\mathsf{GJ}'}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} \\ &= \setkeys{attsetweightfromblock}{from=b', to=s-1, val=v', when=t, chkp={\mathsf{GJ}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} && \ifthenelse{\equal{5cm}{}}{ \text{--- Due to Assumption~\ref{assum:no-change-to-the-validator-set}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item Due to Assumption~\ref{assum:no-change-to-the-validator-set}. \end{itemize} \end{minipage} } \\ &\geq \setkeys{attsetweightfromblock}{from=b', to=s-1, when=t, chkp={\mathsf{GJ}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} && \ifthenelse{\equal{}{}}{ \text{--- By definition.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By definition. \end{itemize} \end{minipage} } \\ &= \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=b',to=s-1,val=v,when=t,chkp={\mathsf{GJ}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} && \ifthenelse{\equal{}{}}{ \text{--- By definition of\setkeys{indicatorfromblock}{from=b',to=s-1,val=v,when=t,chkp={\mathsf{GJ}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By definition of\setkeys{indicatorfromblock}{from=b',to=s-1,val=v,when=t,chkp={\mathsf{GJ}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}. \end{itemize} \end{minipage} } \\ &> \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \left( \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s-1,chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta \right) - \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By applying condition 2 of the Lemma's statement.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying condition 2 of the Lemma's statement. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}}{2} + \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} - \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By simplifications.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By simplifications. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{5cm}{}}{ \text{--- As, due to Assumption~\ref{assum:beta}, \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}. } }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to Assumption~\ref{assum:beta}, \beta \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{A}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}. \end{itemize} \end{minipage} } \\ &> \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{5cm}{}}{ \text{--- As we assume\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} < \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} and and have established above that\setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As we assume\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s'-1, chkp={\mathsf{GJ}'}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} < \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b', to=s-1, chkp={\mathsf{GJ}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} and and have established above that\setkeys{boostweight}{chkp={\mathsf{GJ}'}} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={\mathsf{GJ}}} W_p^{\boostweight@Chkp}. \end{itemize} \end{minipage} } \\ \end{align}\] Now we can apply Lemma 2 to conclude the proof for this case.

 ◻

Now, we want to show that the condition on the greatest justified checkpoint is required. Take two honest validators \(v\) and \(v'\) and a time \(t\geq\mathbb{GST}\). Assume that \(\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} < \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\) and that the chain of \(\mathsf{block}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\) includes slashing evidence for validators \(\mathcal{X}\) not included in \(\mathsf{block}( \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\). This implies that \(\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} = \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} - \epsilon\) for some value of \(\epsilon > 0\). Assume also that none of the validators in \(\mathcal{X}\) are included in the committees \(\setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b,to=\mathsf{slot}(t)-1} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }\). This implies that \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\). Say that for some block \(b\), \(\setkeys{attsetfromblockunfiltered}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} = \setkeys{attsetfromblockunfiltered}{from=b,to=\mathsf{slot}(t)-1,val=v',when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=}\) and that \(\setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} = \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} }{2} + \frac{\epsilon}{2}\). This implies that \(\setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v',when=t,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} = \setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} = \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} }{2} + \frac{\epsilon}{2} = \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} - \epsilon }{2} + \frac{\epsilon}{2} = \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2}\). Hence, the condition \(\setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v',when=t,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}+ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v',time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2}\) is not satisfied. By following the reasoning outlined in the proof of Lemma 2, one should be able to see how this imply that block \(b\) is not necessarily canonical even if its parent is.

3.2 Monotonicity↩︎

In Lemma 6, we have proven that the LMD-GHOST safety condition guarantees the safety property of Confirmation Rules for \(\ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\). However, as we show now, it does not guarantee monotonicity. Take any block \(b\) and time \(t\geq\mathbb{GST}\) such that \(\mathsf{epoch}(b)\leq \mathsf{epoch}(\mathsf{slot}(t)-1)-2\) and assume that no slashing ever happened. This implies that \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\). Assume also that \(\setkeys{indicatorfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} = \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta + \epsilon\) with \(\frac{\beta \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t),chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}}{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \epsilon > 0\), and a time \(t'\) such that \(\mathsf{slot}(t') = \mathsf{slot}(t)+1\). Assume also that \(\beta\) of the validators in the committee of slot \(\mathsf{slot}(t)\) are Byzantine, all of these Byzantine validators in \(\mathsf{slot}(t)\) GHOST vote for a block conflicting with \(b\), all of the honest validators in the committee of slot \(\mathsf{slot}(t)\) are included in \(\setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}\) and \(\setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} = \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). This implies that at a time \(t'\), \(\setkeys{indicatorfromblock}{from=b,to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} = \frac{ \setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} = \frac{ \setkeys{attsetweightfromblock}{from=b,to=\mathsf{slot}(t)-1,val=v,when=t,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \beta \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t),chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} = \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta + \epsilon -\frac{\beta \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t),chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}}{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}\). Given that \(\frac{\beta \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t),chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}}{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \epsilon > 0\), the above implies that \(\setkeys{indicatorfromblock}{from=b,to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} < \frac{1}{2} \left( 1+ \frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=\mathsf{slot}(t)-1,chkp={ \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \beta\). Hence, \(b\) does not satisfy the LMD-GHOST safety condition at time \(t'\).

Figure 4: Confirmation Rule for LMD-GHOST

Now, how do we solve this problem? The solution that we put forth in Algorithm 4 is underpinned by the following intuition. First, observe that if a block \(b\) is canonical in the view of all honest validators for an entire epoch, then, by the end of such an epoch, all honest active validators have GHOST voted in LMD-GHOST support of \(b\). For simplicity, assume no proposer boost, then in this case the LMD-GHOST safety indicator for block \(b\) would be \(1 - \beta\), which, if \(\beta < \frac{1}{4}\), then is higher than \(\frac{1}{2}+\beta\). Also, by the safety property, after \(\mathbb{GST}\), no two conflicting blocks can ever be confirmed. Hence, we can “force” any block \(b\) that is confirmed at any point during an epoch \(e\) to be deemed confirmed until the end of epoch \(e+1\). After that, as discussed above, as long as \(\beta < \frac{1}{4}\), block \(b\) will not need to be “forced" to be confirmed any more as, at that point, it will satisfy the LMD-GHOST safety condition. However, as consequence of this, we need to require that synchrony starts no later than the beginning of the previous epoch, compared to requiring that it just starts no later than the beginning of the previous slot. In 4, this”forcing” is represented by the combination of the function \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) and [ln:alg:lmd:prec]. Function \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(e,t)\) returns the block with the highest slot that has passed the LMD-GHOST safety condition since the beginning of the second slot of epoch \(e\) until slot \(\mathsf{slot}(t)\). In 4, this is achieved by asssuming that it is possible to access the view that a validator had at the beginning of any slot since the second slot of the previous epoch. Having access to all of these views is not needed in practice. One can just keep updating, at the beginning of any slot, the confirmed block with the highest slot recorded during both the current and previous epoch.

Finally, given that we do not plan to use any of the results below in any of the next sections, to simplify the analysis, in the remainder of this section, we will work under the following assumption.

Assumption 3. No validator is ever slashed.

Also, as anticipated above, for monotoncity, we require the following stronger assumption on the value of \(\beta\).

Assumption 4. \(\beta < \frac{1}{4}\left(1 - \frac{p}{{E}}\right)\)

Note that, because \(0 \leq p< 1\), the above implies that \(\beta < \frac{1}{4}\). Assuming the values of \(p\) and \({E}\) used in the current implementation of Gasper [6], the assumption above implies \(\beta \lesssim 0.246\).

Before moving to the actual proof of monotoncity, we need to take a quick step back and prove that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) ensures safety. As we anticipated above, we need a stronger condition on \(\mathbb{GST}\), i.e., \(\mathbb{GST}\geq \mathsf{st}(\mathsf{epoch}(t)-1)\). Also, we rely on 3 to remove any condition on the weight of the validator set according to the greatest justified checkpoints.

Lemma 7. Given [assum:no-change-to-the-validator-set,assum:beta,assum:no-slashing], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, if,

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\),

  2. \(\mathrm{isLMDConfirmed}_v(b,t)\) and

  3. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. The condition \(\mathrm{isLMDConfirmed}_v(b,t)\) implies that there exists a slot \(s \in [\mathsf{first\_slot}(epoch(t)-1)+1,\mathsf{slot}(t)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=\mathsf{st}(s),val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},\mathsf{st}(s))\). Given that \(s\leq\mathsf{slot}(t)\) and \(\mathsf{st}(s-1)\geq\mathsf{st}(\mathsf{epoch}(t)-1)\geq\mathbb{GST}\), due to 3, we can apply 6 to conclude that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter. ◻

Now, we can move to formally proving monotoncity. We will start with formalizing the intuition put forth at the beginning of this section, namely, that under the assumption above, after \(\mathbb{GST}\), if a block \(b\) is canonical in the view of any honest active validator for an entire epoch, then block \(b\) will satisfy the LMD-GHOST safety condition.

Lemma 8. Given [assum:no-change-to-the-validator-set,assum:beta,assum:beta-lmd-monotonicity,assum:no-slashing], if

  1. \(b\) is canonical in the view of any honest validator at any time during epoch \(e\) and

  2. \(\mathsf{st}(\mathsf{epoch}(e)) \geq \mathbb{GST}\),

then, for any time \(t' \geq \mathsf{st}(e+1)\), \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},t')\)

Proof. Let \(t'\) be any time \(t' \geq \mathsf{st}(e+1)\). Given that, as described in Section 2.2.2, honest validators always GHOST vote for the block returned by the fork-choice function executed at the time of voting, then any honest validator in the committees of epoch \(e\) GHOST votes in support of \(b\). Note that as per 1, honest validators only GHOST vote in support of blocks that are from previous slots. Therefore, \(\mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1\). Hence, we can proceed as follows.

\[\begin{align} \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &= \frac{ \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \\ &\geq \frac{ \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, all honest validators \textsf{GHOST} vote in support of b' during epoch e.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, all honest validators \textsf{GHOST} vote in support of b' during epoch e. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, given \Cref{assum:no-change-to-the-validator-set} and that \mathsf{slot}(b)<\mathsf{epoch}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }includes all of the honest validators in any possible committee.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, given \Cref{assum:no-change-to-the-validator-set} and that \mathsf{slot}(b)<\mathsf{epoch}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }includes all of the honest validators in any possible committee. \end{itemize} \end{minipage} } \\ &\geq (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying Assumption~\ref{assum:beta}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying Assumption~\ref{assum:beta}. \end{itemize} \end{minipage} } \\ &= (1-2\beta+\beta) \\ &> \frac{1}{2} \left( 1+ \frac{p}{{E}} \right) + \beta && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying the condition \beta < \frac{1}{4}\left(1-\frac{p}{{E}}\right), from Assumption~\ref{assum:beta-lmd-monotonicity}, to 2\beta.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying the condition \beta < \frac{1}{4}\left(1-\frac{p}{{E}}\right), from Assumption~\ref{assum:beta-lmd-monotonicity}, to 2\beta. \end{itemize} \end{minipage} } \\ &= \frac{1}{2} \left(1+ \frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by definition,\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} .} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} . \end{itemize} \end{minipage} } \\ &\geq \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by \Cref{assum:no-change-to-the-validator-set,assum:no-slashing},\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} = \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}= \setkeys{weightofset}{chkp={b_{\texttt{gen}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(b_{\texttt{gen}})} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}= \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by \Cref{assum:no-change-to-the-validator-set,assum:no-slashing},\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} = \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}= \setkeys{weightofset}{chkp={b_{\texttt{gen}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(b_{\texttt{gen}})} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}= \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}. \end{itemize} \end{minipage} } \\ &= \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As \mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1 which implies that \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} contains validators in all committees of epoch e, \textit{i}.\textit{e}., \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}= \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As \mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1 which implies that \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} contains validators in all committees of epoch e, \textit{i}.\textit{e}., \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}= \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}. \end{itemize} \end{minipage} } \end{align}\] ◻

The following three lemmas conclude the formalization of the intuition about why Algorithm 4 ensures monotonicity. The first two are in support of the last one which contains the main result.

Lemma 9. Given [assum:no-change-to-the-validator-set,assum:beta,assum:beta-lmd-monotonicity,assum:no-slashing], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\),

  2. \(\mathsf{epoch}(t)-1\leq\mathsf{epoch}(b)\leq\mathsf{epoch}(t)\),

  3. \(\mathrm{isConfirmed}_v(b,t)\) and

  4. \(t' \geq t\),

then \(\mathrm{isConfirmed}_v(b,t')\).

Proof. Condition \(\mathrm{isConfirmed}_v(b,t)\) implies that there exists a slot \(s \in [\mathsf{first\_slot}(epoch(t)-1)+1,\mathsf{slot}(t)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},\mathsf{st}(s))\). Given that \(\mathsf{st}(s-1)\geq\mathsf{st}(\mathsf{epoch}(t)-1)\geq\mathbb{GST}\), 7 implies that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(s)\) and thereafter.

Now, let \(b' := \setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{epoch}(t')-1,t')\). Then, there exists a slot \(s' \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b', \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},\mathsf{st}(s'))\). Thanks to 7, this also implies that \(b'\) is canonical for any honest validator at time \(\mathsf{st}(\mathsf{slot}(t'))\).

To show \(\mathrm{isConfirmed}_v(b,t')\), by Algorithm 4, we need to prove \(b\preceq b'\). We can now proceed by cases.

Case 1: \(s \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This implies that \(\mathsf{slot}(b')\geq\mathsf{slot}(b)\). Given that \(b'\) is also canonical at time \(t'\), we can conclude that \(b\preceq b'\).

Case 2: \(s \notin [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\)

This case implies that \(\mathsf{st}(s)\leq\mathsf{st}(\mathsf{epoch}(t')-1)\). Hence, given that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(s)\) and thereafter, this further implies that \(b\) has been canonical in the view of any honest validator for the entire epoch \(\mathsf{epoch}(t')-1\). Then, 8 implies that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b', \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},\mathsf{st}(\mathsf{slot}(t')))\). Given that \(\mathsf{slot}(t') \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\), this implies that \(\mathsf{slot}(b')\geq\mathsf{slot}(b)\). Becuase \(b'\) is also canonical at time \(t'\), we can conclude that \(b\preceq b'\).

 ◻

3.3 Confirmation Rule↩︎

Now, we can formally present Algorithm 4 as a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Theorem 1. Let \(\mathit{sg}(b, t, \mathbb{GST}) = \mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1 \land \mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\). Given [assum:no-change-to-the-validator-set,assum:beta,assum:beta-lmd-monotonicity,assum:no-slashing], the tuple \((\text{Algorithm~\ref{alg:lmd}}, \mathit{sg})\) is a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

4 A Confirmation Rule for LMD-GHOST-HFC↩︎

Figure 5: Confirmation Rule for LMD-GHOST-HFC

In this section, we extend the Confirmation Rule presented in the previous section to produce a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\). Note that the only difference between LMD-GHOST and LMD-GHOST-HFC is the filtering \(\textsf{FIL}_{\mathsf{hfc}}\) applied on top of the filtering already applied in LMD-GHOST. Therefore, at a high level, to devise a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\), we just need to extend the LMD-GHOST safety condition with additional conditions that ensure that a block is never filtered out by \(\textsf{FIL}_{\mathsf{hfc}}\). Importantly, the Confirmation Rule presented in this section is designed to be implementable in practice. This poses limitation to what data in the view of an honest validator the Confirmation Rule algorithm can have access to. Specifically, we cannot access FFG votes targeting epochs older than the previous one. Because of this, as we will see, to ensure monotonicity, the resulting algorithm needs to rely on assumptions that would not be required otherwise, as we show in 7.

We can now proceed with introducing additional notations and listing fundamental properties ensured by Gasper [3] that are required by the remainder of this section.

  1. Let \(\setkeys{ffgvalsetallsentraw}{source=C_1,target=C_2,time=t} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\) be the set of all FFG votes with source \(C_1\) and target \(C_2\) sent at time \(t\).

  2. Let \(\setkeys{ffgvalsetallsentraw}{source=,target=C_2,time=t} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\) be the set of all FFG votes with any source and target \(C_2\) sent at time \(t\).

  3. Let \(\setkeys{ffgvalsettoslot}{source=C_1,target=C_2,time=t,val=v,to=s} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time}\) be the set of FFG votes with source \(C_1\) and target \(C_2\), sent by validators in the committee from slot \(\mathsf{first\_slot}(\mathsf{epoch}(C_2))\) to slot \(s\) included, and received by validator \(v\) at time \(t\), i.e., \(\setkeys{ffgvalsettoslot}{source=C_1,target=C_2,time=t,val=v,to=s} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} := \setkeys{ffgvalsetallsentraw}{source=C_1,target=C_2,time=t} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time} \cap \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{first\_slot}(\mathsf{epoch}(C_2)),to=s,when=t,val=v} \overline{\mathcal{W}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \cap \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\).

  4. Let \(\setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}} := \{b : b \in \textsf{FIL}_{\mathsf{hfc}}( \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time},t)\}\) be the set of blocks that are not filtered out by \(\textsf{FIL}_{\mathsf{hfc}}\) according to the view of validator \(v\) at time \(t\). Informally, if \(b \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), we say that \(b\) is not filtered out by validator \(v\) at time \(t\).

Property 1 (Gasper Properties). The Gasper protocol ensures the following properties.

  1. If \(\beta < \frac{1}{3}-d\), where \(d\) is the safety decay defined at the end of 2.2.2, then no two checkpoints for the same epoch can ever be justified, i.e., for any two blocks \(b_1\) and \(b_2\) and two checkpoints \(C_1 \in \mathsf{AU}(b_1)\) and \(C_2 \in \mathsf{AU}(b_2)\), \(\mathsf{epoch}(C_1) = \mathsf{epoch}(C_2) \implies C_1 = C_2\).

  2. For any honest validator \(v\), the greatest justified checkpoint is always a strict descendant of the greatest finalized checkpoint, i.e., \(\setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\succ \setkeys{finattime}{val=v,time=t} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

  3. Any honest validator sending a GHOST vote for a block \(b\) during epoch \(e\), it also sends, at the same time, an FFG vote \(\setkeys{ffgvote}{from={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, to={\mathsf{C}(b,e)}} {\ffgvote@From}\to{\ffgvote@To}\).

  4. Any honest validator sending an FFG vote \(\setkeys{ffgvote}{from=C_s,to=C_d} {\ffgvote@From}\to{\ffgvote@To}\), it also sends, at the same time, a GHOST vote for a block \(b\succeq C_d\).

  5. Provided that \(\beta < \frac{1}{3} - d\), for any honest validator \(v\), time \(t\), block \(b\) and valid checkpoint \(C\), if

    1. \(C \succeq \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) and

    2. \(\setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetallsentraw}{source=,target=C,time=t} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}}\right|^{\weightofset@Chkp}\geq\frac{2}{3} \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\),

    then no checkpoint \(C' \neq C\) such that \(\mathsf{epoch}(C')=\mathsf{epoch}(C)\) can ever be justified.

  6. Provided that \(\beta < \frac{1}{3}-d\), for any block \(b\) and epoch \(e\) such that \(\mathsf{st}(e)\geq\mathbb{GST}\), if all honest validators in the committee of epoch \(e\) (i.e., \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\)) send FFG votes targetting a checkpoint that is a descendant of \(b\) (i.e., \(\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \bigcup_{C \succeq b \land \mathsf{epoch}(C) = e}{ \setkeys{ffgvalsetallsentraw}{source=,target=C,time=\mathsf{st}(e+1)} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}}\)), then no checkpoint \(C\) conflicting with \(b\) such that \(\mathsf{epoch}(C)=e\) can ever be justified.

  7. For any block \(b\), \(\mathsf{epoch}(\mathsf{GU}(b)) \leq \mathsf{epoch}(b)\). Given [def:gjblock,def:voting-source,def:gjview], this implies that, for any honest validator \(v\), block \(b\) and time \(t\) such that \(\mathsf{epoch}(b) \leq \mathsf{epoch}(t)\), \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ))\leq \mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \leq \mathsf{epoch}(t) - 1\).

The full Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) presented in this work is defined in Algorithm 5. Compared to Algorithm 4, as anticipated above, we need extra conditions to ensure that a confirmed block is never filtered out. Also, given that, as mentioned in Section 3.1, we do not want to rely on Assumption 3 any more, these extra conditions also need to ensure that the weight of the validator set according to the greatest justified checkpoint of any honest validator is no greater than the weight of the validator set according to the checkpoint used to evaluate the LMD-GHOST safety condition. Such extra conditions are encoded in the function \(\mathrm{isConfirmedNoCaching}\) and its dependent function \(\mathrm{willChkpBeJustified}\). As part of adding these extra conditions, we have also added the state variable \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{leavesLastSlotLastEpoch}}_{\varforvalattime@Val}} {{\mathit{leavesLastSlotLastEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) to keep track of all the chains that a node has received by the beginning of the last slot of the previous epoch. As we will see, this is needed to ensure some level of synchrony on the greatest justified checkpoint between honest nodes. Another difference is represented by the fact that to confirm a block \(b\) from an epoch older than the previous epoch, we rely on the existence of a descendant of \(b\) from either the current or previous epoch that is confirmed. This is a consequence of not having the capability to access FFG votes targeting epochs older than the previous.

4.1 Safety↩︎

Like we did for LMD-GHOST, we begin our analysis by limiting our interest only to the safety property that a Confirmation Rule needs to guarantee.

Let us start by looking at how we can leverage some of the results from 3. Given that the only difference between LMD-GHOST and LMD-GHOST-HFC is the additional filtering on blocks by \(\textsf{FIL}_{\mathsf{hfc}}\), we can re-use the results of Lemma 6 by adding the requirement that a block must never be filtered out to the list of preconditions. Given that in 5 the effective-balance-assignment used in evaluating the LMD-GHOST safety condition is not necessarily extracted from the greatest justified checkpoint (see [ln:ffg:is-lmd-confimed-no-caching-prev-epoch]), we also need to generalize the checkpoint used to evaluate the LMD-GHOST safety condition to be any \(C\) such that any greatest justified checkpoint in the view of any honest validator from now on is a descendant of \(C\). All of this is formalized by the following Lemma. Note that to simplify the application of the Lemma later on, we require that the greatest justified checkpoint in the view of any honest validator is a descendant of \(C\), rather than the weaker condition (given 1) used in 6 requiring that the weight of the validator set according to the greatest justified checkpoint in the view of any honest validator is no greater than the weight of the validator set according to \(C\).

Lemma 10. Given [assum:beta,assum:no-change-to-the-validator-set], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times, \(b\) be any block and \(C\) be any checkpoint. If

  1. \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\),

  2. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t)\),

  3. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\) and

  4. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\),

    1. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C\) and

    2. \(b \in \setkeys{filtered}{time=t'',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. Because of 1, condition 4.2 implies that, for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\), \(\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \leq \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\). Then, given that the only difference between LMD-GHOST and LMD-GHOST-HFC is the application of \(\textsf{FIL}_{\mathsf{hfc}}\) and condition 4.1 of the Lemma’s statement, the proof for this Lemma is identical to the proof of Lemma 6. ◻

Then, what we need to do in order to argue safety for a confirmed block \(b\) is just showing that all of the preconditions of the Lemma above are satisfied. Overall, this will be done in an inductive manner, by showing that the preconditions are satisfied initially for block \(b\), then, by leveraging the fact that this implies that \(b\) is canonical in the view of all honest validators, show that the preconditions keep being satisfied.

Having said this, our proof strategy actually proceeds in a kind of backward way. First, we identify a set of conditions, called Safety Induction Requirements, for time \(\mathsf{st}(\mathsf{epoch}(b)+2)\) that, if met, ensure that a block is always canonical in the view of any honest validator. Then, we prove separately that for blocks in either the current or the previous epoch, Algorithm 5 ensures that the Safety Induction Requirements are met by time \(\mathsf{st}(\mathsf{epoch}(b)+2)\).

Before commencing with the formalization of the proof strategy outlined above, we define the following assumption that we will rely upon in the following Lemmas.

Assumption 5. All of the following conditions are satisfied.

  1. \(\beta < \frac{1}{3} - d\)

  2. Byzantine validators, as a whole, never get more than \(W_e\) of their effective balance slashed and anyone using the Confirmation Rule knows the value of \(W_e\). This value could be \(+ \infty\).

  3. Given a block \(b\) and epoch \(e\geq\mathsf{epoch}(b)\) such that \(\mathsf{st}(e+1)\geq\mathbb{GST}\), if for any time \(t\) with \(\mathsf{epoch}(t) = e+1\) and honest validator \(v\),

    • \(b\) is canonical in the view of \(v\) at time \(t\),

    • for any block \(b' \succeq \mathsf{C}(b,e)\) in the view of \(v\) we have that \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time} \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\)

    then, by time \(\mathsf{st}(e+2)\), the view of validator \(v\) includes a block \(b'\) such that \(\mathsf{epoch}(b') < e+2 \land \mathsf{C}(b,e) \in \mathsf{AU}(b')\).

Assumption [assum:ffg-assumptions:beta] is a basic assumption that the Gasper protocol relies upon anyway for ensuring that no two conflicting checkpoints can ever be finalized. In our case, it is required in order to be able to use Property [prop:gasper-basic:only-one-justified-per-epoch]. [assum:ffg-assumptions:max-slashing] just states that the user of the Confirmation Rule makes an assumption on the maximum amount of effective balance (possibly \(+ \infty\)) that the Byzantine validators are willing to get slashed (lose) in order to compromise any of the properties of the Confirmation Rule. Assumption [assum:ffg-assumptions:justified-checkpoint-next-epoch] essentially says that Byzantine validators cannot prevent an FFG vote sent by a validator that is not caught committing a slashable offence from being included in a canonical block for an entire epoch. This assumption could be violated in practice due to limited amount of FFG votes that can be included in a given block. If this limitation in the Gasper protocol was lifted in the case that the FFG votes included in a block justify the checkpoint from the previous epoch, then Assumption [assum:ffg-assumptions:justified-checkpoint-next-epoch] would just amount to assuming that there is at least one honest proposer in any epoch, which due to Assumption [assum:ffg-assumptions:beta], would be true with overwhelmingly high probability.

We are now ready to proceed by following the proof strategy discussed at the beginning of this section. First, in Definition 9, we formalize the list of Safety Induction Requirements. Then, 11 shows that the Safety Induction Requirements and the absence of any justified checkpoint for epochs \([\mathsf{epoch}(b),\mathsf{epoch}(t)-1]\) imply that block \(b\) is never filtered out during epoch \(\mathsf{epoch}(t)\). Finally, 12 ties the previous two Lemmas together proving that the Safety Induction Requirements conditions are sufficient to ensure that a block is canonical in the view of any honest validator.

Definition 9 (Safety Induction Requirements (SIR) for block \(b\), time \(t\) and checkpoint \(C\)).

  1. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t) \land C \preceq b \land \mathsf{st}(\mathsf{slot}(t)-1)\geq \mathbb{GST}\)

  2. for any honest validator \(v'\) and time \(t'\) such that \(t \leq t' \leq \mathsf{st}(\mathsf{epoch}(b)+2)\),

    1. \(b\) is not filtered out by validator \(v'\) at time \(t'\), i.e., \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\)

    2. \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\succeq C\)

  3. by time \(\mathsf{st}(\mathsf{first\_slot}(\mathsf{epoch}(b)+2))\), in the view of any honest node there exists a block \(b' \succeq b\) such that \(\mathsf{C}(b) \in \mathsf{AU}(b') \land \mathsf{epoch}(b') < \mathsf{epoch}(b)+2\).

  4. no checkpoint \(C\) with \(\mathsf{epoch}(C) \in [\mathsf{epoch}(b), \mathsf{epoch}(b) + 1]\) which conflicts with \(b\) can ever be justified.

Lemma 11. Given Assumption [assum:ffg-assumptions:beta], let \(t\) be any time. If

  1. in the view of any honest validator, by time \(t\), there exists a block \(b' \succeq b\) such that \(\mathsf{C}(b) \in \mathsf{AU}(b') \land \mathsf{epoch}(b') < \mathsf{epoch}(t)\) and

  2. there exists no checkpoint for an epoch in \([\mathsf{epoch}(b), \mathsf{epoch}(t)-1]\) conflicting with \(b\),

then, for any honest validator \(v'\) and time \(t'\geq t\) with \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\), \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) is not going to be filtered at any time \(t'\) within epoch \(\mathsf{epoch}(t)\).

Proof. Let \(v'\) be any validator and \(t'\) be any time such that \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\). Let us now proceed by cases.

Case 1: \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) = \mathsf{epoch}(\mathsf{C}(b))\).

By the Lemma’s assumptions, we know that there exists a block \(b' \succeq b\) such that \(\mathsf{C}(b) \in \mathsf{AU}(b')\). Let \(b''\) be any block \(b'' \succeq b'\). Given that \(\mathsf{epoch}(b') < \mathsf{epoch}(t)\), \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ))\geq\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{C}(b)\). By Property [prop:gasper-basic:only-one-justified-per-epoch] and the definition of \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (3), we have that \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ) = \mathsf{C}(b) = \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). By [prop:gasper-basic:just-succ-finalization], this also implies that \(b'' \succeq \setkeys{finattime}{time=t',val=v'} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Given that clearly \(b' \succeq \mathsf{block}(\mathsf{C}(b))\) we have that \(b' \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), from which it follows that \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Case 2: \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) > \mathsf{epoch}(\mathsf{C}(b))\).

By Property [prop:gasper-basic:highest-justified-not-from-current-epoch], we know that \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) \in [\mathsf{epoch}(b)+1,\mathsf{epoch}(t) -1]\). Hence, by the Lemma’s assumptions, \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) does not conflict with \(b\) which, given that in this case we assume \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) > \mathsf{epoch}(\mathsf{C}(b)) = \mathsf{epoch}(b)\), implies that \(b \prec \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\), from which we can conclude that \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Case 3: \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) < \mathsf{C}(b)\).

Given that there exists a block \(b' \succeq b\) such that \(\mathsf{C}(b) \in \mathsf{AU}(b')\), we have that \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(\mathsf{C}(b))\). Hence, the definition of \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (Definition 3) implies that \(epoch\left( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\right) \geq \mathsf{epoch}(\mathsf{C}(b))\) meaning that this case is not possible.

 ◻

Lemma 12. If all of the Safety Induction Requirements for block \(b\), time \(t\) and checkpoint \(C\) (Definition 9) are satisfied, then \(b\) is canonical in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. First, we proceed by induction on \(t' \geq \mathsf{st}(\mathsf{slot}(t))\) to show that all of the following inductive conditions hold

  1. there exists no checkpoint \(C'\) with \(\mathsf{epoch}(C') \in [\mathsf{epoch}(b), \mathsf{epoch}(t')]\) which conflicts with \(b\).

  2. for any honest validator \(v''\) and time \(t''\) such that \(\mathsf{st}(\mathsf{slot}(t)) \leq t'' < \mathsf{st}(\mathsf{epoch}(t')+1)\)

    1. \(b \in \setkeys{filtered}{val=v'',time=t''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\)

    2. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C\)

Base Case: \(\mathsf{epoch}(t') < \mathsf{epoch}(b)+2\).

All inductive hypothesis are trivially implied by [def:induction-conditions:all-validators] and [def:induction-conditions:no-conflicting].

Inductive Step: \(\mathsf{epoch}(t') \geq \mathsf{epoch}(b)+2\).

Assume that all the inductive hypotheses hold at any time \(t_i\) up to \(\mathsf{epoch}(t_i) \leq \mathsf{epoch}(t')-1\) and prove that they hold at time \(t'\) as well. Let \(v'\) be any honest validator.

Induction hypothesis [lem:ffg-safety-from-sir:safety-cond-1] and [def:induction-conditions:ub] allow us to apply Lemma 11 to conclude that \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) does not get filtered out by any honest validator in epoch \(\mathsf{epoch}(t')\). This proves induction hypothesis [lem:ffg-safety-from-sir:safety-cond-2461] holds at time \(t'\) as well.

Also, induction hypothesis [lem:ffg-safety-from-sir:safety-cond-1], [def:induction-conditions:is-lmd-confirmed], [def:induction-conditions:ub], Property [prop:gasper-basic:highest-justified-not-from-current-epoch] and the definition of \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (Definition 3) imply that \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq \mathsf{C}(b) \succeq C\) which proves inductive condition [lem:ffg-safety-from-sir:safety-cond-2462] for \(t'\).

Given that \(t'\geq\mathsf{st}(\mathsf{slot}(t))\) and that above we have proved that inductive condition [lem:ffg-safety-from-sir:safety-cond-2] is satisfied for time \(t'\), thanks to [def:induction-conditions:is-lmd-confirmed], we can apply Lemma 10 to conclude that \(b\) is always canonical in the view of all honest validators at any time during epoch \(\mathsf{epoch}(t')\).

By Properties [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] and [prop:gasper-basic:no-conflicting-if-all-honest-votes-in-support-of-b], this immediately implies that no checkpoint conflicting with \(b\) can be justified in epoch \(\mathsf{epoch}(t')\), which concludes the proof for the inductive hypothesis [lem:ffg-safety-from-sir:safety-cond-1].

Given that we have just established that the inductive condition [lem:ffg-safety-from-sir:safety-cond-2] hold for any time \(t' \geq \mathsf{st}(\mathsf{slot}(t))\), thanks to [def:induction-conditions:is-lmd-confirmed], we can apply Lemma 10 to complete the proof. ◻

Now, we are left with proving that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathit{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t)\) ensures that the Safety Induction Requirements for block \(b\), time \(t\) and a checkpoint \(C\) are satisfied.

The first Lemma that we present in the following proves that \(\mathit{willChkpBeJustified}(b,t)\) ensures that, by time \(\mathsf{st}(\mathsf{epoch}(b)+1)\), the weight of the FFG votes with target \(\mathsf{C}(b)\) is at least \(\frac{2}{3} \setkeys{totvalsetweight}{chkp=C(b)} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\) which, combined with [assum:ffg-assumptions:justified-checkpoint-next-epoch], allows inferring that checkpoint \(\mathsf{C}(b)\) will be justified in the view of any honest validator by the start of epoch \(\mathsf{epoch}(b)+2\). Then, the following three Lemmas establish a list of sufficient conditions to ensure that a block in either epoch \(\mathsf{epoch}(t)\) or epoch \(\mathsf{epoch}(t)-1\) is not filtered out during epoch \(\mathsf{epoch}(t)\). Thereafter, we leverage these Lemmas to prove, first for blocks from the current epoch and then for blocks from the previous epoch, that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathit{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t)\) ensures that the Safety Induction Requirements for block \(b\), time \(t\) and a checkpoint \(C\) are satisfied. Then, by applying 12, we can conclude the proof of safety for the Confirmation Rule of 5.

Lemma 13. Given Assumptions  2 and 5, let \(t\geq\mathbb{GST}\) be any time, \(b\) be any block, \(e\) be any epoch, \(s\) be any slot such that \(\mathsf{epoch}(s) \geq \mathsf{epoch}(b)\), \(v\) be any honest validator. If \[\setkeys{ffgvalsettoslotweight}{to=s-1,source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=\mathsf{epoch}(b)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t,val=v,weight chkp={\mathsf{C}(b,e)}} F_{\ffgvalsettoslotweight@Source \to \ffgvalsettoslotweight@Target}^{\ffgvalsettoslotweight@To, \ffgvalsettoslotweight@Val,\ffgvalsettoslotweight@Time,\ffgvalsettoslotweight@WeightChkp} + (1-\beta) \setkeys{valsetweightfromslot}{from=s,to=\mathsf{last\_slot}(e),chkp={\mathsf{C}(b,e)}} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\] and all honest validators in slots \([s,\mathsf{last\_slot}(e)]\) GHOST vote for a block \(b'' \succeq b\) such that \(\mathsf{epoch}(b'') = \mathsf{epoch}(b)\), then, for any block \(b' \succeq \mathsf{C}(b,e)\) and time \(t' \geq \mathsf{st}(e+1)\), \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source=,target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time} \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\).

Proof. Let \(C_b := \mathsf{C}(b,e)\) and \(\mathit{VS}_b := \setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\), \(t'\) be any time such that \(t' \geq \mathsf{st}(\mathsf{epoch}(b)+1)\), and \(b'\) be any block such that \(b' \succeq \mathsf{C}(b,e)\).

We can now proceed as follows to prove the Lemma. \[\begin{align} \setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source=,target=C_b,time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} &\geq \setkeys{weightofset}{chkp=b'} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\right) \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- Given that t' \geq \mathsf{st}(e+1), by time t' every honest validator in slots [s,\mathsf{last\_slot}(e)] has \textsf{GHOST} voted for a block b'' \succeq b, which, by Property~\ref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} equates to an FFG vote for\setkeys{ffgvote}{from=\mathit{VS}_b, to=C_b} {\ffgvote@From}\to{\ffgvote@To} . To this, we add the validators whose \textsf{GHOST} votes have already been received at time t. } }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that t' \geq \mathsf{st}(e+1), by time t' every honest validator in slots [s,\mathsf{last\_slot}(e)] has \textsf{GHOST} voted for a block b'' \succeq b, which, by Property~\ref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} equates to an FFG vote for\setkeys{ffgvote}{from=\mathit{VS}_b, to=C_b} {\ffgvote@From}\to{\ffgvote@To} . To this, we add the validators whose \textsf{GHOST} votes have already been received at time t. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp=C_b} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \right) \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- The only difference in effective balances between b' and C_b is represented by those validators\setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} \setminus \setkeys{slashedset}{chkp=C_b} \mathcal{D}^{\slashedset@Chkp} that are slashed between C_b and b'.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item The only difference in effective balances between b' and C_b is represented by those validators\setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} \setminus \setkeys{slashedset}{chkp=C_b} \mathcal{D}^{\slashedset@Chkp} that are slashed between C_b and b'. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp=C_b} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} \right) \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- As honest validators never get slashed.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As honest validators never get slashed. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp=C_b} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \setminus \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} \right)\right) \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s,to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp} \\ &= \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} + \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s,to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \\ &\geq \begin{aligned}[t] & \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp}\\ &+ (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s,to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \end{aligned}\\ &\geq \begin{align}[t] &\frac{2}{3} \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) - (1-\beta) \setkeys{valsetweightfromslot}{from=s,to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}}\\ &- \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s,to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying the condition on \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} }\right|^{\weightofset@Chkp} as per the Lemma's statement.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying the condition on \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} }\right|^{\weightofset@Chkp} as per the Lemma's statement. \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, due to Assumption~\ref{assum:beta} and~\ref{assum:ffg-assumptions:max-slashing}, and the fact that honest validators never commit slashing offences,\min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) \geq \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} } }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to Assumption~\ref{assum:beta} and~\ref{assum:ffg-assumptions:max-slashing}, and the fact that honest validators never commit slashing offences,\min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) \geq \setkeys{weightofset}{chkp=C_b} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \cap \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- By \Cref{assum:no-change-to-the-validator-set}, given that b'\succeq C_b,\setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp},} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{assum:no-change-to-the-validator-set}, given that b'\succeq C_b,\setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}, \end{itemize} \end{minipage} } \end{align}\] Note that if \(e<\mathsf{epoch}(s)\), then, some of the conditions above are vacuously true (e.g., all honest validators in slots \([s,\mathsf{last\_slot}(e)] =\emptyset\) GHOST vote in support of \(b\)), but the reasoning above still works. This concludes the proof. ◻

Lemma 14. Given Assumption [assum:ffg-assumptions:beta], for any honest validator \(v\), time \(t\) and block \(b\), if

  1. \(b \in \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\),

  2. \(\mathsf{slot}(b) \leq \mathsf{slot}(t)\) and

  3. \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t) - 1\),

then \(b \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Proof. Let be any block \(b'\) such that \(b'\succeq b \land \mathsf{epoch}(b)\leq\mathsf{epoch}(t)\). First, property [prop:gasper-basic:highest-justified-not-from-current-epoch] implies that \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) = \mathsf{epoch}(t)-1 = \mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\), then Property [prop:gasper-basic:only-one-justified-per-epoch] implies that the highest justified checkpoint in the view of \(v\) at time \(t\) is \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\), i.e., \(\setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}=\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\). [prop:gasper-basic:just-succ-finalization] also implies that \(b' \succeq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Given that clarly, \(b' \succeq \mathsf{block}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\), it follows that \(b \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\). ◻

Lemma 15. Given Assumption [assum:ffg-assumptions:beta], if

  1. \(b \in \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\),

  2. \(\exists b' \in \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time},\: b \preceq b' \land \mathsf{epoch}(b')\leq\mathsf{epoch}(t)\land \mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t) - 2\) and

  3. \(\mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) = \mathsf{epoch}(t)-1 \implies \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} = \mathsf{C}(b)\),

then \(b \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Proof. Let \(b'\) be any block such that \(b' \in \setkeys{viewattime}{time=t,val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time},\: b \preceq b' \land \mathsf{epoch}(b')\leq\mathsf{epoch}(t)\land\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t) - 2\) and let \(b''\) be any block such that \(b'' \succeq b' \land \mathsf{epoch}(b'')\leq\mathsf{epoch}(t)\). Property [prop:gasper-basic:highest-justified-not-from-current-epoch] implies that \(\mathsf{epoch}(t) - 2 \leq \mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \leq \mathsf{epoch}(t) -1\). We now proceed by cases to show that \(b'' \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\) which implies \(b \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Case 1: \(\mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) = \mathsf{epoch}(t) -2\).

Property [prop:gasper-basic:highest-justified-not-from-current-epoch] implies that \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) = \mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\). Then, due to Property [prop:gasper-basic:only-one-justified-per-epoch], \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ) = \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). [prop:gasper-basic:just-succ-finalization] also implies that \(b'' \succeq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Given that clarly, \(b'' \succeq \mathsf{block}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\), it follows that \(b'' \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Case 2: \(\mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) = \mathsf{epoch}(t) -1\).

Due to condition 3, \(\setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} = \mathsf{C}(b)\). Hence, due to [prop:gasper-basic:just-succ-finalization], \(b''\succeq \mathsf{C}(b)= \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\succeq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Also, \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t) -2\). Given that clearly \(b'' \succeq \mathsf{block}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\), we have that \(b'' \in \setkeys{filtered}{time=t,val=v} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

 ◻

Lemma 16. Given Assumptions 2 and 5, for any honest validator \(v\), time \(t\) and block \(b\), if

  1. \(\mathsf{st}(\mathsf{slot}(t-1)) \geq \mathbb{GST}\),

  2. \(\mathsf{epoch}(b) = \mathsf{epoch}(t)\) and

  3. \(\mathrm{isConfirmedNoCaching}_v(b,t)\),

then all of the Safety Induction Requirementf or block \(b\), time \(t\) and checkpoint \(\mathsf{GJ}(b)\) (Definition 9) are satisfied.

Proof. Condition [def:induction-conditions:is-lmd-confirmed] is trivially satisfied given the Lemma’s assumption.

We now proceed to prove the remaining conditions by bounded induction on \(\mathsf{epoch}(t')\). Let \(v'\) be any honest validator. Lemma 5 implies that at time \(t'\), block \(b\) is in the view of \(v'\).

Base Case: \(\mathsf{epoch}(t') = \mathsf{epoch}(t) \land t' \geq \mathsf{st}(\mathsf{slot}(t))\).

We can apply Lemma 14 to conclude condition [def:induction-conditions:all-validators:not-filtered-out] for this case, i.e., that \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Then, from line [ln:ffg:gjblock-from-previous-epoch], Properties [prop:gasper-basic:only-one-justified-per-epoch] and [prop:gasper-basic:highest-justified-not-from-current-epoch], we have that \(\setkeys{chkpattime}{val=v',time=t'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} = \mathsf{GJ}(b) = \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) which proves [def:induction-conditions:all-validators:gj-succ] for this case.

Hence, we can apply Lemma 10 to conclude that \(b\) is canonical for any validator at any time \(t''\) such that \(\mathsf{epoch}(t'') = \mathsf{epoch}(t') \land t'' \geq \mathsf{st}(\mathsf{slot}(t))\).

Then, thanks to [ln:ffg:call-will-chkp-be-justified-current-epoch], we can apply Lemma 13 and Property [prop:gasper-basic:sufficient-condition-for-no-conflicting-chkps] to conclude no conflicting checkpoint for epoch \(\mathsf{epoch}(b)\) can ever be justified which corresponds to proving condition [def:induction-conditions:no-conflicting] for this case.

[def:induction-conditions:ub] is vacuously satisfied in this case.

Inductive Case: \(\mathsf{epoch}(t') = \mathsf{epoch}(t) + 1\).

Given that no checkpoint for epoch \(\mathsf{epoch}(t')-1\) conflicting with \(b\) can ever be justified, line [ln:ffg:gjblock-from-previous-epoch], Properties [prop:gasper-basic:only-one-justified-per-epoch] and [prop:gasper-basic:highest-justified-not-from-current-epoch] imply that \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \in \{\mathsf{GJ}(b), C(b)\}\). This implies that \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq \mathsf{GJ}(b)\) as, by definition, \(\mathsf{C}(b) \succeq \mathsf{GJ}(b)\). This proves [def:induction-conditions:all-validators:gj-succ]. From the above, we can also conclude that \(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) = \mathsf{epoch}(t) \implies \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} = C(b)\). Then, we can apply Lemma 15 to conclude that \(b\) does not get filtered out at any point in epoch \(\mathsf{epoch}(t)\) which concludes the proof for [def:induction-conditions:all-validators:not-filtered-out].

We now have all of the conditions required to apply Lemma 10 to conclude that \(b\) is canonical for any validator at any time during \(\mathsf{epoch}(t')\).

By Properties [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] and [prop:gasper-basic:no-conflicting-if-all-honest-votes-in-support-of-b], this immediately implies that no checkpoint for epoch \(\mathsf{epoch}(t)+1\) conflicting with \(b\) can be ever be justified, which concludes the proof for condition [def:induction-conditions:no-conflicting] as well.

Then, given that \(\mathsf{st}(\mathsf{epoch}(\mathsf{C}(b))+1)=\mathsf{st}(\mathsf{epoch}(b)+1)=\mathsf{st}(\mathsf{epoch}(t)+1)\geq\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\), due to [ln:ffg:call-will-chkp-be-justified-current-epoch], we can apply Lemma 13 and [assum:ffg-assumptions:justified-checkpoint-next-epoch] to conclude condition [def:induction-conditions:ub] as well.

 ◻

Lemma 17. Given Assumptions 1, 2 and 5. Let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{slot}(t)-1) \geq \mathbb{GST}\),

  2. \(\mathsf{epoch}(b) < \mathsf{epoch}(t)\) and

  3. \(\mathrm{isConfirmedNoCaching}_v(b,t)\),

then there exists a block \(b' \succeq b\) such that all of the Safety Induction Requirements for block \(b\), time \(t\) and checkpoint \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\) are satisfied.

Proof. Let \(v'\) be any honest validator and \(t'\) be any time such that \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\). Lemma 5 implies that \(b\) is in the view of validator \(v'\) at time \(t'\). Due to line [ln:ffg:call-will-chkp-be-justified-prev-epoch], we can apply 13 and [prop:gasper-basic:sufficient-condition-for-no-conflicting-chkps] to conclude that no checkpoint for epoch \(\mathsf{epoch}(t)-1\) conflicting with \(\mathsf{C}(b)\) could ever be justified.

From , we know that there exists a block \(b' \in \setkeys{viewattime}{time=\mathsf{st}(\mathsf{slot}(t)-1),val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\) such that \(b\preceq b' \land \mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t)-2\). Hence, we can apply Lemma 15 to conclude condition [def:induction-conditions:all-validators:not-filtered-out], i.e., \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\). [ln:ffg:check-first-slot] imply that \(t'\geq\mathsf{st}(\mathsf{epoch}(t))\geq\mathsf{st}(\mathsf{first\_slot}(\mathsf{epoch}(t)))\geq\mathsf{st}(\mathsf{slot}(t))\). Then, given that \(b' \in \setkeys{viewattime}{time=\mathsf{st}(\mathsf{slot}(t)-1),val=v} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\) and \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\), we can conclude that \(b\) is in the view of validator \(v'\) at time \(t'\).

Then, because no checkpoint for epoch \(\mathsf{epoch}(t)-1\) conflicting with \(\mathsf{C}(b)\) could ever be justified, Property [prop:gasper-basic:highest-justified-not-from-current-epoch] and the definition of \(\setkeys{chkpattime}{time=t',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (Definition 3) imply that \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq \setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\) proving [def:induction-conditions:all-validators:gj-succ].

Hence, we can now apply Lemma 10 to conclude that \(b\) is canonical in the view of any honest validator at any time during epoch \(\mathsf{epoch}(t)\).

By Properties [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] and [prop:gasper-basic:no-conflicting-if-all-honest-votes-in-support-of-b], the above immediately implies that no checkpoint for epoch \(\mathsf{epoch}(t)\) conflicting with \(b\) can be ever be justified, which concludes the proof for condition [def:induction-conditions:no-conflicting] as well. Finally, given that \(b\) is canonical in the view of any honest validator during the entire epoch \(\mathsf{epoch}(t)\) and that \(\mathsf{st}(\mathsf{epoch}(\mathsf{C}(b))+1)=\mathsf{st}(\mathsf{epoch}(b)+1)=\mathsf{st}(\mathsf{epoch}(t))\geq\mathbb{GST}\), [ln:ffg:call-will-chkp-be-justified-prev-epoch], 13 and [assum:ffg-assumptions:justified-checkpoint-next-epoch] prove condition [def:induction-conditions:ub]. Given that [def:induction-conditions:is-lmd-confirmed] is directly implied by the Lemma’s statement, the proof is concluded. ◻

Lemma 18. Given Assumptions 1, 2 and 5, let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\) and

  2. \(\mathit{isConfirmedNoCaching}_v(b,t)\),

then \(b\) is always canonical in the view of all honest validators at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. We can apply either Lemma 16 or Lemma 17 to conclude that there exists a checkpoint \(C\) such that the Safety Induction Requirements (Definition 9) are satisfied for block \(b\), time \(t\) and a checkpoint \(C\). Then, from this, we apply Lemma 12 to conclude the proof. ◻

We conclude this section by leveraging the above lemma to show that \(\mathit{isConfirmed}_v(b,t)\) guarantees the Safety property of the Confirmation Rule.

Lemma 19. Given Assumptions 1, 2 and 5, let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\) and

  2. \(\mathit{isConfirmed}_v(b,t)\),

then \(b\) is always canonical in the view of all honest validators at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. From \(\mathrm{isConfirmed}_v(b,t)\), we know that there exists a block \(b' \succeq b\) and a slot \(s' \in [\mathsf{first\_slot}(\mathsf{epoch}(t)-1)+1,\mathsf{slot}(t)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b',\mathsf{st}(s'))\).

Given that \(\mathsf{st}(s'-1)\geq\mathsf{st}(\mathsf{epoch}(t)-1)\geq\mathbb{GST}\), we can apply 18 to conclude that \(b'\) is canonical in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\geq\mathsf{st}(s)\) and thereafter, which, given that \(b \preceq b'\), implies that \(b\) is also canonical in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter. ◻

4.2 Monotonicity↩︎

To ensure monotonicity with the algorithm proposed, we have to strengthen our assumptions. As anticipated at the beginning of this section, this comes as a consequence of the fact that we cannot we cannot access FFG votes targeting epochs older than the previous one. Specifically, we need an assumption stating that, after \(\mathbb{GST}\), if a block \(b\) is canonical for the entire epoch \(\mathsf{epoch}(b)+1\), then one of the checkpoints \(C\), descendant of \(b\) and for epoch \(\mathsf{epoch}(b)+1\), will receive enough honest FFG votes (expressed as ratio over the effective-balance of all active honest validators) so that both \(\mathsf{block}(C)\) meets that LMD-GHOST safety condition and \(\mathit{willChkpBeJustified}\) is satisfied. Additionally, we need a strengthening of Assumption [assum:ffg-assumptions:justified-checkpoint-next-epoch] requiring that the block \(b'\) whose chain includes enough FFG votes to justify \(\mathsf{C}(b)\) is a descendant of \(C\) and that such a block is received by the beginning of the last slot of epoch \(\mathsf{epoch}(b)+1\), rather than by the beginning of epoch \(\mathsf{epoch}(b)+2\), i.e., one slot earlier. This is required to satisfy [ln:ffg:exists]. As we will see, these assumptions are required to ensure that by the beginning of epoch \(\mathsf{epoch}(b)+2\) there exists a block descendant of \(b\) that is confirmed. This set of assumptions is formalized below.

Assumption 6.

  1. Given a block \(b\) and epoch \(e\geq\mathsf{epoch}(b)\) such that \(\mathsf{st}(e+1)\geq\mathbb{GST}\), if for any time \(t\) with \(\mathsf{epoch}(t) = e+1\) and honest validator \(v\),

    • \(b\) is canonical in the view of \(v\) at time \(t\) and

    • for any block \(b' \succeq \mathsf{C}(b,e)\) in the view of \(v\) we have that \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\),

    then, for any honest validator \(v\), there exists a checkpoint \(C\) such that

    1. \(\mathsf{epoch}(C) = e+1\),

    2. \(C \succeq b\),

    3. by time \(\mathsf{st}(\mathsf{last\_slot}(e+1))\), the view of validator \(v\) includes a block \(b'\) such that \(b'\succeq C \land \mathsf{epoch}(b') < e+2 \land C(b,e) \in \mathsf{AU}(b')\) and

    4. by time \(t' \geq \mathsf{st}(e+2)\), the view of validator \(v\) includes a set of FFG votes \(\setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=t',val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\) for checkpoint \(C\) such that \[\frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=t',val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \mathsf{honFFGratio}(\beta)\] where \[\mathsf{honFFGratio}(\beta) =\frac{1}{1-\beta}\left(\frac{2}{3}+\beta\right)\]

  2. \(\beta < \min\left(\frac{1}{6},\frac{1}{3}-d\right)\)

[assum:ffg-stronger-justification:beta] is implied by the constraint that \(\mathsf{honFFGratio}(\beta) \leq 1\), but, given its significance, we make it explicit above.

In 6 we plot the value of \(\mathsf{honFFGratio}(\beta)\) to give a better sense of the effective-balance-weighted ratio of honest validators that are expected to FFG vote for \(C\) according to [assum:ffg-stronger-justification:next-chkp-justified]. Note that a ratio of \(x\) means that \(x\) of the honest validators, weighted according to their effective balance, send an FFG vote for \(C\), not \(x\) of the entire validator set.

Figure 6: Effective-balance-weighted ratio of honest validators that need to FFG vote for a checkpoint C, as function of \beta, to satisfy Assumption [assum:ffg-stronger-justification:next-chkp-justified].

The proof of Monotonicity is given in [lem:ffg-hon-ffg-ratio-implies-q,lem:ffg-motonocity]. The core of the proof of is presented in 21, with 20 being a supporting Lemma showing, essentially, that [assum:ffg-stronger-justification:next-chkp-justified] implies that that \(\mathsf{block}(C)\) satisfies the LMD-GHOST safety condition. To do so, however, 20 relies on the following additional property of the current implementation of the Gasper protocol [6].

Property 2. \(\frac{p}{{E}}<\frac{5}{18}\)9

Lemma 20. Given 6, \[\mathsf{honFFGratio}(\beta) \geq \frac{1}{1-\beta}\left(\frac{1}{2}\left(1 + \frac{p}{{E}(1-\beta)}\right) + \beta\right)\]

Proof. \[\begin{align} \frac{2}{3}+\beta\; &= \frac{1}{2}\left(1 + \frac{1}{3}\right) + \beta \\ &= \frac{1}{2}\left(1 + \frac{5}{18\frac{5}{6}}\right) + \beta \\ &> \frac{1}{2}\left(1 + \frac{p}{{E}(1-\beta)}\right) + \beta && \ifthenelse{\equal{5cm}{}}{ \text{--- By applying \Cref{prop:ffg-stronger-justification:p-e} and \Cref{assum:ffg-stronger-justification:beta}, we get \frac{5}{6}<(1-\beta).} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying \Cref{prop:ffg-stronger-justification:p-e} and \Cref{assum:ffg-stronger-justification:beta}, we get \frac{5}{6}<(1-\beta). \end{itemize} \end{minipage} } \end{align}\]  ◻

Lemma 21. Given Assumptions 1, 2 and 6. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\) and

  2. \(\mathrm{isConfirmed}_v(b,t)\),

then, for any \(t' \geq t\), \(\mathrm{isConfirmed}_v(b, t')\).

Proof. The proof is by induction on \(t'\geq t\). We assume that the Lemma is satisfied for all times \(t_p<t'\), and we show that the the Lemma also holds at any time \(t'\) as well. We proceed directly with the inductive argument as this is a total induction and therefore it does not necessitate of an analysis of the base case.

Given that we assume \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t_p)\), we know that there exists a block \(b_{t_p}\succeq b\) and a slot \(s_{t_p} \in [\mathsf{first\_slot}(\mathsf{epoch}(t_p)-1)+1,\mathsf{slot}(t_p)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b_{t_p},\mathsf{st}(s_{t_p}))\).

Now, let \(b' := \setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{epoch}(t')-1,t')\). Then, there exists a slot \(s' \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b',\mathsf{st}(s'))\).

Given that \(t_p \geq t\) and \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\), we can apply 18 to conclude that \(b_{t_p}\) is canonical in the view of any honest validator starting from \(\mathsf{st}(s_{t_p})\), and that both \(b_{t_p}\) and \(b'\) are canonical at time \(\mathsf{st}(\mathsf{slot}(t'))\).

Let us now proceed by cases keeping in mind that, by definition, \(\mathsf{epoch}(t') \in \{\mathsf{epoch}(t_p),\mathsf{epoch}(t_p)+1\}\).

Case 1: \(s_{t_p} \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This implies that \(\mathsf{slot}(b')\geq\mathsf{slot}(b_{t_p})\). Given that both blocks are canonical for any honest validator at time \(\mathsf{st}(\mathsf{slot}(t'))\), we can conclude that \(b\preceq b_{t_p}\preceq b'\).

Case 2: \(s_{t_p} \notin [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This case implies that \(\mathsf{st}(s_{t_p})\leq\mathsf{st}(\mathsf{epoch}(t')-1)\) which further implies that \(\mathsf{epoch}(t_p) = \mathsf{epoch}(t')-1\). Also, given that \(\mathsf{slot}(b_{t_p})<s_{t_p}\), we also have that \(\mathsf{epoch}(b_{t_p}) < \mathsf{epoch}(t')-1 = \mathsf{epoch}(t_p)\). Hence, since \(b_{t_p}\) is canonical in the view of any honest validator from time \(\mathsf{st}(s_{t_p})\) and thereafter, this implies that \(b_{t_p}\) has been canonical in the view of any honest validator for the entirity of epoch \(\mathsf{epoch}(t')-1\).

Given [ln:ffg:call-will-chkp-be-justified-prev-epoch], we can apply 13 to conclude that for any block \(b'' \succeq \mathsf{C}(b_{t_p},\mathsf{epoch}(t_p)-1)\) and time \(t'' \geq \mathsf{st}(\mathsf{epoch}(t_p))\), \(\setkeys{weightofset}{chkp=b''} \left|{ \setkeys{ffgvalsetallsentraw}{source=,target=\mathsf{C}(b_{t_p}),time=t''} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b''} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b''} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\). Hence, we can apply Assumption [assum:ffg-stronger-justification:next-chkp-justified] to conclude that there exists a checkpoint \(C\) such that

  1. \(C \succeq b_{t_p}\)

  2. \(\mathsf{epoch}(C) = \mathsf{epoch}(t_p) = \mathsf{epoch}(t')-1\)

  3. by time \(\mathsf{st}(\mathsf{epoch}(t_p)+1) = \mathsf{st}(\mathsf{epoch}(t'))\), \(\displaystyle \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \mathsf{honFFGratio}(\beta)\),
    where \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )=\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\)

  4. by time \(\mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(t_p))) = \mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(t')-1))\) the view of validator \(v\) includes a block \(b''\) such that \(b''\succeq C \land \mathsf{epoch}(b'') < \mathsf{epoch}(t') \land \mathsf{C}(b_{t_p},\mathsf{epoch}(t_p)-1) \in \mathsf{AU}(b'')\).

Now we want to show that are satisfied for \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{block}(C),\mathsf{st}(\mathsf{slot}(t')))\).

[ln:ffg:check-first-slot].

The condition at this line follows from \(\mathsf{epoch}(t')=\mathsf{epoch}(t_p)+1\) and \(\mathsf{slot}(t') = \mathsf{slot}(t_p)+1\).

[ln:ffg:call-will-chkp-be-justified-prev-epoch].

Note that \(C = (\mathsf{block}(C),\mathsf{epoch}(t')-1)\). Then proceed as follows. \[\begin{align} \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source=, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}}\right|^{\weightofset@Chkp} &> \mathsf{honFFGratio}(\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- By applying condition~\ref{itm:lem:ffg-motonocity:weight-ffg} above.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying condition~\ref{itm:lem:ffg-motonocity:weight-ffg} above. \end{itemize} \end{minipage} } \\ &\geq \mathsf{honFFGratio}(\beta)(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- As\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- By expanding \mathsf{honFFGratio}(\beta).} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By expanding \mathsf{honFFGratio}(\beta). \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) \\ &= \begin{aligned}[t] &\frac{2}{3} \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\\ &- (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \end{aligned} && \ifthenelse{\equal{7cm}{}}{ \text{--- As, given that \mathsf{slot}(t')>\mathsf{last\_slot}(\mathsf{epoch}(b)),\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} =0.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, given that \mathsf{slot}(t')>\mathsf{last\_slot}(\mathsf{epoch}(b)),\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} =0. \end{itemize} \end{minipage} } \end{align}\]

.

Condition [itm:lem:ffg-motonocity:justied-chkp] above implies that there exists a block \(b'' \in \setkeys{viewattime}{val=v,time=\mathsf{st}(\mathsf{epoch}(t'))} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\) such that \(b''\succeq C \land \mathsf{epoch}(b'') < \mathsf{epoch}(t') \land \mathsf{C}(b_{t_p},\mathsf{epoch}(t_p)-1) \in \mathsf{AU}(b'')\). This also implies that \(\mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t_p)-1 = \mathsf{epoch}(t')-2\). Note also that \(b'' \succeq C\) and \(\mathsf{block}(C) \succeq b_{t_p}\) imply \(b''\succeq b_{t_p}\). Hence, conditions at are satisfied for \(b''\).

[ln:ffg:is-lmd-confimed-no-caching-prev-epoch].

Let \(b'''\) be any block such that \(b''' \preceq \mathsf{block}(C) \land b''' \neq b_{\texttt{gen}}\). \[\begin{align} \setkeys{indicatorfromblock}{from=b''',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &= \frac{ \setkeys{attsetweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \\ &\geq \frac{ \setkeys{weightofset}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- By \Cref{prop:gasper-basic:ffg-vote-for-c-ghost-vote-for-b-succ-c}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:gasper-basic:ffg-vote-for-c-ghost-vote-for-b-succ-c}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}(1-\beta)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- As, by Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta).} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta). \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}(1-\beta)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- As honest validators' effective balance never changes.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As honest validators' effective balance never changes. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}(1-\beta)}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} && \ifthenelse{\equal{7cm}{}}{ \text{--- Given that \mathsf{slot}(b''')\leq\mathsf{slot}(b_{t_p})<\mathsf{first\_slot}(\mathsf{epoch}(t_p))=\mathsf{first\_slot}(\mathsf{epoch}(t')-1)\leq\mathsf{last\_slot}(\mathsf{epoch}(t')-1)\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}. \Cref{assum:no-change-to-the-validator-set} then implies that\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that \mathsf{slot}(b''')\leq\mathsf{slot}(b_{t_p})<\mathsf{first\_slot}(\mathsf{epoch}(t_p))=\mathsf{first\_slot}(\mathsf{epoch}(t')-1)\leq\mathsf{last\_slot}(\mathsf{epoch}(t')-1)\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}. \Cref{assum:no-change-to-the-validator-set} then implies that\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} = \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &> \mathsf{honFFGratio}(\beta)(1-\beta) && \ifthenelse{\equal{7cm}{}}{ \text{--- By appling condition~\ref{itm:lem:ffg-motonocity:weight-ffg} above.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By appling condition~\ref{itm:lem:ffg-motonocity:weight-ffg} above. \end{itemize} \end{minipage} } \\ &\geq \frac{1}{2}\left(1+\frac{p}{(1-\beta){E}}\right)+\beta && \ifthenelse{\equal{7cm}{}}{ \text{--- By appling Lemma~\ref{lem:ffg-hon-ffg-ratio-implies-q}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By appling Lemma~\ref{lem:ffg-hon-ffg-ratio-implies-q}. \end{itemize} \end{minipage} } \\ &= \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} W_p^{\boostweight@Chkp}}{(1-\beta) \setkeys{totvalsetweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}\right)+\beta && \ifthenelse{\equal{7cm}{}}{ \text{--- As, by definition,\setkeys{boostweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} .} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{boostweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} . \end{itemize} \end{minipage} } \\ &\geq \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} W_p^{\boostweight@Chkp}}{ \setkeys{weightofset}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}}\right)+\beta && \ifthenelse{\equal{7cm}{}}{ \text{--- As, due to \Cref{assum:no-change-to-the-validator-set},\setkeys{weightofset}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} \geq (1-\beta) \setkeys{weightofset}{chkp={b_{\texttt{gen}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=b_{\texttt{gen}}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} \geq (1-\beta) \setkeys{totvalsetweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to \Cref{assum:no-change-to-the-validator-set},\setkeys{weightofset}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} \geq (1-\beta) \setkeys{weightofset}{chkp={b_{\texttt{gen}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=b_{\texttt{gen}}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} \geq (1-\beta) \setkeys{totvalsetweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\end{itemize} \end{minipage} } \\ &= \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\right)+\beta && \ifthenelse{\equal{7cm}{}}{ \text{--- Given that \mathsf{slot}(b''')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that \mathsf{slot}(b''')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }. \end{itemize} \end{minipage} } \end{align}\] Hence, \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathit{isLMDConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{block}(C),\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} ),t')\) which satisfies line [ln:ffg:is-lmd-confimed-no-caching-prev-epoch].

Above we have show that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{block}(C),\mathsf{st}(\mathsf{slot}(t'))) =\mathrm{\small True}\) which, by 19, also implies that \(\mathsf{block}(C)\) is canonical for any honest valdiator at time \(\mathsf{st}(\mathsf{slot}(t'))\). Given that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b',\mathsf{st}(\mathsf{slot}(t'))) =\mathrm{\small True}\), the above implies that \(\mathsf{slot}(b') \geq \mathsf{slot}(\mathsf{block}(C))\). Then, because \(b'\) is also canonical for any honest validator at time \(\mathsf{st}(\mathsf{slot}(t'))\), we have that \(b \preceq b_{t_p}\preceq \mathsf{block}(C)\preceq b'\).

 ◻

4.3 Confirmation Rule↩︎

We can now formally present 5 as a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Theorem 2. Let \(\mathit{sg}(b, t, \mathbb{GST}) = \mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1 \land \mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\). Given [assum:no-change-to-the-validator-set,assum:beta,assum:ffg-stronger-justification], the tuple \((\text{\Cref{alg:ffg}}, \mathit{sg})\) is a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Proof. Note that 6 implies 5. Hence, we can apply [lem:ffg-motonocity,lem:ffg-overall-safety] to conclude the proof. ◻

4.4 Confirmation Time↩︎

We now conclude this section by showing that a block can be confirmed within one slot in the best-case scenario.

Theorem 3. If \(GST= 0\), \(\beta=0\), then any block \(b\) proposed is confirmed by time \(\mathsf{st}(\mathsf{slot}(b)+1)\).

Proof. Under these assumptions, Gasper ensures that (i) there are never forks, (ii) a block is proposed in each slot, and (iii) any block \(b'\) receives \(\textsf{GHOST}\) votes from the entire committee of \(\mathsf{slot}(b')\). [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] implies then that any checkpoint \(\mathsf{C}(b', \mathsf{epoch}(b'))\) receives FFG votes from the entire validator set and 1 implies that no validator’s effective balance ever changes. Also, as per the Ethereum’s Gasper implementation [6] \(\left(1+\frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b,to=s,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\right)\) is upper bounded by \(0.7\). From this, follows that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmed(b,\mathsf{st}(\mathsf{slot}(b)+1))}}_{\varforvalattime@Val}} {{\mathrm{isConfirmed(b,\mathsf{st}(\mathsf{slot}(b)+1))}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\). ◻

5 A Confirmation Rule for LMD-GHOST-HFC accounting for validator changes↩︎

Figure 7: Confirmation Rule for LMD-GHOST-HFC considering validators entries, exits, rewards and penalties

In this section, we present a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) that does not rely on 1.

Before taking a look at the algorithm, we need to introduce the following property as it implicitly establishes notation that is used by the Confirmation Rule algorithm.

Property 3 (Properties on validator set and effective balance changes). Let \(C_e\) be any checkpoint and \(x'\) be either a block or a checkpoint such that \(x' \succeq C_e \land \mathsf{epoch}(x') \leq \mathsf{epoch}(C_e)+ 1\)

There exist computable values \(\epsilon, \rho, \pi, \sigma\in [0,1)\), such that,

  1. The maximum weight of validators that can exit the validator set between checkpoint \(C_e\) and \(x'\) is at most \(\epsilon\) of the non-slashed balance, i.e., \(\setkeys{weightofset}{chkp=C_e} \left|{ \setkeys{totvalset}{chkp=C_e} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=x'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} \leq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\).

  2. The maximum weight of validators that can enter the validator set between checkpoint \(C_e\) and \(x'\) is \(\setkeys{totvalset}{chkp=C_e} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \epsilon\),i.e., \(| \setkeys{totvalset}{chkp=x'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C_e} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}|^{x'} \leq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\).

  3. The maximum reward that validators can accrue between \(C_e\) and \(x'\) is \(\rho\) of their weight,i.e.,
    \(\forall v \in \left( \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=x'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right),\; \setkeys{weightofset}{chkp=x'} \left|{\{v\}}\right|^{\weightofset@Chkp} \leq \setkeys{weightofset}{chkp=C_{e}} \left|{\{v\}}\right|^{\weightofset@Chkp}(1+\rho)\).

  4. The maximum penalty (excluding slashing) that any validator can accrue between \(C_e\) and \(x'\) is \(\pi\) of their weight,i.e., \(\forall v \in \left(\left( \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=x'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right) \setminus \setkeys{slashedset}{chkp=x'} \mathcal{D}^{\slashedset@Chkp}\right),\; \setkeys{weightofset}{chkp=x'} \left|{\{v\}}\right|^{\weightofset@Chkp} \geq \setkeys{weightofset}{chkp=C_{e}} \left|{\{v\}}\right|^{\weightofset@Chkp}(1-\pi)\).

  5. The maximum slashing penalty that any validator can accrue between \(C_e\) and \(x'\) is \(\sigma\) of their weight,i.e., \(\forall v \in \left(\left( \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=x'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right) \cap \setkeys{slashedset}{chkp=x'} \mathcal{D}^{\slashedset@Chkp}\right),\; \setkeys{weightofset}{chkp=x'} \left|{\{v\}}\right|^{\weightofset@Chkp} \geq \setkeys{weightofset}{chkp=C_{e}} \left|{\{v\}}\right|^{\weightofset@Chkp}(1-\sigma)\).

  6. The slashing penalty is higher than the penalty that honest nodes may incur, i.e., \(\sigma\geq\pi\)

  7. \(\epsilon< \frac{2}{3}\).

  8. \(1 \geq \pi+ \epsilon(1+\rho)\) 10

  9. \(\frac{1}{6} \geq \frac{p}{2{E}} + \frac{2\epsilon}{1-\pi} + \frac{\epsilon(\rho(1-\epsilon) - \pi)}{1 - \pi}\) 11

  10. For any time \(t\), honest validator \(v\) and valid checkpoint \(C\), if

    1. \(t\geq\mathbb{GST}\),

    2. \(C \succeq \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\),

    3. \(\mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\leq \mathsf{epoch}(C) \leq \mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})+\ell\), where \(\ell\geq 2\),

    then \(\setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(C)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }\).

As in the previous section, our aim is that such Confirmation Rule presented in this section is implementable in practice. Hence, we still have to work under the limitation that we cannot access FFG votes older than two epochs. The resulting algorithm is presented in 7 where \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) is defined below.

Definition 10 (Full LMD-GHOST safety condition). The Full LMD-GHOST safety condition for block \(b\) according to checkpoint \(C\) and the view of validator \(v\) at time \(t\geq\mathbb{GST}\) corresponds to the following condition, formally named \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t)\). \[\begin{align} & \setkeys{varforvalattime}{val=v}\ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t) := \\ &\qquad\qquad\forall b' \preceq b,\; \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1+\rho}{2(1-\pi)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C} W_p^{\boostweight@Chkp} (1+ \epsilon+ \rho) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} + \beta \lor b' = b_{\texttt{gen}} \end{align}\]

As one can quickly notice, 7 is identical to 5 except only for the threshold used to check the condition on the LMD-GHOST safety indicator and the threshold used in \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{willChkpBeJustified}}_{\varforvalattime@Val}} {{\mathit{willChkpBeJustified}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\). As we will see below, the adjusted thresholds are needed to account for the effect of validators entering, exiting, and accruing rewards and penalties.

As usual, first, we prove that 7 ensures the Safety property of Confirmation Rules and then move to prove that it guarantees the Monotonicity property as well.

5.1 Safety↩︎

In a vein similar to 3 and 4, first, we look at the guarantees provided by \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\), then we leverages these guarantees to show that 7 ensures Safety.

5.1.1 The Safety Guarantee provided by \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\)↩︎

The aim of this section is to show that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t)\), where \(C\) is a checkpoint satisfying some conditions that will be detailed below, ensures that \(b\) is canonical at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter. This property and the related conditions for \(C\) are formalized in 31. Then, in 5.1.2, we will show that 7 ensures that such conditions are satsified.

For ease of exposition, we have broken the proof of 31 into different Lemmas. Starting bottom-up, [thm:lmd-confirmed-changing-balances,thm:lmd-confirmed-changing-balances-prev-epoch] prove the conclusion of 31 for the cases \(\mathsf{epoch}(b)=\mathsf{epoch}(t)\) and \(\mathsf{epoch}(b)<\mathsf{epoch}(t)\), respectively. Both of these Lemmas leverage 26 and 28 which prove the conclusion of 31 for the case that the epoch of the greatest jutified checkpoint of any honest validator is no higher than \(\mathsf{epoch}(C)+1\) and the case that all honest validators in an epoch no lower than the current greatest justified checkpoint, but no more than two epochs away from it, GHOST vote in support of \(b\). [lem:bound-on-h-next-chkp,lem:lowerbound-on-p-changing-balances,lem:q-implies-p-changing-balances] are analogous to [lem:lmd-p-monotonic,lem:lmd-cond-on-p-implies-cond-on-h,lem:lmd-cond-on-q-implies-cond-on-p] in 3. However, compared to 3, in this section, we cannot leverage the monotoncity property of the honest LMD-GHOST safety indicator as this property could not be guaranteed due to honest validators potentially exiting or accruing penalties. Instead, we work out a lower bound on how low the the honest LMD-GHOST safety indicator can go across two epochs and then show that the Full LMD-GHOST safety condition is enough to ensure that such lower bound meets the honest LMD-GHOST safety condition (3). [lem:bound-on-boost-next-chkp,lem:bound-on-exit-two-epoch-distance] provide two bounds on changes to the validator set’s total effective balance that are utilized by the other Lemmas mentioned earlier.

Lemma 22. Let \(e\) be any epoch, and \(C_e\) and \(C_{e+1}\) be any two checkpoints such that \(C_{e+1} \succeq C_e \land \mathsf{epoch}(C_{e+1}) \leq \mathsf{epoch}(C_e)+ 1\). Then, \(\setkeys{totvalsetweight}{chkp=C_{e+1}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \leq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\epsilon+ \rho)\).

Proof. \[\begin{align} \setkeys{totvalsetweight}{chkp=C_{e+1}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} &= \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}\\ &= \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \left( \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) \sqcup \left( \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) }\right|^{\weightofset@Chkp}\\ &= \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} + \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} \\ &\leq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon + \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} && \ifthenelse{\equal{}{}}{ \text{--- By applying Property~\ref{prop:changing-balances:entry}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By applying Property~\ref{prop:changing-balances:entry} \end{itemize} \end{minipage} } \\ &\leq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon + \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\rho) && \ifthenelse{\equal{5cm}{}}{ \text{--- As \left( \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right) \subseteq \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} and then apply Property~\ref{prop:changing-balances:rewardr}} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As \left( \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right) \subseteq \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} and then apply Property~\ref{prop:changing-balances:rewardr} \end{itemize} \end{minipage} } \\ &= \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\epsilon+ \rho) && \ifthenelse{\equal{}{}}{ \text{--- Simplification} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification \end{itemize} \end{minipage} } \end{align}\] ◻

Lemma 23.

Let \(t\) be any time, \(C_1\) and \(C_2\) be any two checkpoints such that \(C_2 \succeq C_1 \land \mathsf{epoch}(C_2) \leq \mathsf{epoch}(C_1)+1\), \(v\) be any honest validators and \(b'\) be any block. Then, \(\setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} \geq \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\right)(1-\pi)\).

Proof. \[\begin{align} \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} &= \setkeys{weightofset}{chkp=C_2} \left|{ \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} }\right|^{\weightofset@Chkp}\\ &\geq \setkeys{weightofset}{chkp=C_2} \left|{ \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \cap \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} }\right|^{\weightofset@Chkp}\\ &\geq \setkeys{weightofset}{chkp=C_1} \left|{ \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \cap \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} }\right|^{\weightofset@Chkp}(1-\pi) && \ifthenelse{\equal{5cm}{}}{ \text{--- By applying the fact that honest validators never get slashed and \Cref{prop:changing-balances:penr}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying the fact that honest validators never get slashed and \Cref{prop:changing-balances:penr}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp=C_1} \left|{ \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \setminus \left( \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \setminus \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \right)}\right|^{\weightofset@Chkp}(1-\pi)\\ &= \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{weightofset}{chkp=C_1} \left|{ \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} \setminus \setkeys{attsetfromblock}{from=b',to=s,val=v,when=t,chkp=C_2} {\mathcal{H}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} }\right|^{\weightofset@Chkp} \right) (1-\pi) \\ &= \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{weightofset}{chkp=C_1} \left|{ \left( \setkeys{attsetfromblockunfiltered}{from=b',to=s,val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \cap \setkeys{valsetfromblock}{from=b',to=s,chkp=C_1} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \right) \setminus \left( \setkeys{attsetfromblockunfiltered}{from=b',to=s,val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \cap \setkeys{valsetfromblock}{from=b',to=s,chkp=C_2} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \right) }\right|^{\weightofset@Chkp} \right) (1-\pi) && \ifthenelse{\equal{}{}}{ \text{--- By definition} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By definition \end{itemize} \end{minipage} } \\ &= \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{weightofset}{chkp=C_1} \left|{ \left( \setkeys{attsetfromblockunfiltered}{from=b',to=s,val=v,when=t} {\mathcal{H}}_{\attsetfromblockunfiltered@From}^{\attsetfromblockunfiltered@To,\attsetfromblockunfiltered@Val,\attsetfromblockunfiltered@When} \setkeys{attsetfromblockunfiltered}{from=,to=,val=,when=} \cap \setkeys{valsetfromblock}{from=b',to=s,chkp=C_1} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \right) \setminus \setkeys{valsetfromblock}{from=b',to=s,chkp=C_2} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} }\right|^{\weightofset@Chkp} \right) (1-\pi) && \ifthenelse{\equal{5cm}{}}{ \text{--- As (A \cap B) \setminus (A \cap C) = (A \cap B) \setminus C} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As (A \cap B) \setminus (A \cap C) = (A \cap B) \setminus C \end{itemize} \end{minipage} } \\ &\geq \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{weightofset}{chkp=C_1} \left|{ \setkeys{valsetfromblock}{from=b',to=s,chkp=C_1} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} \setminus \setkeys{valsetfromblock}{from=b',to=s,chkp=C_2} {\mathcal{J}}_{\valsetfromblock@From}^{\valsetfromblock@To,\valsetfromblock@Chkp} }\right|^{\weightofset@Chkp} \right) (1-\pi) \\ &\geq \left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon \right) (1-\pi) && \ifthenelse{\equal{}{}}{ \text{--- By \Cref{prop:changing-balances:exitr}.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:changing-balances:exitr}. \end{itemize} \end{minipage} } \end{align}\]  ◻

Lemma 24. Given Assumption 1, for any two honest validators \(v\) and \(v'\), block \(b\), times \(t'\) and \(t\), and any two checkpoints \(C\) and \(C_1\), if

  1. \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\),

  2. \(t'\geq \mathsf{st}(\mathsf{slot}(t))\),

  3. \(C \succeq C_1\),

  4. \(\mathsf{epoch}(C) \leq \mathsf{epoch}(C_1)+1\) and

  5. all honest validators in the committees between slot \(\mathsf{slot}(t)\) and \(\mathsf{slot}(t') -1\) included GHOST vote in support of \(b\),

then \[\setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v',when=t',chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \geq \frac{ \left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\right)(1-\pi) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s-1,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)}\]

Proof. We can follow the same reasoning applied in the proof of 1 to prove that \[\begin{align} \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v',when=t',chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \geq \frac{ \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \end{align}\]

Then, by applying Lemma 23 and Property [prop:changing-balances:rewardr], we have that \[\begin{align} \frac{ \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} &\geq \frac{ \left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\right)(1-\pi) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} \end{align}\] which concludes the proof. ◻

Lemma 25. Given Assumption 2, for any time \(t\), honest validator \(v\), block \(b'\), slot \(s\) such that \(slot(b') \leq s\) checkpoints \(C_1\) and \(C_2\),
if \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1+\rho}{2(1-\pi)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} + \beta\), then \(\frac{\left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\right)(1-\pi)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\)

Proof. First, we proceed as follows to work out a lower bound on \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}\).

 \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}\) \(\geq\left( \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} -\beta\right)\left(\frac{1}{1-\beta}\right)\)
\(> \frac{1}{(1-\beta)} \left( \frac{1+\rho}{2(1-\pi)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\) — By applying the condition on \(\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}\)
\(\geq \frac{1+\rho}{2(1-\pi)(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\)

Then we have, \[\begin{align} \frac{\left( \setkeys{attsetweightfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\right)(1-\pi)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} &\geq \frac{\left( \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}- \epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\right)(1-\pi)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} && \ifthenelse{\equal{6cm}{}}{ \text{--- By definition of\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By definition of\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C_1} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} \end{itemize} \end{minipage} } \\ &> \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1+\rho}{2(1-\pi)(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} } }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying\setkeys{indicatorfromblock}{from=b',to=s,val=v,when=t,chkp=C} {{{\mathit{P}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} > \frac{1+\rho}{2(1-\pi)(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C_2} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) + \frac{\epsilon \setkeys{totvalsetweight}{chkp=C_1} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s,chkp=C_1} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\end{itemize} \end{minipage} } \end{align}\] ◻

Lemma 26. Given Assumptions 2 and [assum:ffg-assumptions:beta], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, \(C\) be any checkpoint. If

  1. \(\mathsf{st}(slot(t) - 1)\geq\mathbb{GST}\),

  2. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t)\),

  3. \(t'\geq\mathsf{st}(\mathsf{slot}(t))\) and

  4. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\),

    1. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C \land \mathsf{epoch}( \setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \leq \mathsf{epoch}(C)+ 1\) and

    2. \(b \in \setkeys{filtered}{time=t'',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) is never filtered out by any honest validator between time \(t\) and time \(t'\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. We proceed by induction on \(t'\) under the condition that \(\forall v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} },\, b \in \setkeys{filtered}{time=t',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Base case.

This is a strong induction quantified on \(t'\), so there is no need for a base case. Alternatively, we can take \(t' < t\) as base case for which the Lemma is vacuously true.

Inductive step: \(t' \geq t\).

Let \(s':= \mathsf{slot}(t')\), \(v'\) be any honest validator, \(C' := \setkeys{chkpattime}{val=v',time=t'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) and \(b'\) be any block such that \(b' \preceq b\). We assume that the Lemma holds for any time \(t''\) such that \(t'' < t'\) and we prove that it holds at time \(t'\) as well.

From condition [itm:lem:lmd-confirmed-changing-balances-part-1:cond-on-latest-j] we have that \[C' \succeq C \land \mathsf{epoch}(C') \leq \mathsf{epoch}(C)+1\]

Hence, given that by the inductive hypothesis all validators in \(\setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')-1} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) 12 GHOST vote for a descendant of \(b\), we can apply Lemma 24 to conclude that \[\frac{ \setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \geq \frac{ \left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \epsilon \setkeys{totvalsetweight}{chkp={C}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) (1-\pi) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)}\].

From Lemma 25, we have that
\[\frac{ \left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \epsilon \setkeys{totvalsetweight}{chkp={C}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) (1-\pi) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp={C}} W_p^{\boostweight@Chkp} (1+ \epsilon+ \rho) }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\]

Hence, \[\label{eqn:thm:lmd-confirmed-changing-balances:1} \frac{ \setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \geq \frac{\left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t)-1,val=v,when=t,chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} - \epsilon \setkeys{totvalsetweight}{chkp={C}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\right)(1-\pi)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\tag{1}\] as, by Lemma 22, \(\setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp} \leq \setkeys{boostweight}{chkp={C}} W_p^{\boostweight@Chkp} (1 + \epsilon+ \rho)\).

Now, let us proceed by cases to show that \(\setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{2}\).

Case 1.1: \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\).

In this case we have that \[\frac{ \setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} > \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) \geq \frac{1}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right)\]

Hence, we can apply Lemma 3 to conclude that \[\setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} > \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{2}\].

Case 1.2: \(\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} < \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t)-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}\).

\[\begin{align} \setkeys{attsetweightfromblock}{from=b',to=s'-1,val=v',when=t',chkp=C'} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} &\geq \left( \setkeys{attsetweightfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v,when=t,chkp={C}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}- \epsilon \setkeys{totvalsetweight}{chkp={C}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\right) (1-\pi) && \ifthenelse{\equal{}{}}{ \text{--- by Lemma~\ref{lem:bound-on-h-next-chkp}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item by Lemma~\ref{lem:bound-on-h-next-chkp} \end{itemize} \end{minipage} } \\ \\ &> \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1+\rho)}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{}{}}{ \text{--- by applying \eqref{eqn:thm:lmd-confirmed-changing-balances:1}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item by applying \eqref{eqn:thm:lmd-confirmed-changing-balances:1} \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) && \ifthenelse{\equal{}{}}{ \text{--- as \rho\geq 0} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item as \rho\geq 0 \end{itemize} \end{minipage} } \\ &\geq \frac{(1-\beta) \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{2(1-\beta)} \left( 1+ \frac{ \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) &&\text{ \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/avkmnpri.png}\label{wfoysamu}\end{figure} }\\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{}{}}{ \text{--- by simplifications and \mathsf{slot}(t')=s'} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item by simplifications and \mathsf{slot}(t')=s' \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp=C'} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{}{}}{ \text{--- as\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \leq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item as\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp=C'} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \leq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={C}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \end{itemize} \end{minipage} } \end{align}\tag{2}\]

Now we can apply 2 to conclude the proof.

 ◻

Lemma 27. Let \(C\) and \(C''\) be any two checkpoints such that \(C'' \succeq C' \land \mathsf{epoch}(C'') = \mathsf{epoch}(C)+2\). The following condition holds
\[\setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} \leq \frac{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi}\]

Proof. Let \(C' := \mathsf{C}(\mathsf{block}(C''),\mathsf{epoch}(C)+1)\). By definition of checkpoints, \(C \preceq C' \preceq C'' \land \mathsf{epoch}(C') = \mathsf{epoch}(C)+1\).

\[\label{eqn:lem:bound-on-exit-two-epoch-distance:1} \begin{align} \setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} &= \setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} + \setkeys{weightofset}{chkp=C} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right)\setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}\\ \end{align}\tag{3}\]

\[\label{eqn:lem:bound-on-exit-two-epoch-distance:2} \begin{align} \setkeys{weightofset}{chkp=C} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right)\setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} &\leq \frac{ \setkeys{weightofset}{chkp=C'} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right)\setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}}{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- By Property~\ref{prop:changing-balances:penr}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By Property~\ref{prop:changing-balances:penr} \end{itemize} \end{minipage} } \\ &\leq \frac{ \setkeys{weightofset}{chkp=C'} \left|{ \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}}{1-\pi}\\ &\leq \frac{\epsilon \setkeys{weightofset}{chkp=C'} \left|{ \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}}{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- By Property~\ref{prop:changing-balances:exitr}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By Property~\ref{prop:changing-balances:exitr} \end{itemize} \end{minipage} } \\ &= \frac{\epsilon \left( \setkeys{weightofset}{chkp=C'} \left|{ \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} + \setkeys{weightofset}{chkp=C'} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) }\right|^{\weightofset@Chkp} \right) }{1-\pi}\\ &\leq \frac{\epsilon \left( \epsilon \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \setkeys{weightofset}{chkp=C'} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) }\right|^{\weightofset@Chkp} \right) }{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- By Property~\ref{prop:changing-balances:entry}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By Property~\ref{prop:changing-balances:entry} \end{itemize} \end{minipage} } \\ &\leq \frac{\epsilon \left( \epsilon \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \setkeys{weightofset}{chkp=C} \left|{\left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) }\right|^{\weightofset@Chkp} (1+\rho) \right) }{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- By Property~\ref{prop:changing-balances:rewardr}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By Property~\ref{prop:changing-balances:rewardr} \end{itemize} \end{minipage} } \\ &= \frac{\epsilon \left( \epsilon \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \left( \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) }\right|^{\weightofset@Chkp} (1+\rho) \right) }{1-\pi}\\ &= \frac{\epsilon \left( \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\epsilon+\rho) - \setkeys{weightofset}{chkp=C'} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1+\rho) \right) }{1-\pi}\\ \end{align}\tag{4}\]

By combining 3 and 4 , we obtain \[\begin{align} \setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C''} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} &\leq \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}\left(1 -\pi- (1+\rho)\epsilon\right) + \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\epsilon+\rho)\epsilon }{1-\pi} \\ &\leq \frac{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon\left(1 -\pi- (1+\rho)\epsilon\right) + \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1+\epsilon+\rho)\epsilon }{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- By Properties~\ref{prop:changing-balances:exitr} and \ref{prop:changing-balances:cond-on-penr-exitr-rewardr}} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By Properties~\ref{prop:changing-balances:exitr} and \ref{prop:changing-balances:cond-on-penr-exitr-rewardr} \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} \end{align}\] ◻

Lemma 28. Given Assumptions 2 and [assum:ffg-assumptions:beta], let \(v\) be any honest validator, \(t\) be any time, \(b\) be any block and \(e\) be any epoch. If

then, at time \(t'\), \(b\) is canonical in the view of any honest validator.

Proof. Let \(s:= \mathsf{slot}(t)\), \(v\) be any honest validator and \(b'\) be any block such that \(b' \preceq b\). First, we can proceed as follows to show that \(\setkeys{attsetweightfromblock}{from=b',to=s-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} \geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2}\).

\[\begin{align} \setkeys{attsetweightfromblock}{from=b',to=s-1,val=v,when=t,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{H}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=} &\geq \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{}{}}{ \text{--- Due to condition \ref{itm:lem:lmd-confirmed-changing-balances-part-2:epoch} \ref{itm:lem:lmd-confirmed-changing-balances-part-2:vote-desc} \ref{itm:lem:lmd-confirmed-changing-balances-part-2:t-ge-e}.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item Due to condition \ref{itm:lem:lmd-confirmed-changing-balances-part-2:epoch} \ref{itm:lem:lmd-confirmed-changing-balances-part-2:vote-desc} \ref{itm:lem:lmd-confirmed-changing-balances-part-2:t-ge-e}. \end{itemize} \end{minipage} } \\ &\geq \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch={\mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \cap \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}\\ &= \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch={\mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \setminus \left( \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch={\mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \setminus \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \right)}\right|^{\weightofset@Chkp}\\ &= \setkeys{commweightatepoch}{epoch=,val=,when=,chkp=} \setkeys{commweightatepoch}{epoch={\mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})},chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \hat{\overline{\addweight{\mathcal{J}}}}{}^{\commweightatepoch@Epoch, \ifthenelse{\equal{\commweightatepoch@Val}{}}{}{\commweightatepoch@Val,} \ifthenelse{\equal{\commweightatepoch@When}{}}{}{\commweightatepoch@When,} \commweightatepoch@Chkp } - \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch={\mathsf{epoch}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \setminus \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}\\ &= \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} - \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{totvalset}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp={\mathsf{epoch}(\mathsf{block}( \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}),e)}} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} &&\text{ \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/qxchyvzf.png}\label{fybkuocs}\end{figure} }\\ &\geq \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} - \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\frac{ \epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} && \ifthenelse{\equal{}{}}{ \text{--- From \Cref{lem:bound-on-exit-two-epoch-distance}.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item From \Cref{lem:bound-on-exit-two-epoch-distance}. \end{itemize} \end{minipage} } \\ &\geq \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} (1-\beta) - \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\frac{ \epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} && \ifthenelse{\equal{7cm}{}}{ \text{--- As, due to \Cref{assum:beta} and \Cref{prop:wt-we-link},\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} (1-\beta).} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to \Cref{assum:beta} and \Cref{prop:wt-we-link},\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} (1-\beta). \end{itemize} \end{minipage} } \\ &= \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left( 1 - \beta - \frac{ \epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} \right)\\ &> \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{1}{2}\left(1+\frac{p}{{E}}\right) && \ifthenelse{\equal{7cm}{}}{ \text{--- As Property~\ref{prop:changing-balances:cond-on-p-exitr-beta} and Assumption~\ref{assum:ffg-assumptions:beta} imply that \beta < \frac{1}{3}=\frac{1}{2}-\frac{1}{6}\leq\frac{1}{2} - \frac{p}{2{E}} - \frac{2\epsilon}{1-\pi} - \frac{\epsilon(\rho(1-\epsilon) - \pi)}{1 - \pi} which in turn implies that \left( 1 - \beta - \frac{ \epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} \right) > \frac{1}{2}\left(1+\frac{p}{{E}}\right) } }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As Property~\ref{prop:changing-balances:cond-on-p-exitr-beta} and Assumption~\ref{assum:ffg-assumptions:beta} imply that \beta < \frac{1}{3}=\frac{1}{2}-\frac{1}{6}\leq\frac{1}{2} - \frac{p}{2{E}} - \frac{2\epsilon}{1-\pi} - \frac{\epsilon(\rho(1-\epsilon) - \pi)}{1 - \pi} which in turn implies that \left( 1 - \beta - \frac{ \epsilon\left(2 + \rho(1-\epsilon) - \pi\right) }{1-\pi} \right) > \frac{1}{2}\left(1+\frac{p}{{E}}\right) \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{}{}}{ \text{--- By simplifications and definition of\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}.} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item By simplifications and definition of\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} + \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{2} && \ifthenelse{\equal{}{}}{ \text{--- As, by definition,\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} .} }{ \begin{minipage}[t]{} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=s'-1,chkp={ \setkeys{chkpattime}{val=v,time=t} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} . \end{itemize} \end{minipage} } \end{align}\tag{5}\]

Then, we can apply 2 to conclude the proof. ◻

Lemma 29. Given Assumptions 2 and [assum:ffg-assumptions:beta], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, \(C\) be any checkpoint. If

  1. \(\mathsf{st}(\mathsf{slot}(t) - 1)\geq\mathbb{GST}\),

  2. \(\mathsf{epoch}(b) = \mathsf{epoch}(t)\),

  3. \(\mathsf{epoch}(C) = \mathsf{epoch}(t) - 1\),

  4. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, C, t)\),

  5. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\), and

  6. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\),

    1. \(b \in \setkeys{filtered}{time=t'',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) is never filtered out by any honest validator between time \(t\) and time \(t'\), and

    2. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\succeq C\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. We proceed by induction on \(t'\) under the condition that \(\forall v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} },\, b \in \setkeys{filtered}{time=t',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Base case.

This is a strong induction quantified over \(t'\), so there is no need for a base case. Alternatively, we can take \(t' < t\) as base case for which the Theorem is vacuously true.

Inductive step: \(t' \geq t\).

Let \(s':= \mathsf{slot}(t')\), \(v'\) be any honest validator and \(b'\) be any block such that \(b' \preceq b\). We assume that the Lemma holds for any time \(t''\) such that \(t'' < t'\) and we prove that it holds at time \(t'\) as well.

We distinguish between two cases.

Case 1: \(\mathsf{epoch}(t') \leq \mathsf{epoch}(t)+1\).

Due to Lemma 5, we know that by time \(t'\), \(b\) is in the view of validator \(v'\). Because of this, conditions [itm:thm:lmd-confirmed-changing-balances:cond-on-j] and [itm:thm:lmd-confirmed-changing-balances:cond-on-latest-j] in the Lemma’s statement, and [prop:gasper-basic:highest-justified-not-from-current-epoch], we can conclude that \[\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C \land \mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \leq \mathsf{epoch}(C)+1\]

Hence, we can apply Lemma 26 to conclude the proof for this case.

Case 2: \(\mathsf{epoch}(t') > \mathsf{epoch}(t)+1\).

Let \(e := \min(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})+2,\mathsf{epoch}(t')-1)\). Observe that conditions [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-j] and [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-latest-j], and [prop:gasper-basic:highest-justified-not-from-current-epoch] imply that \(epoch( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \in [\mathsf{epoch}(t)-1,\mathsf{epoch}(t')-1]\). From the inductive hypothesis, we also know that \(b\) has been canonical for any validator during any epoch in the set \([\mathsf{epoch}(t)+1,\mathsf{epoch}(t')-1]\). Hence, \(b\) has been canonical in the view any honest validator during the entire epoch \(e\). By definition, \(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\leq e \leq \mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})+2\). Also, from the Lemma’s conditions, we have that \(\mathsf{epoch}(b) <e\). This allows us to apply Lemma 28 to conclude the proof for this case.

 ◻

Lemma 30. Given Assumptions 2 and [assum:ffg-assumptions:beta], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, \(C\) be any checkpoint.

  1. \(\mathsf{st}(slot(t)-1)\geq\mathbb{GST}\),

  2. \(t = \mathsf{st}(\mathsf{first\_slot}(epoch(t)))\),

  3. \(\mathsf{epoch}(b) < \mathsf{epoch}(t)\),

  4. \(\mathsf{epoch}(C) \geq \mathsf{epoch}(t) - 2\),

  5. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, C, t)\),

  6. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\), and

  7. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\),

    1. \(b \in \setkeys{filtered}{time=t'',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) is never filtered out by any honest validator between time \(t\) and time \(t'\), and

    2. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

Proof. We proceed by induction on \(t'\) under the condition that \(\forall v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} },\, b \in \setkeys{filtered}{time=t',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\).

Base case.

This is a strong induction quantified over \(t'\), so there is no need for a base case. Alternatively, we can take \(t' < t\) as base case for which the Theorem is vacuously true.

Inductive step: \(t' \geq t\).

Let \(s':= \mathsf{slot}(t')\), \(v'\) be any honest validator and \(b'\) be any block such that \(b' \preceq b\). We assume that the Lemma holds for any time \(t''\) such that \(t'' < t'\) and we prove that it holds at time \(t'\) as well.

We distinguish between two cases.

Case 1: \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\).

Due to Lemma 5, we know that by time \(t'\), \(b\) is in the view of validator \(v'\). Because of this, conditions [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-j] and [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-latest-j], and Property [prop:gasper-basic:highest-justified-not-from-current-epoch] imply that \[\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C \land \mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \leq \mathsf{epoch}(C)+1\]

Hence, we can apply Lemma 26 to conclude the proof for this case.

Case 2: \(\mathsf{epoch}(t') > \mathsf{epoch}(t)\).

Let \(e := \min(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})+2,\mathsf{epoch}(t')-1)\). Observe that conditions [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-j] and [itm:thm:lmd-confirmed-changing-balances-prev-epoch:cond-on-latest-j], and [prop:gasper-basic:highest-justified-not-from-current-epoch] imply that \(epoch( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \in [\mathsf{epoch}(t)-2,\mathsf{epoch}(t')-1]\). Note that \(t = \mathsf{st}(\mathsf{first\_slot}(\mathsf{epoch}(t)))\) implies \(\mathsf{slot}(t) = \mathsf{first\_slot}(\mathsf{epoch}(t))\) which further implies that \(b\) has been canonical for any validator during any epoch in the set \([\mathsf{epoch}(t),\mathsf{epoch}(t')-1]\). Hence, \(b\) has been canonical in the view any honest validator during the entire epoch \(e\). By definition, \(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\leq e \leq \mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})+2\). Also, from the Lemma’s conditions, we have that \(\mathsf{epoch}(b) <e\). This allows us to apply Lemma 28 to conclude the proof for this case.

 ◻

Lemma 31. Given Assumptions 2 and [assum:ffg-assumptions:beta], let \(v\) be any honest validator, \(t\) and \(t'\) be any two times and \(b\) be any block, \(C\) be any checkpoint.

  1. \(\mathsf{st}(slot(t)-1)\geq\mathbb{GST}\),

  2. \(\mathsf{epoch}(b) = \mathsf{epoch}(t) \implies \mathsf{epoch}(C)=\mathsf{epoch}(t)-1\),

  3. \(\mathsf{epoch}(b) < \mathsf{epoch}(t) \implies \mathsf{epoch}(C)\geq\mathsf{epoch}(t)-2 \land t = \mathsf{st}(\mathsf{first\_slot}(epoch(t)))\),

  4. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, C, t)\),

  5. \(t' \geq \mathsf{st}(\mathsf{slot}(t))\),

  6. for any validator \(v'' \in \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{slot}(t')} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\) and time \(t''\) such that \(t \leq t'' \leq t'\) and

    1. \(b \in \setkeys{filtered}{time=t'',val=v''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) is never filtered out by any honest validator between time \(t\) and time \(t'\), and

    2. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C\),

then \(b\) is canonical in the view of any honest validator at time \(t'\).

5.1.2 Full Safety Proof↩︎

In this section, we complete the proof of Safety for 7. First, 32 shows that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{willChkpBeJustified}}_{\varforvalattime@Val}} {{\mathrm{willChkpBeJustified}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\) from 7 ensures the same conclusion drawn by 13. Then, in 11 we provide a strengthening of the Safety Induction Requirements (9), that we call General Safety Induction Requirements. The proof is then concluded by 33 which shows how, by using the General Safety Induction Requirements and [lem:ffg-condition-on-q-implies-safety-changing-balances,lem:sufficient-condition-for-justification-changing-balances] from this section, the proofs of [lem:no-filtered-out-if-no-conflicting-checkpoints,lem:ffg-safety-from-sir,lem:no-filt-gj-prev-epoch,lem:no-filt-guj-two-epochs-ago,lem:base-case-current-epoch-for-safety-of-confirmation-ffg,lem:base-case-prev-epoch-for-safety-of-confirmation-ffg,lem:ffg-no-chaching-safety,lem:ffg-overall-safety] from 4 can be easily adapted to prove the Safety of 7.

Lemma 32. Given Assumptions  2 and 5, let \(t\geq\mathbb{GST}\) be any time, \(b\) be any block, \(e\) be any epoch, \(s\) be any slot such that \(\mathsf{epoch}(s) \geq \mathsf{epoch}(b)\), \(v\) be any honest validator. If

  1. \(\textstyle \begin{aligned}[t] & \setkeys{ffgvalsettoslotweight}{to=s-1,source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=\mathsf{epoch}(b)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t,val=v,weight chkp={\mathsf{C}(b,e)}} F_{\ffgvalsettoslotweight@Source \to \ffgvalsettoslotweight@Target}^{\ffgvalsettoslotweight@To, \ffgvalsettoslotweight@Val,\ffgvalsettoslotweight@Time,\ffgvalsettoslotweight@WeightChkp} + (1-\beta) \setkeys{valsetweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp={\mathsf{C}(b,e)}} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}} \geq\\ & \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}\frac{1+\rho-\epsilon\rho}{1-\pi} +\epsilon\right) + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right), \end{aligned}\)

  2. \(\mathsf{C}(b,e) \succeq \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) and

  3. all honest validators in slots \([s,\mathsf{last\_slot}(e)]\) GHOST vote for a block \(b'' \succeq b\) such that \(\mathsf{epoch}(b'') = \mathsf{epoch}(b)\),

then, for any block \(b' \succeq \mathsf{C}(b,e)\) and time \(t' \geq \mathsf{st}(e+1)\), \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source=,target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\).

Proof. Let \(C_b := \mathsf{C}(b,e)\) and \(\mathit{VS}_b := \setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\), \(t'\) be any time such that \(t' \geq \mathsf{st}(\mathsf{epoch}(b)+1)\), and \(b'\) be any block such that \(b' \succeq \mathsf{C}(b,e)\).

We can now proceed as follows to prove the Lemma. \[\begin{align} \setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source=\mathit{VS}_b,target={C_b},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} &\geq \setkeys{weightofset}{chkp=b'} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \right) \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- Given that t' \geq \mathsf{st}(e+1), by time t' every honest validator in slots [s,\mathsf{last\_slot}(e)] has \textsf{GHOST} voted for a block b'' \succeq b, which, by Property~\ref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} equates to an FFG vote for\setkeys{ffgvote}{from=\mathit{VS}_b, to=C_b} {\ffgvote@From}\to{\ffgvote@To} . To this, we add the validators whose \textsf{GHOST} votes have already been received at time t. } }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that t' \geq \mathsf{st}(e+1), by time t' every honest validator in slots [s,\mathsf{last\_slot}(e)] has \textsf{GHOST} voted for a block b'' \succeq b, which, by Property~\ref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} equates to an FFG vote for\setkeys{ffgvote}{from=\mathit{VS}_b, to=C_b} {\ffgvote@From}\to{\ffgvote@To} . To this, we add the validators whose \textsf{GHOST} votes have already been received at time t. \end{itemize} \end{minipage} } \\ &\geq \setkeys{weightofset}{chkp={C_b}} \left|{ \left( \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \right) \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} \right) \cap \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) && \ifthenelse{\equal{6cm}{}}{ \text{--- By Property~\ref{prop:changing-balances:penr}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By Property~\ref{prop:changing-balances:penr}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp={C_b}} \left|{ \left( \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \right) \cap \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \right) \setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) && \ifthenelse{\equal{6cm}{}}{ \text{--- As (A \setminus B) \cap C = (A \cap C)\setminus B.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As (A \setminus B) \cap C = (A \cap C)\setminus B. \end{itemize} \end{minipage} } \\ &\geq \left( \setkeys{weightofset}{chkp={C_b}} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } \right) \cap \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \\ &= \begin{aligned}[t] &\left( \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp}\right.\\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\right) \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \end{aligned} && \ifthenelse{\equal{6cm}{}}{ \text{--- As A \cap B = A \setminus (A \setminus B).} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As A \cap B = A \setminus (A \setminus B). \end{itemize} \end{minipage} } \\ &\geq \begin{align}[t] &\left( \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp}\right.\\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- As \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\right)\subseteq \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } .} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As \left( \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\right)\subseteq \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } . \end{itemize} \end{minipage} } \\ &= \begin{align}[t] &\left( \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{ffgvalsettoslot}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time} \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=s',to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} } }\right|^{\weightofset@Chkp}\right.\\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, due to Condition~\ref{itm:lem:sufficient-condition-for-justification-changing-balances:totvalset-commepoch} of the Lemma's statement and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } .} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to Condition~\ref{itm:lem:sufficient-condition-for-justification-changing-balances:totvalset-commepoch} of the Lemma's statement and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } . \end{itemize} \end{minipage} } \\ &\geq \begin{aligned}[t] &\left( \setkeys{ffgvalsettoslotweight}{to=s-1,source=\mathit{VS}_b,target=C_b,time=t,val=v,weight chkp=C_b} F_{\ffgvalsettoslotweight@Source \to \ffgvalsettoslotweight@Target}^{\ffgvalsettoslotweight@To, \ffgvalsettoslotweight@Val,\ffgvalsettoslotweight@Time,\ffgvalsettoslotweight@WeightChkp} + \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \right.\\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \end{aligned} \\ &\geq \begin{align}[t] &\left( \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}\frac{1+\rho-\epsilon\rho}{1-\pi} +\epsilon\right)\right.\\ &\quad + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\\ &\quad-(1-\beta) \setkeys{valsetweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}} + \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \right) (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying Condition~\ref{itm:lem:sufficient-condition-for-justification-changing-balances:f-cond} of the Lemma's statement.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying Condition~\ref{itm:lem:sufficient-condition-for-justification-changing-balances:f-cond} of the Lemma's statement. \end{itemize} \end{minipage} } \\ &\geq \begin{align}[t] &\left( \setkeys{totvalsetweight}{chkp={\mathsf{C}(b,e)}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}\frac{1+\rho-\epsilon\rho}{1-\pi} +\epsilon\right)\right.\\ \\ &\left.\quad- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} \right) (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- By \Cref{assum:beta},\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}\geq(1-\beta) \setkeys{valsetweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}}, and, by \Cref{assum:ffg-assumptions:max-slashing} and the fact that honest validators never get slashed, \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\geq \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{assum:beta},\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}\geq(1-\beta) \setkeys{valsetweightfromslot}{from=s',to=\mathsf{last\_slot}(e),chkp=C_b} \overline{{\addweight{\mathcal{W}}}}_{\valsetweightfromslot@From}^{\valsetweightfromslot@To,\valsetweightfromslot@ValsetChkp\ifthenelse{\equal{\valsetweightfromslot@WeightChkp}{}}{}{,\valsetweightfromslot@WeightChkp}}, and, by \Cref{assum:ffg-assumptions:max-slashing} and the fact that honest validators never get slashed, \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\geq \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp}. \end{itemize} \end{minipage} } \\ &= \begin{aligned}[t] & \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}(1+\rho-\epsilon\rho) +\epsilon(1-\pi)\right)\\ &- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) \end{aligned} && \ifthenelse{\equal{6cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &= \begin{align}[t] & \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}(1+\rho) +\epsilon\left(\frac{2}{3}-\frac{2}{3}+1-\pi-\frac{2}{3}\rho\right)\right)\\ &- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- Terms manipulation.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Terms manipulation. \end{itemize} \end{minipage} } \\ &= \begin{align}[t] & \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}(1+\rho+\epsilon) +\left(1-\pi-\frac{2}{3}(1+\rho)\right)\right)\\ &- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &= \begin{aligned}[t] & \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \left(\frac{2}{3}(1+\rho+\epsilon)\right.\\ &\qquad\;\;\;\left.+ \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}\left(1-\pi-\frac{2}{3}(1+\rho)\right)\right)\\ &- \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1-\pi) \end{aligned} && \ifthenelse{\equal{6cm}{}}{ \text{--- Due to Properties~\ref{prop:changing-balances:exitr}, \ref{prop:changing-balances:cond-on-exitr} and~\ref{prop:changing-balances:cond-on-penr-exitr-rewardr}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Due to Properties~\ref{prop:changing-balances:exitr}, \ref{prop:changing-balances:cond-on-exitr} and~\ref{prop:changing-balances:cond-on-penr-exitr-rewardr}. \end{itemize} \end{minipage} } \\ &= \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{2}{3}(1+\rho+\epsilon) - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} \frac{2}{3}(1+\rho) && \ifthenelse{\equal{6cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &= \frac{2}{3} \left(\left( \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} - \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp}\right) (1+\rho) + \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\right) && \ifthenelse{\equal{6cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \\ &= \frac{2}{3} \left( \setkeys{weightofset}{chkp={C_b}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} (1+\rho) + \setkeys{totvalsetweight}{chkp=C_b} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \epsilon\right) && \ifthenelse{\equal{6cm}{}}{ \text{--- As A \setminus (A \setminus B) = A \cap B.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As A \setminus (A \setminus B) = A \cap B. \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3} \left( \setkeys{weightofset}{chkp={b'}} \left|{ \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} + \setkeys{weightofset}{chkp={b'}} \left|{ \setkeys{totvalset}{chkp=b'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C_b} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} }\right|^{\weightofset@Chkp} \right) && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying Properties~\ref{prop:changing-balances:entry} and~\ref{prop:changing-balances:rewardr}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying Properties~\ref{prop:changing-balances:entry} and~\ref{prop:changing-balances:rewardr}. \end{itemize} \end{minipage} } \\ &= \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{6cm}{}}{ \text{--- Simplification.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Simplification. \end{itemize} \end{minipage} } \end{align}\]  ◻

Definition 11 (General Safety Induction Requirements (GSIR) for block \(b\), time \(t\) and checkpoint \(C\)).

  1. \(\begin{aligned}[t] &\land\; \setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafeFull}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,C,t) \\ &\land\; C \preceq b \\ &\land\; \mathsf{st}(\mathsf{slot}(t)-1)\geq \mathbb{GST}\\ &\land\;\mathsf{epoch}(b) = \mathsf{epoch}(t) \implies \mathsf{epoch}(C)=\mathsf{epoch}(t)-1\\ &\land\;\mathsf{epoch}(b) < \mathsf{epoch}(t) \implies \mathsf{epoch}(C)\geq\mathsf{epoch}(t)-2 \land t = \mathsf{st}(\mathsf{epoch}(t)) \end{aligned}\)

  2. Same as [def:induction-conditions:all-validators].

  3. Same as [def:induction-conditions:ub].

  4. Same as [def:induction-conditions:no-conflicting].

Lemma 33. Given Assumptions 2 and 5, let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\) and

  2. \(\mathit{isConfirmed}_v(b,t)\),

then \(b\) is always canonical in the view of all honest validators at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. Below we show that by

  1. referring to 7 rather than 5

  2. dropping 1

  3. replacing

    1. 9 with with 11

    2. 10 with 31

    3. 13 with 32

the proofs of [ lem:no-filtered-out-if-no-conflicting-checkpoints, lem:ffg-safety-from-sir, lem:no-filt-gj-prev-epoch, lem:no-filt-guj-two-epochs-ago, lem:base-case-current-epoch-for-safety-of-confirmation-ffg, lem:base-case-prev-epoch-for-safety-of-confirmation-ffg, lem:ffg-no-chaching-safety, lem:ffg-overall-safety ]{reference-type=“ref+Label” reference=” lem:no-filtered-out-if-no-conflicting-checkpoints, lem:ffg-safety-from-sir, lem:no-filt-gj-prev-epoch, lem:no-filt-guj-two-epochs-ago, lem:base-case-current-epoch-for-safety-of-confirmation-ffg, lem:base-case-prev-epoch-for-safety-of-confirmation-ffg, lem:ffg-no-chaching-safety, lem:ffg-overall-safety “} still holds.

11.

Not affected by the change.

12.

10 is used twice in the proof of this Lemma. Given that [def:general-induction-conditions:is-lmd-confirmed] is replaced with [def:general-induction-conditions:is-lmd-confirmed], it is then possible to apply 31 in place of 10 both times. Also, 13 is not used in the proof of this Lemma.

[lem:no-filt-gj-prev-epoch,lem:no-filt-guj-two-epochs-ago].

Unaffected.

16.

10 is used twice in the proof of this Lemma. In both cases we have that \(\mathsf{epoch}(t) = \mathsf{epoch}(b) \land \mathsf{epoch}(\mathsf{GJ}(b)) = \mathsf{epoch}(t)-1\). Hence, in both cases it is possible to apply 31.

13 is also used twice in the proof of this Lemma. Note that by following the reasoning outlined in the proof of 16, it is easy to show that for any time \(t'\) such that \(\mathsf{epoch}(t') \in \{\mathsf{epoch}(t),\mathsf{epoch}(t)+1\}\), \(\mathsf{C}(b) \succeq \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). Hence, in both cases, it is possible to apply 32 in place of 13 to reach the same conclusion.

The above also implies that [def:general-induction-conditions:is-lmd-confirmed] is satisfied.

17.

10 is used once in the proof of this Lemma. In the proof of this Lemma have that \(\mathsf{epoch}(b) < \mathsf{epoch}(t) \land \mathsf{epoch}(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b',time=t} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )) \geq \mathsf{epoch}(t)-2 \land t = \mathsf{st}(\mathsf{epoch}(t))\). Hence, it is possible to apply 31.

13 is also used once in the proof of this Lemma. Note that by following the reasoning outlined in the proof of 16, it is easy to show that for any time \(t'\) such that \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\), \(\mathsf{C}(b) \succeq \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). Hence, it is possible to apply 32 in place of 13 to reach the same conclusion.

The above also implies that [def:general-induction-conditions:is-lmd-confirmed] is satisfied.

[lem:ffg-no-chaching-safety,lem:ffg-overall-safety].

Unaffected.

 ◻

5.2 Monotonicity↩︎

While, as seen above, 7 ensures Safety without relying on 1 and it does not require any alternative assumption compared to 4, for Monotonicity we do need a slightly stronger assumption than the one used in 4, but we still do not rely on 1. This comes as effect of the stronger conditions used in 7 to cope with the consequences of validators entering, exiting, and accruing rewards and penalties.

Assumption 7.

  1. Given a block \(b\) and epoch \(e\geq\mathsf{epoch}(b)\) such that \(\mathsf{st}(e+1)\geq\mathbb{GST}\), if for any time \(t\) with \(\mathsf{epoch}(t) = e+1\) and honest validator \(v\),

    • \(b\) is canonical in the view of \(v\) at time \(t\), and

    • for any block \(b' \succeq \mathsf{C}(b,e)\) in the view of \(v\) we have that \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}\setminus \setkeys{slashedset}{chkp=b'} \mathcal{D}^{\slashedset@Chkp}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\),

    then, for any honest validator \(v\), there exists a checkpoint \(C\) such that

    1. \(\mathsf{epoch}(C) = e+1\),

    2. \(C \succeq b\),

    3. by time \(\mathsf{st}(\mathsf{last\_slot}(e+1))\), the view of validator \(v\) includes a block \(b'\) such that \(b'\succeq C \land \mathsf{epoch}(b') < e+2 \land C(b,e) \in \mathsf{AU}(b')\) and

    4. by time \(t' \geq \mathsf{st}(e+2)\), the view of validator \(v\) includes a set of FFG votes \(\setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=t',val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\) for checkpoint \(C\) such that \[\frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=t',val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \mathsf{honFFGratioVar}(\beta)\] where \[\mathsf{honFFGratioVar}(\beta) =\frac{1}{1-\beta}\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon+\beta\right)\]

  2. \(\beta < \min\left(\frac{1}{6},\frac{1}{3}-d\right)\)

As we will see, we also need to rely on the following rather strange looking property.

Property 4. If \(\beta < \frac{1}{6}\), then

\[\frac{p}{{E}}< \frac{2 (1-\pi)(1-\epsilon)}{(1+\rho)(1+\rho+\epsilon)} \left(\frac{(1-\epsilon)(1-\pi)}{1+\rho} \left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon+\beta - \frac{\epsilon}{(1-\epsilon)(1-\sigma) } \right) -\frac{\epsilon}{1-\epsilon} -\beta -\frac{1+\rho}{2(1-\pi)}\right)\]

Now, we are ready to proceed with the proof of Monotonicity. The core of the proof is presented in 35. This proof utilizes 34 which shows a lower bound on the effective-balance-weighted size of the validator set between two consecutive checkpoints.

Lemma 34. Let \(e\) be any epoch, and \(C_e\) and \(C_{e+1}\) be any two checkpoints such that \(C_{e+1} \succeq C_e \land \mathsf{epoch}(C_{e+1}) \leq \mathsf{epoch}(C_e)+ 1\). Then, \(\setkeys{totvalsetweight}{chkp=C_{e+1}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq \setkeys{totvalsetweight}{chkp=C_e} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)(1-\sigma)\).

Proof. \[\begin{align} \setkeys{totvalsetweight}{chkp=C_{e+1}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} &\geq \setkeys{weightofset}{chkp=C_{e+1}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} \\ &\geq \setkeys{weightofset}{chkp=C_{e}} \left|{ \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}(1-\sigma) && \ifthenelse{\equal{5cm}{}}{ \text{--- By Properties~\ref{prop:changing-balances:penr}, \ref{prop:changing-balances:slashing} and~\ref{prop:changing-balances:slashpenr-higher-than-penr}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By Properties~\ref{prop:changing-balances:penr}, \ref{prop:changing-balances:slashing} and~\ref{prop:changing-balances:slashpenr-higher-than-penr}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp=C_{e}} \left|{ \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus ( \setkeys{totvalset}{chkp=C_{e}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C_{e+1}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp})}\right|^{\weightofset@Chkp}(1-\pi) \\ &\geq \setkeys{totvalsetweight}{chkp=C_{e}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)(1-\sigma) && \ifthenelse{\equal{5cm}{}}{ \text{--- By \Cref{prop:changing-balances:exitr}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:changing-balances:exitr}. \end{itemize} \end{minipage} } \end{align}\]  ◻

Lemma 35. Given [assum:beta,assum:ffg-stronger-justification-changing-balances]. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\) and

  2. \(\mathrm{isConfirmed}_v(b,t)\),

then, for any \(t' \geq t\), \(\mathrm{isConfirmed}_v(b, t')\).

Proof. This proof is very similar to the proof of 21. The proof is by induction on \(t'\geq t\). We assume that the Lemma is satisfied for all times \(t_p<t'\) such that \(\mathsf{slot}(t')-1<\mathsf{slot}(t_p)\), and we show that the the Lemma also holds at any time \(t'\) as well. We proceed directly with the inductive argument as this is a total induction and therefore it does not necessitate of an analysis of the base case.

Given that we assume \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}} {{\mathrm{isConfirmed}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t_p)\), we know that there exists a block \(b_{t_p}\succeq b\) and a slot \(s_{t_p} \in [\mathsf{first\_slot}(\mathsf{epoch}(t_p)-1)+1,\mathsf{slot}(t_p)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b_{t_p},\mathsf{st}(s_{t_p}))\).

Now, let \(b' := \setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{epoch}(t')-1,t')\). Then, there exists a slot \(s' \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b',\mathsf{st}(s'))\).

Given that \(t_p \geq t\) and \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\), we can apply 33 to conclude that both \(b_{t_p}\) is canonical in the view of any honest validator starting from \(\mathsf{st}(s_{t_p})\), and that both \(b'\) and \(b'\) are canonical at time \(\mathsf{st}(\mathsf{slot}(t'))\).

Let us now proceed by cases keeping in mind that, by definition, \(\mathsf{epoch}(t') \in \{\mathsf{epoch}(t_p),\mathsf{epoch}(t_p)+1\}\).

Case 1: \(s_{t_p} \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This implies that \(\mathsf{slot}(b')\geq\mathsf{slot}(b_{t_p})\). Given that both blocks are canonical for any honest validator at time \(\mathsf{st}(\mathsf{slot}(t'))\), we can conclude that \(b\preceq b_{t_p}\preceq b'\).

Case 2: \(s_{t_p} \notin [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

By following the same reasoning used in the proof of the same case on 21, we can show that there exists a checkpoint \(C\) such that

  1. \(C \succeq b_{t_p}\)

  2. \(\mathsf{epoch}(C) = \mathsf{epoch}(t_p) = \mathsf{epoch}(t')-1\)

  3. by time \(\mathsf{st}(\mathsf{epoch}(t_p)+1) = \mathsf{st}(\mathsf{epoch}(t'))\), \(\displaystyle \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} > \mathsf{honFFGratio}(\beta)\),
    where \(\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )=\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=\mathsf{block}(C),time=\mathsf{epoch}(C)} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\)

  4. by time \(\mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(t_p))) = \mathsf{st}(\mathsf{last\_slot}(\mathsf{epoch}(t')-1))\) the view of validator \(v\) includes a block \(b''\) such that \(b''\succeq C \land \mathsf{epoch}(b'') < \mathsf{epoch}(t') \land \mathsf{C}(b_{t_p},\mathsf{epoch}(t_p)-1) \in \mathsf{AU}(b'')\).

Now we want to show that are satisfied for \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{block}(C),\mathsf{st}(\mathsf{slot}(t')))\) which, as shown in the proof of 21, is sufficient to conclude the proof.

Lines  and [ln:ffg-changing-balances:exists] to [ln:ffg-changing-balances:prev-epoch-vs-check].

Same as the proof for lines  and [ln:ffg:exists] to [ln:ffg:prev-epoch-vs-check] in 21.

[ln:ffg-changing-balances:call-will-chkp-be-justified-prev-epoch]

Note that \(C = (\mathsf{block}(C),\mathsf{epoch}(t')-1)\). Then proceed as follows. \[\begin{align} \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source=, target=C,time=\mathsf{st}(\mathsf{epoch}(t')),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}}\right|^{\weightofset@Chkp} &> \mathsf{honFFGratioVar}(\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- By applying condition 3 above.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying condition 3 above. \end{itemize} \end{minipage} } \\ &\geq \mathsf{honFFGratioVar}(\beta)(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- As\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq(1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &\geq \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon\right) + \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{7cm}{}}{ \text{--- By expanding \mathsf{honFFGratioVar}(\beta).} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item By expanding \mathsf{honFFGratioVar}(\beta). \end{itemize} \end{minipage} } \\ &\geq \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon\right) + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right) \\ &= \begin{aligned}[t] & \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon\right) + \min\left( W_e, \beta \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \right)\\ &- (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \end{aligned} && \ifthenelse{\equal{7cm}{}}{ \text{--- As, given that \mathsf{slot}(t')>\mathsf{last\_slot}(\mathsf{epoch}(b)),\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} =0.} }{ \begin{minipage}[t]{7cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, given that \mathsf{slot}(t')>\mathsf{last\_slot}(\mathsf{epoch}(b)),\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t'),to=\mathsf{last\_slot}(\mathsf{epoch}(C)),chkp=C} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} =0. \end{itemize} \end{minipage} } \end{align}\]

[ln:ffg-changing-balances:is-lmd-confimed-no-caching-prev-epoch].

To reduce that size of the expressions below, let \(e':= \mathsf{epoch}(t')\), \(e^{\mathit{tp}} := \mathsf{epoch}(t_p)\) and \(C_{\mathsf{vs}}:=\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b'',time=t'} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )\). Note also that the definition of \(\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (3), the conclusion reached in the case above, 32 and [prop:gasper-basic:highest-justified-not-from-current-epoch] imply that \(\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C\) and \(C_{\mathsf{vs}}\preceq C\).

Then, we can proceed as follows.

\[\begin{align} & \setkeys{indicatorfromblock}{from=b''',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={C_{\mathsf{vs}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=}\\ &= \frac{ \setkeys{attsetweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{S}}}_{\attsetweightfromblock@From}^{\attsetweightfromblock@To,\attsetweightfromblock@Val,\attsetweightfromblock@When,\attsetweightfromblock@ValSetChkp} \setkeys{attsetweightfromblock}{from=,to=,val=,when=,chkp=}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \\ &\geq \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{6cm}{}}{ \text{--- By \Cref{prop:gasper-basic:ffg-vote-for-c-ghost-vote-for-b-succ-c}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:gasper-basic:ffg-vote-for-c-ghost-vote-for-b-succ-c}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta).} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by Assumption~\ref{assum:beta},\setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp} \geq \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=s',chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}(1-\beta). \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{commweightatepoch}{epoch=,val=,when=,chkp=} \setkeys{commweightatepoch}{epoch=e^{\mathit{tp}},chkp=C_{\mathsf{vs}}} \hat{\overline{\addweight{\mathcal{J}}}}{}^{\commweightatepoch@Epoch, \ifthenelse{\equal{\commweightatepoch@Val}{}}{}{\commweightatepoch@Val,} \ifthenelse{\equal{\commweightatepoch@When}{}}{}{\commweightatepoch@When,} \commweightatepoch@Chkp } } (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- Given that {\mathsf{ps}^{+1}}(b''')\leq{\mathsf{ps}^{+1}}(b'')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that {\mathsf{ps}^{+1}}(b''')\leq{\mathsf{ps}^{+1}}(b'')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{J}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} } \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}} (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- As, due to \mathsf{epoch}(C)=e^{\mathit{tp}} and \Cref{prop:wt-we-link},\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{\mathit{tp}}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to \mathsf{epoch}(C)=e^{\mathit{tp}} and \Cref{prop:wt-we-link},\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{\mathit{tp}}} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C_{\mathsf{vs}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by definition,\setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}\leq \setkeys{totvalsetweight}{chkp=C_{\mathsf{vs}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{ \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}\leq \setkeys{totvalsetweight}{chkp=C_{\mathsf{vs}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}(1-\pi)(1-\epsilon)}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- As, due to \Cref{lem:lower-bound-tot-next-chkp},\\ \setkeys{totvalsetweight}{chkp=C_{\mathsf{vs}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\pi)(1-\epsilon)\leq \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to \Cref{lem:lower-bound-tot-next-chkp},\\ \setkeys{totvalsetweight}{chkp=C_{\mathsf{vs}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\pi)(1-\epsilon)\leq \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}(1-\pi)(1-\epsilon)}{(1+\rho) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- As, for a given set \mathcal{X},\\ \begin{aligned}[t] & \setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{\mathcal{X}}\right|^{\weightofset@Chkp}\\ &\geq \setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}\\ &\geq \frac{ \setkeys{weightofset}{chkp=C} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}}{1+\rho} && \ifthenelse{\equal{1cm}{}}{ \text{--- by \Cref{prop:changing-balances:rewardr}} }{ \begin{minipage}[t]{1cm} \begin{itemize}[label=---,nosep,left=0pt] \item by \Cref{prop:changing-balances:rewardr} \end{itemize} \end{minipage} } \\ &=\frac{ \setkeys{weightofset}{chkp=C} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}}{1+\rho} \end{aligned}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, for a given set \mathcal{X},\\ \begin{align}[t] & \setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{\mathcal{X}}\right|^{\weightofset@Chkp}\\ &\geq \setkeys{weightofset}{chkp=C_{\mathsf{vs}}} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}\\ &\geq \frac{ \setkeys{weightofset}{chkp=C} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}}{1+\rho} && \ifthenelse{\equal{1cm}{}}{ \text{--- by \Cref{prop:changing-balances:rewardr}} }{ \begin{minipage}[t]{1cm} \begin{itemize}[label=---,nosep,left=0pt] \item by \Cref{prop:changing-balances:rewardr} \end{itemize} \end{minipage} } \\ &=\frac{ \setkeys{weightofset}{chkp=C} \left|{\mathcal{X}\cap \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp}}{1+\rho} \end{align}. \end{itemize} \end{minipage} } \\ &\geq \frac{\left( \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}-\epsilon \setkeys{totvalset}{chkp=C_{\mathsf{vs}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\right)(1-\pi)(1-\epsilon)}{(1+\rho) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) \\ &\geq \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}-\epsilon\frac{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}}{(1-\epsilon)(1-\sigma) }}{(1+\rho) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\epsilon)(1-\pi)(1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- By \Cref{lem:lower-bound-tot-next-chkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{lem:lower-bound-tot-next-chkp}. \end{itemize} \end{minipage} } \\ &= \begin{align}[t] &\frac{(1-\epsilon)(1-\pi)}{1+\rho}\\ &\left(\frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) - \frac{\epsilon \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\beta)}{((1-\epsilon)(1-\sigma) ) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} \right) \end{align} \\ \\ &\geq \begin{aligned}[t] &\frac{(1-\epsilon)(1-\pi)}{1+\rho}\\ &\left(\frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}} (1-\beta) - \frac{\epsilon}{(1-\epsilon)(1-\sigma) } \right) \end{aligned} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, due to\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq (1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, due to\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \geq (1-\beta) \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &\geq \begin{align}[t] &\frac{(1-\epsilon)(1-\pi)}{1+\rho}\\ &\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon+\beta - \frac{\epsilon}{(1-\epsilon)(1-\sigma) } \right) \end{align} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by point iii above, \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}>\mathsf{honFFGratioVar}(\beta).} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by point iii above, \frac{ \setkeys{weightofset}{chkp=C} \left|{ \setkeys{ffgvalsetraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{chkp=C} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )}, target=C,time=\mathsf{st}(e'),val=v} \mathcal{F}_{\ffgvalsetraw@Source \to \ffgvalsetraw@Target}^{\ffgvalsetraw@Val,\ffgvalsetraw@Time}\cap\mathcal{J}}\right|^{\weightofset@Chkp}}{ \setkeys{totvalset}{chkp=C} {\mathcal{J}}_{\mathsf{t}}^{\totvalset@Chkp}}>\mathsf{honFFGratioVar}(\beta). \end{itemize} \end{minipage} } \\ &= \begin{align}[t] &\frac{(1-\epsilon)(1-\pi)}{1+\rho}\\ &\left(\frac{2}{3}\left(\frac{1+\rho-\epsilon\rho}{1-\pi}\right)+\epsilon+\beta - \frac{\epsilon}{(1-\epsilon)(1-\sigma) } \right) \\ &-\frac{\epsilon}{1-\epsilon} -\beta -\frac{1+\rho}{2(1-\pi)} +\frac{\epsilon}{1-\epsilon} +\beta +\frac{1+\rho}{2(1-\pi)} \end{align} \\ &> \begin{aligned}[t] &\frac{p(1+\rho)(1+\rho+\epsilon)}{{E}(1-\pi)(1-\epsilon)} +\frac{\epsilon}{1-\epsilon} +\beta +\frac{1+\rho}{2(1-\pi)} \end{aligned} && \ifthenelse{\equal{6cm}{}}{ \text{--- Due to \Cref{prop:ffg-stronger-justification-changing-balances:p-e}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Due to \Cref{prop:ffg-stronger-justification-changing-balances:p-e}. \end{itemize} \end{minipage} } \\ &= \frac{1+\rho}{2(1-\pi)}\left(1+ \frac{p(1+\rho+\epsilon)}{{E}(1-\epsilon)}\right) +\frac{\epsilon}{1-\epsilon} +\beta \\ &= \frac{1+\rho}{2(1-\pi)} \left(1+ \frac{ \setkeys{boostweight}{chkp={C_{\mathsf{vs}}}} W_p^{\boostweight@Chkp}(1+\rho+\epsilon)}{ \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)} \right) +\frac{ \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon}{ \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)} +\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by definition,\setkeys{boostweight}{chkp={C_{\mathsf{vs}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} .} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{boostweight}{chkp={C_{\mathsf{vs}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} . \end{itemize} \end{minipage} } \\ &\geq \frac{1+\rho}{2(1-\pi)} \left(1+ \frac{ \setkeys{boostweight}{chkp={C_{\mathsf{vs}}}} W_p^{\boostweight@Chkp}(1+\rho+\epsilon)}{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{tp}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}} \right) +\frac{ \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon}{ \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{tp}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}} +\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- \begin{align}[t] & \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)\\ &= \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}- \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon \\ &\geq \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}- \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{totvalset}{chkp={C_{\mathsf{vs}}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} && \ifthenelse{\equal{2cm}{}}{ \text{--- By \Cref{prop:changing-balances:exitr}.} }{ \begin{minipage}[t]{2cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:changing-balances:exitr}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{totvalset}{chkp={C_{\mathsf{vs}}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} \\ &\geq \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{tp}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{2cm}{}}{ \text{--- Due\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } .} }{ \begin{minipage}[t]{2cm} \begin{itemize}[label=---,nosep,left=0pt] \item Due\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } . \end{itemize} \end{minipage} } \end{align}} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item \begin{align}[t] & \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\epsilon)\\ &= \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}- \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon \\ &\geq \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}- \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{totvalset}{chkp={C_{\mathsf{vs}}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \setminus \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} && \ifthenelse{\equal{2cm}{}}{ \text{--- By \Cref{prop:changing-balances:exitr}.} }{ \begin{minipage}[t]{2cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:changing-balances:exitr}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{totvalset}{chkp={C_{\mathsf{vs}}}} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} \cap \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}}\right|^{\weightofset@Chkp} \\ &\geq \setkeys{weightofset}{chkp={C_{\mathsf{vs}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e^{tp}} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp} && \ifthenelse{\equal{2cm}{}}{ \text{--- Due\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } .} }{ \begin{minipage}[t]{2cm} \begin{itemize}[label=---,nosep,left=0pt] \item Due\setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\preceq C, \mathsf{epoch}(C)=\mathsf{epoch}(t_p) and \Cref{prop:wt-we-link},\setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp} = \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } . \end{itemize} \end{minipage} } \end{align} \end{itemize} \end{minipage} } \\ &= \frac{1+\rho}{2(1-\pi)} \left(1+ \frac{ \setkeys{boostweight}{chkp={C_{\mathsf{vs}}}} W_p^{\boostweight@Chkp}(1+\rho+\epsilon)}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \right) +\frac{ \setkeys{totvalsetweight}{chkp={C_{\mathsf{vs}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\epsilon}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b''',to=\mathsf{slot}(t')-1,chkp={C_{\mathsf{vs}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} +\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- Given that {\mathsf{ps}^{+1}}(b''')\leq{\mathsf{ps}^{+1}}(b'')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item Given that {\mathsf{ps}^{+1}}(b''')\leq{\mathsf{ps}^{+1}}(b'')<\mathsf{first\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{last\_slot}(\mathsf{epoch}(t_p))\leq\mathsf{slot}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=\mathsf{epoch}(t_p)} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } \subseteq \setkeys{commfromblock}{from=,to=,val=,when=} \setkeys{commfromblock}{from=b''',to=\mathsf{slot}(t')-1} {\mathcal{W}}_{\commfromblock@From}^{\commfromblock@To \ifthenelse{\equal{\commfromblock@Val}{}}{}{,\commfromblock@Val} \ifthenelse{\equal{\commfromblock@When}{}}{}{,\commfromblock@When} }. \end{itemize} \end{minipage} } \end{align}\]

 ◻

5.3 Confirmation Rule↩︎

We can now formally present 7 as a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Theorem 4. Let \(\mathit{sg}(b, t, \mathbb{GST}) = \mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1 \land \mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\). Given [assum:no-change-to-the-validator-set,assum:beta,assum:ffg-stronger-justification-changing-balances], the tuple \((\text{\Cref{alg:ffg-changing-balances}}, \mathit{sg})\) is a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Proof. Note that 7 implies 5. Hence, we can apply [lem:ffg-motonocity-changing-balances,lem:ffg-overall-safety-changing-balances] to conclude the proof. ◻

6 Conclusions and Future Work↩︎

In this paper, we have introduced a novel Confirmation Rule for the Ethereum’s Gasper protocol. Our approach begins by developing a foundational Confirmation Rule for LMD-GHOST, treated as an independent protocol.

Furthermore, we enhanced this Confirmation Rule by incorporating the effects of FFG-Casper, another key component of Gasper, which is responsible for the finality of blocks. The integrated Confirmation Rule for LMD-GHOST-HFC proposed in this work aims to achieve fast block confirmations while balancing the trade-off between confirmation speed and safety guarantees. Specifically, such a Confirmation Rule ensures both that if a block is confirmed at some point in time \(t\), then at any time after \(t_0 > t\) such block is part of the canonical chain on any validator (Safety), and that once a block is confirmed at a time \(t\), it remains confirmed for all future times \(t' > t\) (Monotonicity). Through the introduction of safety indicators \(Q_b^n\) and \(P_b^n\), we have formalized a method that not only accelerates block confirmation but also retains a measure of safety and monotonicity under adversarial conditions.

During this work, we made some assumptions. For instance, Assumption 2, assumes that within the combined committees of any sequential slots, which are weighted by the effective balance associated with any justified checkpoint, the proportion of distinct adversarial validators is limited to a fraction \(\beta\) of the total distinct validators. Future work may explore the probability that Assumption 2 holds true in order to gain another degree of reliability for the model we are working within.

Also, in Appendix 7, we analyze a variant of the Confirmation Rule introduced in Section [sec:conf-rule-ldmghosthfc] that, although less practical, requires an assumption much weaker than 6 (relied upon in Section [sec:conf-rule-ldmghosthfc]) to ensure Monotonicity. However, such Confirmation Rule, like the Confirmation Rule presented in [sec:conf-rule-ldmghosthfc], still relies on 1. Future work may investigate whether it is possible to design a Confirmation Rule that can dispense with both [assum:no-change-to-the-validator-set,assum:ffg-stronger-justification].

The Confirmation Rule proposed in this work could potentially serve as a standardized approach within the Gasper protocol for faster and more reliable block confirmations.

Acknowledgments↩︎

The authors thank Mikhail Kalinin, Thanh-Hai Tran and Potuz for interesting discussions and helpful feedback.

Figure 8: Confirmation Rule for LMD-GHOST-HFC

7 A Confirmation Rule for LMD-GHOST-HFC that does not rely on 6↩︎

In this section, we show that by dropping the limitation imposed in 4 on the accessibility of old FFG votes, we can design a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\) that does not require an assumption as strong as 6. Such Confirmation Rule is presented in 813.

Nevertheless, to ensure monotonicity, we still require a strengthening of 5. However, such an assumption which is presented below, is significantly weaker than 6.

Assumption 8.

  1. \(\beta < \min\left(\frac{1}{8}\left(5 - \sqrt{9+ 16\frac{p}{{E}}}^{\rule{0mm}{2mm}} \right),\frac{1}{3}-d\right)\)

  2. Given a block \(b\) and epoch \(e\geq\mathsf{epoch}(b)\) such that \(\mathsf{st}(e+1)\geq\mathbb{GST}\), if for any time \(t\) with \(\mathsf{epoch}(t) = e+1\) and honest validator \(v\),

    • \(b\) is canonical in the view of \(v\) at time \(t\),

    • for any block \(b' \succeq \mathsf{C}(b,e)\) in the view of \(v\) we have that \(\setkeys{weightofset}{chkp=b'} \left|{ \setkeys{ffgvalsetallsentraw}{source={\setkeys{votsource}{time=,blck=,chkp=} \setkeys{votsource}{blck=b,time=e} \mathsf{vs}( \ifthenelse{\equal{\votsource@Chkp}{}}{ \votsource@Blk,\votsource@Time }{ \votsource@Chkp} )},target={\mathsf{C}(b,e)},time=t'} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}}\right|^{\weightofset@Chkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp=b'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\)

    then, by time \(\mathsf{st}(\mathsf{last\_slot}(e+1))\), the view of validator \(v\) includes a block \(b'\) such that \(\mathsf{epoch}(b') < e+2 \land C(b,e) \in \mathsf{AU}(b')\).

By using the values of \(p\), \({E}\) and \(d\) as per the current implementation of Gasper [6], [assum:ffg-no-extra-assum:beta] requires that \(\beta \lessapprox 0.246\) which is a significantly weaker constraint than the one imposed by [assum:ffg-stronger-justification:beta]. [assum:ffg-no-extra-assum:justified-checkpoint-next-epoch] slightly strengthens [assum:ffg-assumptions:justified-checkpoint-next-epoch] by requiring that the block \(b'\) such that \(\mathsf{epoch}(b') < e+2 \land C(b,e) \in \mathsf{AU}(b')\) is in the view of all honest validators by one slot earlier than what stated in [assum:ffg-assumptions:justified-checkpoint-next-epoch], i.e., at the beginning of the last slot of epoch \(e+1\) rather than at the beginning of the first slot of epoch \(e+2\).

Let us now briefly discuss how 8 compares to 5 by starting with taking a look at the function \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}\). It is easy to see that differences are limited to the case \(\mathsf{epoch}(b) < \mathsf{epoch}(t)\). By comparing of 8 to of 5, we can see that, overall, 8 imposes stronger conditions. Specifically, 8 requires \(\mathsf{C}(b)\) to be justified rather than just requiring, like in 5, that there exists a block descendant of \(b\) such that the epoch of the voting source of this block is no older than two epochs. While it is quite clear that this ensures Safety, one may ask how stronger conditions can ensure Monotonicity as well. In 5, due to the limitations imposed on the FFG votes that we can access, to ensure monotonicity, we must ensure that by the beginning of epoch \(\mathsf{epoch}(b)+2\), there exists a block descendant of \(b\) that is confirmed. This is a property that we could not find how to guarantee without having to rely on extra assumptions (6). However, we wanted to rely on assumptions that are as weak as we could possibly find. To do so, we also had to find conditions for ensuring Safety that are also as weak as we could possibly find.

However, it turns out that if one can access any FFG vote received by a validator, then using stronger conditions for confirmation is possible and also leads to a simpler algorithm. From 3.2, we know that to ensure monotonicity for the LMD-GHOST safety condition, we need to “force” a block \(b\) to be confirmed until the beginning of epoch \(\mathsf{epoch}(b)+2\). For the case \(\mathsf{epoch}(b) = \mathsf{epoch}(t)\), then, thanks to \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{willChkpBeJustified}}_{\varforvalattime@Val}} {{\mathrm{willChkpBeJustified}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,\mathsf{epoch}(t),t)\) and [assum:ffg-assumptions:justified-checkpoint-next-epoch], which is already required for Safety, by the beginning of epoch \(\mathsf{epoch}(b)+2\), any honest validator has in their view a block from epoch \(\mathsf{epoch}(b)+1\) that justifies \(\mathsf{C}(b)\). Then, this allows us to require that such a condition must be satisfied in order to confirm blocks from an epoch before epoch \(\mathsf{epoch}(t)\).

Because in 8 monotonicity does not predicate on eventually finding a descendant that is confirmed, compared to 5, 8 needs to ensure Safety also for blocks from an epoch lower than \(\mathsf{epoch}(t)-1\). This is the case when we need to access FFG votes for epochs older than the previous epoch. Specially, ensure that no checkpoint conflicting with \(\mathsf{C}(b)\) for epoch \(\mathsf{epoch}(\mathsf{C}(b))\) or greater can ever be justified.

Before proceeding with the analysis, we introduce some additional properties ensured by Gasper that we rely on in the remainder of this section.

Property 5.

  1. If \(\beta < \frac{1}{3}-d\), then no two conflicting checkpoints can ever be finalized, i.e., for any two honest validators \(v'\) and \(v'\), and any two times \(t\) and \(t'\), \(\setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \preceq \setkeys{finattime}{time=t',val=v'} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \lor \setkeys{finattime}{time=t',val=v'} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \preceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

  2. For any time \(t\), honest validator \(v\), epoch \(e\) such that \(\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})\leq e \leq \mathsf{epoch}(t)\), there exists a checkpoint \(C\) such that \(C \succeq \setkeys{finattime}{val=v,time=t} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \land \mathsf{epoch}(C) = e \land \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\).

  3. For any \(e_d\geq 0\), there exists a computable value \(\mathit{f}^{\beta,e_d}\) such that

    1. Provided that \(\beta < \frac{1}{3}-d\), for any time \(t\), any valid block \(b\succeq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\), let \(\overset{T}{S}{}_{\to e_d \succeq\mathsf{C}(b,e)}^{t}\) be the set of validators that have sent an FFG vote targeting any checkpoint for epoch \(\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})+e_d\leq\mathsf{epoch}(t)\) and descendant of \(b\), i.e., \(\overset{T}{S}{}_{\to e_d \succeq\mathsf{C}(b,e)}^{t} = \bigcup_{C \succeq b \land \mathsf{epoch}(C) = \mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})+e_d}{ \setkeys{ffgvalsetallsentraw}{source=,target=C,time=t} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}}\). If \(\setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{S}\right|^{\weightofset@Chkp} \geq \frac{2}{3}\mathit{f}^{\beta,e_d} \setkeys{totvalsetweight}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\), then no checkpoint \(C\nsucceq \mathsf{C}(b)\) such that \(\mathsf{epoch}(C)=\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})+e_d\) can ever be justified.

    2. for any two valid checkpoints \(C\) and \(C'\) such that \(C' \succeq C \land \mathsf{epoch}(C') = \mathsf{epoch}(C)+e_d\), then \(\setkeys{totvalsetweight}{chkp=C'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq\mathit{f}^{\beta,e_d} \setkeys{totvalsetweight}{chkp=C} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\)

7.1 Safety↩︎

As usual, we start by proving that the Confirmation Rule presented in 8 ensures the Safety property of Confirmation Rules for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Note that for the case \(\mathsf{epoch}(b) = \mathsf{epoch}(t)\) we can simply refer to the proofs of Safety for 5. For the case \(\mathsf{epoch}(b) < \mathsf{epoch}(t)\), the core reasoning is carried out in the proofs of [lem:ffg-no-extra-assum-no-conflicting,lem:ffg-no-extra-assum-old-epoch-safety]. Following this, [lem:ffg-no-extra-assum-no-chaching-safety,lem:ffg-no-extra-assum-safety] just draw the final conclusion.

Lemma 36. Given 2. For any block \(b\), honest validator \(v\), time \(t\) and epoch \(e\), if

  1. \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\),

  2. \(b \succeq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\),

  3. \(e\geq\mathsf{epoch}(b)\),

  4. \(b\) is canonical in the view of any honest validator in the entire time interval \([\mathsf{st}(\mathsf{slot}(t)),\mathsf{st}(e+1))\) and

  5. \(\setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{\bigcup_{C \succeq b \land epoch(C) = e} \setkeys{ffgvalsettoslot}{to=\mathsf{slot}(t)-1,source=,target=C,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time}}\right|^{\weightofset@Chkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \geq \frac{2}{3}\mathit{f}^{\beta,e-\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})} \setkeys{totvalsetweight}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\),

then no checkpoint \(C\) such that \(C\) conflicts with \(b\) and \(\mathsf{epoch}(C) = e\) can ever be justified.

Proof. Let \(\mathcal{X}^t := \bigcup_{C \succeq b \land epoch(C) = e} \setkeys{ffgvalsettoslot}{to=\mathsf{slot}(t)-1,source=,target=C,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time}\) and \(\mathcal{X}^{\mathsf{st}(e+1)} := \mathcal{X}^t \sqcup \setkeys{commfromslot}{from=,to=,val=,when=} \setkeys{commfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e)} \overline{\mathcal{J}}_{\commfromslot@From}^{\commfromslot@To \ifthenelse{\equal{\commfromslot@Val}{}}{}{,\commfromslot@Val} \ifthenelse{\equal{\commfromslot@When}{}}{}{,\commfromslot@When} }\). Now proceed as follows.

\[\begin{align} \setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{ \setkeys{ffgvalsetallsentraw}{target=C,time=\mathsf{st}(e+1)} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}}\right|^{\weightofset@Chkp} &\geq \setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{\mathcal{X}^{\mathsf{st}(e+1)}}\right|^{\weightofset@Chkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- Condition 3 of the Lemma's statement and \Cref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} imply that \mathcal{X}^{\mathsf{st}(e+1)} \subseteq \setkeys{ffgvalsetallsentraw}{target=C,time=\mathsf{st}(e+1)} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item Condition 3 of the Lemma's statement and \Cref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} imply that \mathcal{X}^{\mathsf{st}(e+1)} \subseteq \setkeys{ffgvalsetallsentraw}{target=C,time=\mathsf{st}(e+1)} \overset{T}{\mathcal{F}}{}_{\ffgvalsetallsentraw@Source \to \ffgvalsetallsentraw@Target}^{\ffgvalsetallsentraw@Time}. \end{itemize} \end{minipage} } \\ &= \setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{\mathcal{X}^{t}}\right|^{\weightofset@Chkp} + \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \\ &\geq \setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{\mathcal{X}^{t}}\right|^{\weightofset@Chkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By \Cref{assum:beta}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{assum:beta}. \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3}\mathit{f}^{\beta,e-\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})} \setkeys{totvalsetweight}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By applying condition 5 of the Lemma's statement.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying condition 5 of the Lemma's statement. \end{itemize} \end{minipage} } \end{align}\] We can now apply [prop:xxx] to conclude the proof. ◻

Lemma 37. Given Assumptions 1, 2 and 5. Let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{slot}(t)-1) \geq \mathbb{GST}\),

  2. \(\mathsf{epoch}(b) < \mathsf{epoch}(t)\) and

  3. \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,t)\),

then \(b\) is canonical in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. First, we proceed by induction on \(t' \geq \mathsf{st}(\mathsf{slot}(t))\) to show that all of the following inductive conditions hold

  1. there exists no justified checkpoint for an epoch in \([\mathsf{epoch}(\mathsf{C}(b)), \mathsf{epoch}(t')]\) conflicting with \(b\).

  2. for any honest validator \(v''\) and time \(t''\) such that \(\mathsf{st}(\mathsf{slot}(t)) \leq t'' < t'\)

    1. \(b \in \setkeys{filtered}{val=v'',time=t''} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\)

    2. \(\setkeys{chkpattime}{time=t'',val=v''} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq \mathsf{C}(b)\)

Let \(v'\) be any honest validator. In particular, by abuse of notation, in the below, we allow \(v'\) to refer to different honest validators every time that it is used. This is to avoid instantiating many different variables for honest validators.

Base Case: \(\mathsf{epoch}(t')= \mathsf{epoch}(t)-1\).

In this case, we just need to prove inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1] as inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond2] is vacuously true. Due to [ln:alg:ffg-no-extra-assum:old-epoch-exists] [ln:alg:ffg-no-extra-assum:old-epoch-cb-in-aub-prime], and Property [prop:gasper-basic:only-one-justified-per-epoch], we can conclude that no checkpoint for epoch \(\mathsf{epoch}(\mathsf{C}(b))\) conflicting with \(b\) could ever be justified. From this, due to [ln:alg:ffg-no-extra-assum:old-epoch-prec-fin] [ln:alg:ffg-no-extra-assum:old-epoch-ffg-check] [ln:alg:ffg-no-extra-assum:old-epoch-forall-e], we can apply 36 to conclude that no checkpoint for epochs in \([\mathsf{epoch}(\mathsf{C}(b)),\mathsf{epoch}(t)]\) conflicting with \(b\) could ever be justified proving inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1].

Inductive Step: \(\mathsf{epoch}(t') \geq \mathsf{epoch}(t)\).

Let \(b'\) be any block \(b' \succeq b\) that satisfies lines [ln:alg:ffg-no-extra-assum:old-epoch-b-prime-succ-b] to [ln:alg:ffg-no-extra-assum:old-epoch-b-prime-less-than-t]. Given that \(b' \in \setkeys{viewattime}{val=v,time=\mathsf{st}(\mathsf{slot}(t)-1)} \mathcal{V}^{\viewattime@Val,\viewattime@Time}\) and that we assume \(\mathsf{st}(\mathsf{slot}(t)-1)\geq\mathbb{GST}\), \(b'\) is in the view of any honest validator at time \(t'\). This implies that \(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\geq\mathsf{epoch}(\mathsf{C}(b))\). Because of the above and inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1], we can apply 11 to conclude that \(b \in \setkeys{filtered}{time=t',val=v'} \mathsf{filt}_{\mathsf{hfc}}^{\filtered@Time\ifthenelse{\equal{\filtered@Val}{}}{}{,\filtered@Val}}\), i.e., \(b\) does not get filtered out by any honest validator at time time \(t'\) which proves inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond21] for \(t'\).

Also, inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1], \(\mathsf{epoch}( \setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})\geq\mathsf{epoch}(\mathsf{C}(b))\), Property [prop:gasper-basic:highest-justified-not-from-current-epoch] and the definition of \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\) (Definition 3) imply that \(\setkeys{chkpattime}{time=t',val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}} \succeq C(b)\) which proves inductive condition [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond22] for \(t'\).

Hence, we are left with having to prove hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1] for epoch \(\mathsf{epoch}(t')\). To do so we proceed by cases.

Case \(\mathsf{epoch}(t') > \mathsf{epoch}(t)\).

Given that we have proven above that inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond2] holds at time \(t'\), due to line [ln:alg:ffg-no-extra-assum:lmd-safe], we can apply Lemma 10 to conclude that \(b\) is always canonical in the view of all honest validators at any time during epoch \(\mathsf{epoch}(t')\). Properties [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] and [prop:gasper-basic:no-conflicting-if-all-honest-votes-in-support-of-b] immediately imply that no checkpoint conflicting with \(b\) can be justified in epoch \(\mathsf{epoch}(t')\), which concludes the proof for the inductive hypothesis [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond1].

Case \(\mathsf{epoch}(t') = \mathsf{epoch}(t)\).

The proof for this case is already given in the proof of the base case.

Given that we have just established that inductive condition [itm:lem:ffg-no-extra-assum-old-epoch-safety:cond2] holds for any time \(t' \geq \mathsf{st}(\mathsf{slot}(t))\), due to line [ln:alg:ffg-no-extra-assum:lmd-safe] we can apply Lemma 10 to complete the proof. ◻

Lemma 38. Given Assumptions 1, 2 and 5, let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\) and

  2. \(\mathit{isConfirmedNoChaching}_v(b,t)\),

then \(b\) is always canonical in the view of all honest validators at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Proof. If \(\mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1\), then proof of 18 suffices. If \(\mathsf{epoch}(b) < \mathsf{epoch}(t)-1\), then we can apply 37. ◻

Lemma 39. Assumptions 1, 2 and 5, let \(v\) be any honest validator, \(t\) be any time and \(b\) be any block. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\) and

  2. \(\mathit{isConfirmed}_v(b,t)\),

then \(b\) is always canonical in the view of all honest validators at time \(\mathsf{st}(\mathsf{slot}(t)+1)\) and thereafter.

Proof. Let us proceed by cases.

Case 1: \(b \preceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

Let \(v'\) be any honest validator. Given that \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\), Properties [prop:gasper-basic:finalization] and [prop:gasper-basic:just-succ-finalization] imply that \(b \preceq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t)+1),val=v'} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\preceq \setkeys{chkpattime}{time=\mathsf{st}(\mathsf{slot}(t)+1),val=v'} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\). Hence, given the definition of LMD-GHOST-HFC(3), \(b\) is canonical in the view of any honest validator at time \(\mathsf{st}(\mathsf{slot}(t))\) and thereafter.

Case 2: \(b \npreceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

Same as the proof of Lemma 19 by replacing 18 with 38.

 ◻

7.2 Monotonicity↩︎

We start the analysis of the Monotonicity property with 40, which is analogous of 8 but relies on [assum:ffg-no-extra-assum:beta] rather than on 3, to show that if a block is canonical for an entire epoch, then the LMD-GHOST safety indicator is guaranteed to be satisfied. Thereafter, 41 shows that the condition at [ln:alg:ffg-no-extra-assum:old-epoch-forall-e] [ln:alg:ffg-no-extra-assum:old-epoch-ffg-check] is satisfied as long as \(b\) is canonical from the beginning of epoch \(\mathsf{epoch}(b)+1\) until the beginning of slot \(\mathsf{slot}(t)\). Finally, 42 pulls all of the above together by showing that if either [ln:alg:ffg-no-extra-assum:prec-fin] or [ln:alg:ffg-no-extra-assum:prec-highest-confirmed] is satisfied, then \(b\) must have been canonical since the beginning of epoch \(\mathsf{epoch}(b)+1\).

Lemma 40. Given [assum:no-change-to-the-validator-set,assum:beta,assum:ffg-no-extra-assum,assum:beta-lmd-monotonicity], if

  1. \(b\) is canonical in the view of any honest validator at any time during epoch \(e\) and

  2. \(\mathsf{st}(\mathsf{epoch}(e)) \geq \mathbb{GST}\),

then, for any time \(t' \geq \mathsf{st}(e+1)\), \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathit{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b, \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}},t')\)

Proof. First, we want to prove that 8 implies \(\beta < \frac{1}{4}\left(1-\frac{p}{{E}(1-\beta)}\right)\). To do so we proceed as follows. \[\begin{align} \frac{1}{4}\left(1-\frac{p}{{E}(1-\beta)}\right) &> \frac{1}{4} \left(1- \frac{p}{\frac{{E}}{8}\left(3+\sqrt{9+ 16\frac{p}{{E}}}\right)}\right) && \ifthenelse{\equal{5cm}{}}{ \text{--- By applying \Cref{assum:ffg-no-extra-assum:beta} to 1-\beta.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying \Cref{assum:ffg-no-extra-assum:beta} to 1-\beta. \end{itemize} \end{minipage} } \\ &= \frac{1}{4} \left(1- \frac{p\left(3-\sqrt{9+ 16\frac{p}{{E}}}\right)}{\frac{{E}}{8}\left(9-{\frac{9{E}+ 16p}{{E}}}\right)}\right) \\ &= \frac{1}{4} \left(1+ \frac{3-\sqrt{9+ 16\frac{p}{{E}}}}{2}\right) \\ &= \frac{1}{8}\left(5 - \sqrt{9+ 16\frac{p}{{E}}}\right) \\ &> \beta \end{align}\]

Now, let \(t'\) be any time \(t' \geq \mathsf{st}(e+1)\). Given that, as described in Section 2.2.2, honest validators always GHOST vote for the block returned by the fork-choice function executed at the time of voting, then any honest validator in the committees of epoch \(e\) GHOST votes in support of \(b\). Note that as per 1, honest validators only GHOST vote in support of blocks that are from previous slots. Therefore, \(\mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1\). Hence, we can proceed as follows.

\[\begin{align} \setkeys{indicatorfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {{{\mathit{Q}}}}_{\indicatorfromblock@From}^{\indicatorfromblock@To,\indicatorfromblock@Val,\indicatorfromblock@When,\indicatorfromblock@ValSetChkp} \setkeys{indicatorfromblock}{from=,to=,val=,when=,chkp=} &= \frac{ \setkeys{attsetfromblock}{from=b',to=\mathsf{slot}(t')-1,val=v,when=t',chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\mathcal{S}}_{\attsetfromblock@From}^{\attsetfromblock@To,\attsetfromblock@Val,\attsetfromblock@When,\attsetfromblock@ValSetChkp} }{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} \\ &\geq \frac{ \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, all honest validators \textsf{GHOST} vote in support of b' during epoch e.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, all honest validators \textsf{GHOST} vote in support of b' during epoch e. \end{itemize} \end{minipage} } \\ &= \frac{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{J}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}} && \ifthenelse{\equal{6cm}{}}{ \text{--- As, given \Cref{assum:no-change-to-the-validator-set} and that \mathsf{slot}(b)<\mathsf{epoch}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }includes all of the honest validators in any possible committee.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, given \Cref{assum:no-change-to-the-validator-set} and that \mathsf{slot}(b)<\mathsf{epoch}(t')-1,\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{J}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} }includes all of the honest validators in any possible committee. \end{itemize} \end{minipage} } \\ &\geq (1-\beta) && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying Assumption~\ref{assum:beta}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying Assumption~\ref{assum:beta}. \end{itemize} \end{minipage} } \\ &= (1-2\beta+\beta) \\ &> \frac{1}{2} \left( 1+ \frac{p}{{E}(1-\beta)} \right) + \beta && \ifthenelse{\equal{6cm}{}}{ \text{--- By applying the condition \beta < \frac{1}{4}\left(1-\frac{p}{{E}(1-\beta)}\right), from Assumption~\ref{assum:beta-lmd-monotonicity}, to 2\beta.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item By applying the condition \beta < \frac{1}{4}\left(1-\frac{p}{{E}(1-\beta)}\right), from Assumption~\ref{assum:beta-lmd-monotonicity}, to 2\beta. \end{itemize} \end{minipage} } \\ &= \frac{1}{2} \left(1+ \frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}(1-\beta)}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by definition,\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} .} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by definition,\setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp} = \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} \frac{p}{{E}} . \end{itemize} \end{minipage} } \\ &\geq \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As, by \Cref{assum:beta,assum:no-change-to-the-validator-set},\setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}\geq \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq (1-\beta) \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq (1-\beta) \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As, by \Cref{assum:beta,assum:no-change-to-the-validator-set},\setkeys{weightofset}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \left|{ \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } }\right|^{\weightofset@Chkp}\geq \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{J}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq (1-\beta) \setkeys{totvalsetweight}{chkp={b_{\texttt{gen}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\geq (1-\beta) \setkeys{totvalsetweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}. \end{itemize} \end{minipage} } \\ &= \frac{1}{2}\left(1+\frac{ \setkeys{boostweight}{chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} W_p^{\boostweight@Chkp}}{ \setkeys{commweightfromblock}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromblock}{from=b',to=\mathsf{slot}(t')-1,chkp={ \setkeys{chkpattime}{time=t',val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}}} \addweight{\mathcal{W}}_{\commweightfromblock@From}^{\commweightfromblock@To, \ifthenelse{\equal{\commweightfromblock@Val}{}}{}{\commweightfromblock@Val,} \ifthenelse{\equal{\commweightfromblock@When}{}}{}{\commweightfromblock@When,} \commweightfromblock@ValSetChkp}}\right)+\beta && \ifthenelse{\equal{6cm}{}}{ \text{--- As \mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1.} }{ \begin{minipage}[t]{6cm} \begin{itemize}[label=---,nosep,left=0pt] \item As \mathsf{slot}(b) < \mathsf{st}(e)\leq \mathsf{epoch}(t')-1. \end{itemize} \end{minipage} } \end{align}\] ◻

Lemma 41. Given [assum:beta,assum:no-change-to-the-validator-set]. For any block \(b\), honest validator \(v\) and epoch \(e\), if

  1. \(\mathsf{st}(e)\geq\mathbb{GST}\) and

  2. \(b\) is canonical in the view of any honest validator in the entire time interval \([\mathsf{st}(e),\mathsf{st}(\mathsf{slot}(t)))\),

then \(\setkeys{weightofset}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \left|{\bigcup_{C \succeq b \land epoch(C) = e} \setkeys{ffgvalsettoslot}{to=\mathsf{slot}(t)-1,source=,target=C,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time}}\right|^{\weightofset@Chkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} \geq \frac{2}{3} \setkeys{totvalsetweight}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp}\)

Proof. Let \(\mathcal{X}:= \bigcup_{C \succeq b \land epoch(C) = e} \setkeys{ffgvalsettoslot}{to=\mathsf{slot}(t)-1,source=,target=C,time=t,val=v} \mathcal{F}_{\ffgvalsettoslot@Source \to \ffgvalsettoslot@Target}^{\ffgvalsettoslot@To,\ffgvalsettoslot@Val,\ffgvalsettoslot@Time}\). Also, by [prop:wt-we-link-2], let \(C'\) be the checkpoint such that \(C' \succeq \setkeys{finattime}{val=v,time=t} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \land \mathsf{epoch}(C') = e \land \setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}\). \[\begin{align} \setkeys{weightofset}{chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \left|{\mathcal{X}}\right|^{\weightofset@Chkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} &\geq \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{first\_slot}(e),to=\mathsf{slot}(t)-1,chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- \Cref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} and condition 1 of the Lemma's statement imply that\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{first\_slot}(e),to=\mathsf{slot}(t)-1,chkp={\mathsf{C}(b)}} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}\subseteq \mathcal{X}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item \Cref{prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb} and condition 1 of the Lemma's statement imply that\setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{first\_slot}(e),to=\mathsf{slot}(t)-1,chkp={\mathsf{C}(b)}} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp}\subseteq \mathcal{X}. \end{itemize} \end{minipage} } \\ &= \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{first\_slot}(e),to=\mathsf{slot}(t)-1,chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{J}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By \Cref{assum:no-change-to-the-validator-set}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{assum:no-change-to-the-validator-set}. \end{itemize} \end{minipage} } \\ &\geq (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{first\_slot}(e),to=\mathsf{slot}(t)-1,chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} + (1-\beta) \setkeys{commweightfromslot}{from=,to=,chkp=,when=,val=} \setkeys{commweightfromslot}{from=\mathsf{slot}(t),to=\mathsf{last\_slot}(e),chkp={{ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}}} \overline{{\addweight{\mathcal{W}}}}_{\commweightfromslot@From}^{\commweightfromslot@To, \ifthenelse{\equal{\commweightfromslot@Val}{}}{}{\commweightfromslot@Val,} \ifthenelse{\equal{\commweightfromslot@When}{}}{}{\commweightfromslot@When,} \commweightfromslot@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By \Cref{assum:beta}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{assum:beta}. \end{itemize} \end{minipage} } \\ &\geq (1-\beta) \setkeys{commweightatepoch}{epoch=,val=,when=,chkp=} \setkeys{commweightatepoch}{epoch=e,chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} \hat{\overline{\addweight{\mathcal{W}}}}{}^{\commweightatepoch@Epoch, \ifthenelse{\equal{\commweightatepoch@Val}{}}{}{\commweightatepoch@Val,} \ifthenelse{\equal{\commweightatepoch@When}{}}{}{\commweightatepoch@When,} \commweightatepoch@Chkp } \\ &\geq (1-\beta) \setkeys{totvalsetweight}{chkp=C'} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- As above we have established that\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item As above we have established that\setkeys{commatepoch}{epoch=,val=,when=} \setkeys{commatepoch}{epoch=e} {\hat{\overline{\mathcal{W}}}}{}^{\commatepoch@Epoch \ifthenelse{\equal{\commatepoch@Val}{}}{}{,\commatepoch@Val} \ifthenelse{\equal{\commatepoch@When}{}}{}{,\commatepoch@When} } = \setkeys{totvalset}{chkp=C'} {\mathcal{W}}_{\mathsf{t}}^{\totvalset@Chkp}. \end{itemize} \end{minipage} } \\ &\geq \frac{2}{3}\mathit{f}^{\beta,e-\mathsf{epoch}( \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})} \setkeys{totvalsetweight}{chkp={ \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}}} {\addweight{\mathcal{W}}}_{\mathsf{t}}^{\totvalsetweight@ValsetChkp} && \ifthenelse{\equal{5cm}{}}{ \text{--- By \Cref{prop:xxx}.} }{ \begin{minipage}[t]{5cm} \begin{itemize}[label=---,nosep,left=0pt] \item By \Cref{prop:xxx}. \end{itemize} \end{minipage} } \end{align}\]  ◻

Lemma 42. Given Assumptions 1, 2 and 8. If

  1. \(\mathsf{st}(\mathsf{epoch}(t)-1) \geq \mathbb{GST}\),

  2. \(\mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1\) and

  3. \(\mathrm{isConfirmed}_v(b,t)\),

then, for any \(t' \geq t\), \(\mathrm{isConfirmed}_v(b, t')\).

Proof. Let us proceed by cases.

Case 1: \(b \preceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

Given that \(\mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\), Property [prop:gasper-basic:finalization] implies that \(b \preceq \setkeys{finattime}{time=t',val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Hence, \(\mathrm{isConfirmed}_v(b, t')\).

Case 2: \(b \npreceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \land b \preceq \setkeys{finattime}{time=t',val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

Obvious.

Case 3: \(b \npreceq \setkeys{finattime}{time=t,val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \land b \npreceq \setkeys{finattime}{time=t',val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

The condition \(\mathrm{isConfirmed}_v(b,t)\) implies that there exists a slot \(s \in [\mathsf{first\_slot}(epoch(t)-1)+1,\mathsf{slot}(t)]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,\mathsf{st}(s))\). Given that \(\mathsf{st}(s-1)\geq\mathsf{st}(\mathsf{epoch}(t)-1)\geq\mathbb{GST}\), 38 implies that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(s)\) and thereafter.

Now, let \(b' := \setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}} {{\mathrm{highestConfirmedSinceEpoch}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(\mathsf{epoch}(t')-1,t')\). Then, there exists a slot \(s' \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\) such that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoCaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b',\mathsf{st}(s'))\). Thanks to 38, this also implies that \(b'\) is canonical for any honest validator at time \(\mathsf{st}(\mathsf{slot}(t'))\).

We can now proceed by cases.

Case 3.1: \(s \in [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This implies that \(\mathsf{slot}(b')\geq\mathsf{slot}(b)\). Given that \(b'\) is also canonical at time \(t'\), we can conclude that \(b\preceq b'\).

Case 3.2: \(s \notin [\mathsf{first\_slot}(\mathsf{epoch}(t')-1)+1,\mathsf{slot}(t')]\).

This case implies that \(\mathsf{st}(s)\leq\mathsf{st}(\mathsf{epoch}(t')-1)\). Also, given that \(\mathsf{slot}(b)<s\), this further implies that \(\mathsf{epoch}(b) < \mathsf{epoch}(t')-1\). Hence, given that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(s)\) and thereafter, this further implies that \(b\) has been canonical in the view of any honest validator for the entirety of any epoch \(e\) such that \(\min(\mathsf{epoch}(t)+1,\mathsf{epoch}(t')-1)\leq e \leq \mathsf{epoch}(t')-1\).

Now we show that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,\mathsf{st}(\mathsf{slot}(t')))\) is True. Given that \(\mathsf{epoch}(b) < \mathsf{epoch}(t')\), this amounts to proving that are satisfied.

[ln:alg:ffg-no-extra-assum:lmd-safe].

Given that reasoning above, we can apply 40 to conclude that \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}} {{\mathrm{isLMDGHOSTSafe}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,\mathsf{C}(b),\mathsf{st}(\mathsf{slot}(t')))\).

.

Let us proceed by cases.

Case 1: \(\mathsf{epoch}(b) = \mathsf{epoch}(t)\).

As established above, \(\mathsf{epoch}(t')\geq\mathsf{epoch}(b)+2=\mathsf{epoch}(t)+2\). Given that \(b\) is canonical in the view of any honest validator during the entire epoch \(\mathsf{epoch}(t)+1\) and that \(\mathsf{st}(\mathsf{epoch}(t)+1)\geq\mathbb{GST}\), line [ln:alg:ffg-no-extra-assum:will-chkp-be-justified], 13 and [assum:ffg-no-extra-assum:justified-checkpoint-next-epoch] prove this case.

Case 2: \(\mathsf{epoch}(b) = \mathsf{epoch}(t)-1\).

Obvious as this case implies that were already satisfied at time \(t\) and the view of any validator is monotonically increasing with respect to time.

[ln:alg:ffg-no-extra-assum:old-epoch-prec-fin].

Given that \(b\) is canonical at time \(\mathsf{st}(\mathsf{slot}(t'))\), the definition of LMD-GHOST-HFC(3) implies that \((b \preceq \setkeys{chkpattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}) \lor (\exists b' \succeq b,\; b' \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}})\).

Case 1: \(b \preceq \setkeys{chkpattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}}\).

[prop:gasper-basic:just-succ-finalization] implies that \(b \preceq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \lor b \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). If \(b \preceq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\), then, given that \(t' \geq \mathsf{st}(\mathsf{slot}(t'))\), by [prop:gasper-basic:finalization], \(b \preceq \setkeys{finattime}{time=t',val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\) which contradicts the case 3’s assumption \(b \npreceq \setkeys{finattime}{time=t',val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). Hence, \(b \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

Case 2: \(\exists b' \succeq b,\; b' \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

This case implies that \(b \preceq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}} \lor b \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\). As established in the case above, \(b \preceq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\) leads to a contradiction. Hence, \(b \succeq \setkeys{finattime}{time=\mathsf{st}(\mathsf{slot}(t')),val=v} \mathsf{GF}^{\finattime@Time\ifthenelse{\equal{\finattime@Val}{}}{}{,\finattime@Val}}\).

.

Note that above we have established that \(\mathsf{epoch}(b)+1\leq\mathsf{epoch}(t')-1\). Given that \(b\) is canonical in the view of any honest validator from time \(\mathsf{st}(\mathsf{epoch}(b)+1)\leq\mathsf{st}(\mathsf{epoch}(t')-1)\) until \(\mathsf{st}(\mathsf{slot}(t'))\), thanks to [prop:gasper-basic:ldm-vote-for-b-is-ffg-vote-for-cb] we can apply 41 to prove that these lines are satisfied.

From \(\setkeys{varforvalattime}{val=v} \ifthenelse {\equal{\varforvalattime@Time} {}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}} {{\mathrm{isConfirmedNoChaching}}_{\varforvalattime@Val}^{\varforvalattime@Time}} \setkeys{varforvalattime}{time=,val=}(b,\mathsf{st}(\mathsf{slot}(t')))\), we can conclude that \(\mathsf{slot}(b')\geq\mathsf{slot}(b)\). Then, given that \(b'\) is also canonical at time \(t'\), we can conclude that \(b\preceq b'\).

 ◻

7.3 Confirmation Rule↩︎

We can now formally present 8 as a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

Theorem 5. Let \(\mathit{sg}(b, t, \mathbb{GST}) = \mathsf{epoch}(b) \geq \mathsf{epoch}(t)-1 \land \mathsf{st}(\mathsf{epoch}(t)-1)\geq \mathbb{GST}\). Given [assum:no-change-to-the-validator-set,assum:beta,assum:ffg-no-extra-assum], the tuple \((\text{\Cref{alg:ffg-no-extra-assum}}, \mathit{sg})\) is a Confirmation Rule for \(\setkeys{fcparam}{fc=\textsf{LMD-GHOST-HFC},balf=\mathsf{GJ}} \ifthenelse{\equal{\fcparam@Val}{}}{{\fcparam@FC}_{\fcparam@BalF}}{{\fcparam@FC}_{\fcparam@BalF}^{\fcparam@Val}}\).

References↩︎

[1]
Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system, Dec 2008. Accessed: 2015-07-01. URL: https://bitcoin.org/bitcoin.pdf.
[2]
The merge, 2022. URL: https://ethereum.org/en/roadmap/merge/.
[3]
Vitalik Buterin, Diego Hernandez, Thor Kamphefner, Khiem Pham, Zhi Qiao, Danny Ryan, Juhyeok Sin, Ying Wang, and Yan X Zhang. Combining GHOST and Casper. arXiv:2003.03052 [cs.CR], 2020. URL: https://arxiv.org/abs/2003.03052.
[4]
Joachim Neu, Ertem Nusret Tas, and David Tse. Ebb-and-flow protocols: A resolution of the availability-finality dilemma. In 42nd IEEE Symposium on Security and Privacy, SP 2021, San Francisco, CA, USA, 24-27 May 2021, pages 446–465. IEEE, 2021.
[5]
Vitalik Buterin and Virgil Griffith. Casper the friendly finality gadget. CoRR, abs/1710.09437, 2017.
[6]
Ethereum proof-of-stake consensus specifications, 2024. URL: https://github.com/ethereum/consensus-specs.
[7]
Cynthia Dwork, Nancy A. Lynch, and Larry J. Stockmeyer. Consensus in the presence of partial synchrony. J. ACM, 35(2):288–323, 1988.
[8]
Miguel Castro and Barbara Liskov. Practical byzantine fault tolerance and proactive recovery. ACM Trans. Comput. Syst., 20(4):398–461, 2002.
[9]
Maofan Yin, Dahlia Malkhi, Michael K. Reiter, Guy Golan-Gueta, and Ittai Abraham. Hotstuff: BFT consensus with linearity and responsiveness. In Peter Robinson and Faith Ellen, editors, Proceedings of the 2019 ACM Symposium on Principles of Distributed Computing, PODC 2019, Toronto, ON, Canada, July 29 - August 2, 2019, pages 347–356. ACM, 2019.
[10]
Vitalik Buterin. Proof of stake: How i learned to love weak subjectivity. Ethereum Blog, Nov 2014. URL: https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/.
[11]
Proof of stake: Weak subjectivity. Ethereum Developer Documentation, Apr 2024. Accessed on 2024-04-30. URL: https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/weak-subjectivity/.
[12]
Ethereum. Weak subjectivity. GitHub repository file, Apr 2024. Accessed on 2024-04-30. URL: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md.
[13]
Yonatan Sompolinsky and Aviv Zohar. Secure high-rate transaction processing in Bitcoin. In International Conference on Financial Cryptography and Data Security, pages 507–527. Springer, 2015.
[14]
Ethereum. Fork choice: filter_block_tree. GitHub repository file, Apr 2024. Accessed on 2024-04-30. URL: https://github.com/ethereum/annotated-spec/blob/master/phase0/fork-choice.md#filter_block_tree.
[15]
Caspar Schwarz-Schilling, Joachim Neu, Barnabé Monnot, Aditya Asgaonkar, Ertem Nusret Tas, and David Tse. Three attacks on proof-of-stake ethereum. In Ittay Eyal and Juan A. Garay, editors, Financial Cryptography and Data Security - 26th International Conference, FC 2022, Grenada, May 2-6, 2022, Revised Selected Papers, volume 13411 of Lecture Notes in Computer Science, pages 560–576. Springer, 2022.
[16]
Vitalik Buterin. Proposal for mitigation against balancing attacks to lmd ghost. URL: https://notes.ethereum.org/@vbuterin/lmd_ghost_mitigation.
[17]
Francesco D’Amato. View-merge as a replacement for proposer boost. URL: https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739.
[18]
Francesco D’Amato, Joachim Neu, Ertem Nusret Tas, and David Tse. No more attacks on proof-of-stake ethereum? CoRR, abs/2209.03255, 2022.
[19]
Francesco D’Amato and Luca Zanolini. Recent latest message driven GHOST: balancing dynamic availability with asynchrony resilience. CoRR, abs/2302.11326, 2023.
[20]
Wassily Hoeffding. Probability inequalities for sums of bounded random variables. Journal of the American Statistical Association, 58:13–30, 1963. https://doi.org/10.1080/01621459.1963.10500830.
[21]
Beaconcha.in. Accessed on 2024-10-10. URL: https://beaconcha.in.

  1. Work done while at the Ethereum Foundation.↩︎

  2. Some of the work done while at Consensys.↩︎

  3. We avoid labelling the netwrok model used in this work as either synchronous or partially synchronous as, compared to the classical definition of synchronous networks, we allow an initial period of asynchrony, and, compared to the classical definition of partially synchronous network model [7], we assume that both \(\mathsf{GST}\) and \(\Delta\) are known by anyone executing the Confirmation Rule.↩︎

  4. Note that the definition works for any \(e'\), including \(e' > \mathsf{epoch}(b)\).↩︎

  5. Details on justification are provided in Section [sec:conf-rule-ldmghosthfc].↩︎

  6. In this work, we do not need to consider how ties are broken as we always work under assumptions that ensure that no two checkpoints for the same epoch can ever be justified.↩︎

  7. In practice, in addition to this measure, Gasper also employes the concept of weak subjectivity checkpoint and weak subjectivity period [11] to protect those validators that have been offline for long time.↩︎

  8. Technically, monotonicity is also a safety property. In this work, we use the term “safety” to refer to the Safety property of 4, not to distinguish between types of properties, e.g., safety vs liveness properties.↩︎

  9. As per the current Gasper implementation [6], \(\frac{p}{{E}}= \frac{1}{80}\).↩︎

  10. The condition is required by 27.↩︎

  11. This condition is required by 28.↩︎

  12. Let \(v''\) be any honest validator LMD voting in slot \(\mathsf{slot}(t')-1\). This implies that it votes at a time \(t_{v''} < \mathsf{st}(\mathsf{slot}(t')) \leq t'\). Hence, the inductive hypothesis apply.↩︎

  13. Note that line [ln:alg:ffg-no-extra-assum:old-epoch-ffg-check] in 8 introduces \(\mathit{f}^{\beta,e-\mathsf{epoch}( \setkeys{chkpattime}{time=t,val=v} \mathsf{GJ}^{\chkpattime@Time\ifthenelse{\equal{\chkpattime@Val}{}}{}{,\chkpattime@Val}})}\), a computable value that is formally defined in Property 5.↩︎