译者序:Eth 2.0信标链的共识协议将逐渐从PoW向PoS过渡,在这条全新的链上,如何保障其安全性和活性呢?Casper FFG 作为区块最终确定工具,为eth2带来了福音。通过这篇文章,我们可以对Casper FFG的运行规则、安全性证明和活性证明有一个初步的了解。
为了对用户负责,任何区块链都必须保证链上区块的最终确定性和链的活性,而区块链共识机制的根本就是提供这些保障。在Eth2.0中,共识过程只在信标链中进行,而Casper FFG机制则保证其运行。本文主要描述了Casper FFG机制的基本概念,举例阐释其在信标链上的作用。
Casper FFG作为一项“最终确定性工具”(finality gadget),为区块的最终确定制定了规则,并对已被确定的区块进行检测。FFG独立于区块链本身的增长过程,可以作为一个叠加层为任何有效的区块链协议提供区块最终确定性。
就这方面而言,Casper FFG并非一项成熟的共识协议,因其本身并没有相关设置,以保证链的活性。(或许我会择时再写一篇文章阐释影响Eth2.0信标链活性的相关因素)
让我们先来看看Casper FFG机制的结构,然后深入了解其规则,从而理解FFG如何保证信标链的安全性和活性!
投票
验证者通过验证区块间的交易是否有效,给链上的区块进行投票。每记投票的格式为(S, T),包含以下信息:
- 来源区块 (S)
- 目标区块 (T), 必须产生于S之后
实际操作中,一记投票需包含以下内容:验证者的数字签名以及相应区块信息(包括区块哈希和区块高度)。
证明&最终确定
“证明”(Justification) 和“最终确定”(finalization) 是Casper FFG机制下的两个共识执行阶段,可以类比于更为传统的拜占庭容错共识协议 (BFT) 的“准备”和“执行”阶段
2/3验证者投票证明了区块A和区块B
证明
区块B如果满足以下条件,则已被证明:
- 是创世区块,或者
- 超过2/3的验证者投出了(A,B)票,A是在B之前产生的区块,且已被证明。
最终确定
区块B如果满足以下条件,则已被最终确定:
- 是创世区块,或者
- B已被证明,且超过2/3的验证者投了 (B,C) 票,以及C是B的直接子区块(即C区块高度=B区块高度+1)
注意:关于Eth2.0 Casper FFG机制的最终确定规则,还有更加全面的阐释,详情请参阅此论文。上文所给的具体阐释,只是为了让本文更加通俗易懂。
Casper FFG的规则
Casper FFG机制有两条简单的规则:
验证者不可以进行以下任何一种情况中的 (S1, T1) 和 (S2, T2) 投票 1.区块高度(T1) = 区块高度(T2),或者 2.区块高度(S1) < 区块高度(S2) <区块高度(T2) < 区块高度(T1)
(译者注:这两种情况在Eth2中被描述为“双重投票”和“环绕投票”,恶意验证者会因此受到罚没。)
Violation of Casper FFG Rule 1: height(T1) = height(T2)
Violation of Casper FFG Rule 2: height(S1) < height(S2) < height(T2) < height(T1)
安全性&活性
Casper FFG的目的是保障区块最终确定这一共识执行过程的安全性和活性,下面两点具体阐述了其安全性和活性:
- 可追责安全性 (Accountable Safety) : 如果两个互相冲突的区块被最终确定,那么至少有1/3的验证者违反了Casper FFG规则,他们则会被标记下来。
- 合理的活性 (Plausible Liveness) : 不管协议处于哪一阶段,验证者都可以在不违反Casper FFG规则的前提下发起投票,对新区块进行最终确定。
尽管和传统的拜占庭容错共识机制 (BFT)文献相比,本文对FFG安全性和活性的阐释显得有些业余,但是对于大家理解区块链的最终确定机制,却刚好合适。
事实上,如果读者对BFT相关文献非常熟悉,会认为对于“plausible liveness”的解释十分荒谬。然而,由于Casper FFG只是最终确定性机制,因而说到保证系统的活性,其只需要避免以下情况的出现:诚实验证者为了继续提议或证明区块,不得不违反FFG规则。
至于安全性,可靠的安全性尤为重要,如违反规则的验证者会被标记下来,并将标记信息发送到PoS的机制上,从而对恶意验证者进行惩罚。这样做有助于协议的实现,以达到系统的平衡。
安全证明
使得两个相斥的区块A和B最终确定(且互不为对方的子区块),有两种情况:
- A区块高度=B区块高度
- 由于A和B在被最终确定之前都需要被证明,至少2/3的验证者需要分别为目标点A和B投票。这就意味着至少有1/3的验证者违背了第一条Casper FFG的规则。
- A区块高度<B区块高度
- 区块A要被最终确定,那么至少2/3的验证者都要对区块(A,C)投票,而区块C是A的子区块。
- B区块要被证明,那么随着区块高度增加,区块应该按[genesis, B_0, B_1, … , B_n, B]排列,其中每个区块都能按顺序证明下一个区块,即至少2/3的验证者要做出类似(G, B_0), (B_0, B_1)的投票。假设B_m是该序列中的首个区块,且A区块高度 < B_m区块高度。
- 需要注意的是,如果该序列中的任何区块和区块A或C的高度相同,那么形同以上第一种情况,我们已经得到了证明。
- 在(B_n, B_m)投票中 (n = m-1),B_m能够被证明。但由于B_n或B_m和区块A或C不在同一个区块高度,那我们就能得到区块高度的排列:B_n< A < C < B_m。
- 因此,有2/3的验证者都违反了Casper FFG的第二条规则。
安全性证明,区块高度A<B
还要注意的是,仅通过检查所有投票集合,找到有冲突的投票并检查相应的验证者签名,我们很容易确定违反Casper FFG规则的验证者。
活性证明
- 假设P_0是经证明后的最高区块,而Q是某些验证者所认为并且投票的最高区块。
- 区块P_1作为P_0的子区块且区块高度Q< P_1。此时如果有2/3的验证者对(P_0, P_1)投票使其被证明,并没有违反Casper FFG规则。
- P_2是P_1的子区块,如果有2/3的验证者对(P_1, P_2)进行投票,并使得P_1被最终确定。这也并没有违反Casper FFG规则。
因此,至少2/3的诚实验证者总是能够对一个新区块进行最终确定,这就保证了共识机制的活性。
转载自:https://www.ethereum.cn/casper-ffg-explainer