Eth2 信标链:你首先该知道的事(下)

信标链检查点

检查点就是位于一个时段的第一个时隙内产生的区块。如果某个时段的第一个时隙内没有产生区块,则将最近的一个符合要求的区块认定为检查点区块。每个时段都会有一个检查点区块;一个区块有可能同时是多个时段的检查点。

Eth2 信标链:你首先该知道的事(下)

注意,从时隙 65 到时隙 128 之间都是空块。时段 2 的检查点本来应该是时隙 128 处产生的区块,但因为该时隙被跳过了,所以时段 2 的检查点仍然是时隙 64 处产生的区块。时段 3 也类似,时隙 192 被跳过了,因此将时隙 180 处产生的区块认作时段 3 的检查点。
时段边界区块(epoch boundary block)是一些文献(比如 Gasper 论文,也是上面这张示意图的来源)中用到的一个术语,可以认为是检查点的同义词。
在发起一次 LMD GHOST 投票时,验证者也要为最近时段的检查点投票,投票者希望确立的新检查点叫做 “目标检查点”(target)。这种投票叫做 Casper FFG 投票,而且投票中也会包含投票者认定的上一个检查点,叫做 “来源检查点”(source)。在上图中,时段 1 中的一个验证者的投票将创世块作为来源检查点,然后推举时隙 64 处产生的区块为目标检查点。在时段 2,同一个验证者又为相同的检查点投票了。
只有被分配到某个时隙的验证者才需要为该时隙的区块投票,但是,所有验证者都要为每一个时段的检查点发起 FFG 投票。
大多数
由所有活跃验证者总余额的 2/3 所支持的投票内容就是多数票。
我们举简单一点的例子来说明一下,假设有 3 个活跃验证者,两个的余额是 8 ETH,另一个的验证者余额为 32 ETH。那么,只有包含了那个最大验证者的投票才可能是多数票;虽然另外两个验证者可能都投了另一个检查点,但是他们的余额总和只占 50%,形成不了多数。
确定性
一个时段结束的时候,如果其检查点得到了 2/3 的总余额支持(形成了多数票),那么该检查点就被合理化(justified)了。
如果一个检查点 B 已经得到合理化,其下一个时段的检查点也被合理化了,那么 B 就被敲定(finalized)了。一般来说,一个检查点会在两个时段内得到敲定,大概就是12.8 分钟。
从平均的角度来看,用户的交易总是打包在一个时段的中间部分(的区块中);那么距下一个检查点就还有半个时段的时间,因此,一笔交易经过 2.5 个时段(16 分钟)就可以得到确定性(finality)。理想化情况下,超过 2/3 的见证消息会在一个时段的前 22 个时隙内完成打包。因此,交易敲定的平均时长是 14 分钟(16 + 32 + 22 个时隙)。区块确认则从区块见证消息,一步步升级到合理化,再到确定性。用户自己可以觉得他们要不要等到交易确定,还是更低一点的安全性就足够了。

Eth2 信标链:你首先该知道的事(下)

为简化叙述难度,下文假设所有验证者的余额都相同。
信标链的顶端
(上图中)时隙 96 处产生了一个时段边界区块,而且包含了对时段 2 检查点的见证消息(投票)。见证消息的数量达到了 2/3 的多数要求。然后时段 2 的检查点就得到了合理化,同时,上一个合理化的检查点,也就是时段 1 的检查点,就被敲定了。时隙 32 处的区块得到确定性,会使得之前所有区块都得到确定性。在敲定检查点的时候,并没有对同时得到敲定的区块在数量上的限制。所以,虽然确定性仅在时段边界的时候产生,见证消息是逐个逐个区块累加的,下文的 “从创世块到区块链顶端的历程” 部分提供了另一种描述。
从时隙 1 到时隙 32 的信标链区块所包含的所有交联,也会使分片链产生确定性。换句话来说,当一个信标链区块得到确定性时,该块所包含的交联所对应的分片链区块也得到敲定。交联本身不足以使一个分片区块得到敲定,只是对分片链的分叉选择有所帮助。
从创世块到信标链顶端的历程
用同样的办法,可以观察到从创世块开始的一条故事线。所有的提议者,从时隙 1 到时隙 36,一一提议了一个区块,而且这些区块都显现在链上。对于时段 1的所有区块来说,其检查点(时隙 32 处的区块)累积获得了 55% 的验证者的见证。在验证者提议时隙 64 处的区块时,它也纳入了对时段 1 检查点的见证消息。现在,有 70% 的验证者都见证了时段 1 的检查点,因此时段 1 检查点得到了合理化。完成时段 2 时,时段 2 的检查点(时隙 64 处的区块)累积的见证消息还达不到 2/3 的多数要求。时隙 96 处的区块在提议时,也纳入了对区块 2 检查点的见证消息,所以,这时候,时段 2 的检查点也达到 2/3 的多数要求,被合理化了。合理化时段 2 的检查点同时也会敲定时段 1 的检查点及所有此前的区块。
有时,合理化一个区块会敲定两个甚至多个时段以前的区块。Gasper 论文讨论了这种情况,预计只有网络高延迟、网络隔离、遭遇强大攻击者的极端情况下,才会出现这种事。
确定性对于分片及以太坊区块的用户来说是重中之重,因为确定性使他们能够确定,交易已经永远写在链上,不可更改了。确定性也降低了跨分片通信的复杂性。没有确定性,分片内部和分片之间交易的回滚会具有破坏性,甚至让分片的好处荡然无存。
深入理解见证消息
一条见证消息里面包括了一个 LMD GHOST 投票和一个 FFG 投票。理想情况下,所有的验证者每个时段都会发出一条见证消息。一笔见证消息有 32 个时隙的机会被打包到链上。这就意味着,一个验证者可能在单个时段内有两笔见证消息被打包上链。见证消息打包上链的时间也决定了验证者可得的奖励幅度:在自己所在的时隙就打包上链可以得到最多的奖励;要是等到后续时隙才打包上链,验证者得到的奖励就会下降。为了给验证者足够的时间来准备见证消息,他们会在一个时段以前就预先知道自己所在的委员会。区块提议者则仅在时段开始之时分配一次。此外,隐蔽领袖选举研究还致力于减轻对区块提议者的攻击和贿赂。
委员会机制使得汇总所有的见证人签名、变成单个聚合签名在技术上的优化成为可能。如果同一委员会中的所有验证者都作了同样的 LMD GHOST 和 FFG 投票,则他们的签名可以聚合起来(成为单个签名)。
信标链验证者奖惩措施
为避免过度深入,我们仅讨论验证者激励相关的 6 种措施:
见证人奖励
见证人惩罚
对质押者来说典型的贬值风险
罚没(slashing)及举报人奖励
区块提议者奖励
怠惰惩罚(inactivity penalty)
当期见证消息(包含 LMD GHOST 投票和 FFG 投票)与其它多数验证者一致时,验证者可以得到奖励。在 Eth2 Phase 1 阶段,验证者发送交联也可以得到奖励。当区块得到敲定时,验证者奖励也就确定下来了。
另一方面,如果验证者没有提交见证消息,或者投票支持了一个最终不能得到敲定的区块,他们也会受到惩罚。
在列举不太常见的惩罚和奖励之前,你可能还想知道,成为质押者会面临怎样的贬值风险。答案是,你可能失去的 ETH,恰好跟你能赚取的 ETH 数量对称。如果一个验证者一年的奖励回报率是 10%,则作恶验证者在最坏情况下可能会失去 10%。举个例子,如果一个验证者总是离线,或者总是给那些不能得到敲定的区块投票,则其损失的 ETH 数量,恰与一位总是及时提交见证消息,且所支持的区块总是得到敲定的验证者所得的奖励,在数额上相等。
罚没(Slashing)的力度下至 0.5 ETH,上至一位验证者的全部权益。如果一位验证者所提交的见证消息触犯了协议所定义的罚没条件,则 TA 会损失自身权益的至少 1/32,并被驱逐出验证者队伍。惩罚的力度就像该验证者离线了 8192 个时段一样。协议还会根据相近时间内被罚没的验证者数量施加一个额外的惩罚。此种额外惩罚的计算公式是:验证者余额 × 3 × 被罚没的验证者占比。那么,如果占全体验证者 1/3 数量的验证者都触犯了罚没条件,则他们会失去全部余额。相应地,检举这些不轨行为的验证者将会得到检举人奖励。
区块提议者在所提议区块得到敲定之后,也会得到一个成比例奖励。总是在线,并且提议工作做得很好的验证者,其总奖励可增加约 1/8。出现罚没事件的时候,提议者也会因为打包罚没证据而得到一小笔奖励。在 Eth2 Phase 0 中,所有的检举人奖励都会给予区块提议者。
以太坊 2.0 系统中机制众多,对这些机制的评价应从所有机制的整体效果出发。最末一种奖惩措施是所谓的 “怠惰惩罚”。基本上,如果距上一次敲定区块已过去了 4 个时段(还没有新检查点得到敲定),所有验证者都会遭受怠惰惩罚,而且惩罚力度会呈平方级上升,直至新的检查点得到敲定。怠惰惩罚保证了:即使 50% 的验证者都离线了,系统也会在 21 天后重新开始敲定区块。
罚没条件
罚没条件主要有三个,分别是:双重提议、FFG 双重投票,FFG 环绕投票。LMD GHOST 投票是不会招致罚没的。
双重提议是指区块提议者于所在时隙提议了多于一个区块。
双重投票是指验证者在提交 FFG 投票时,多个投票指向同一个目标检查点,但引用的来源检查点却各不相同。
环绕投票指的是验证者在提交 FFG 投票时,多个投票所指向的检查点 恰成环绕形状。举个例子,假定一位验证者在时段 5 投票时,以时隙 32 的区块为来源检查点,以时隙 128 的区块为目标检查点:
· 如果该验证者在时段 6 的投票以时隙 64 的区块为来源检查点,以时隙 96 的区块为目标检查点,那么该票就被 TA 自己在时段 5 的投票给包围(环绕)起来了。
· 如果该验证者在时段 6 的投票以时隙 0 的区块为来源检查点,以时隙 160 的区块为目标检查点,则该投票把 TA 自己在时段 5 的投票给包围起来了。
如果这位验证者在时段 6 又给时隙 128 的区块投票,除非其来源检查点仍是时隙 32 的区块,否则就成了双重投票,也会被罚没。相同的 FFG 投票倒是不会被罚没的。
拥有相同来源检查点的 FFG 投票也不会招致罚没。这是维持网络活性的重要条件。举个例子,如果两条分叉链各自都有 50% 的验证者余额支持,协议应该鼓励验证者通过投票给相同来源检查点、不同目标检查点,在分叉间切换(而不是惩罚他们切换分叉,这样会导致网络继续分裂)。能够安全地在分叉间切换,验证者们就能打破僵局,尝试形成 2/3 的多数。
检举他人的验证者需要在见证消息中纳入相互冲突的投票,以证明另一个验证者应该受到惩罚。要高效地从一长段历史中找出相互冲突的投票,在算法和数据结构上也是一种挑战。因此,开放工程挑战·罚没探测器也在寻找贡献者。
得到良好控制的验证者一般是可以避免被罚没的:只需记得自己曾经签名过哪些见证消息就好。诚实的验证者也不会因为其它验证者的行为而受到波及。只要验证者不签名相互冲突的见证消息,不作出双重提议,就不会被罚没。
为得到更好的运行体验、更值得信任的信息来源,乃至更好的 DoS 保护,验证者客户端可能会同时使用多个信标链节点。在这种模式中,包括使用备份的验证者客户端的时候,需要小心不要让验证者签署相互冲突的消息。
信标链验证者激活及生命周期
每一个想成为验证者的用户都要先有 32 ETH 才能获得验证者资格。用户质押 32 ETH 到以太坊主网上的保证金合约中,就能获得一个验证者资格。
另一方面,信标链也会劝退(反激活)所有余额降低到 16ETH 的验证者;质押用户可以取出剩余的验证者余额,不过在 Eth2 Phase 0 还做不到。
验证者在服务 2048 个时段(约 9 天)之后也可以主动退出。退出时要先走完 4 个时段,质押用户才能取出自己的权益。在这 4 个时段内,该验证者的余额仍然是可以被罚没的。因此,诚实验证者的余额可以在约 27 小时之后取出。但是,如果验证者在此时被罚没,就只有再等 8192 个时段(约 36 天)之后才能取出剩余款项。
更多技术细节可看《以太坊 2.0 Phase 0 验证者生命周期》。下图亦来自这份资料:

Eth2 信标链:你首先该知道的事(下)

为避免验证者集合在短时间内出现大规模的变动,单个时段内能激活和退出的验证者数量是有一个机制限制的。这样可以让激活许多验证者、快速攻击系统的攻击更难发动。
信标链还使用了一个叫做 “有效余额” 的概念,这个有效余额回避验证者余额的变化更小,使得技术上的最优化成为可能。
总结
在每一个时段,验证者都被均匀分配到不同时隙中,并进一步划分成相同规模的委员会。验证者只有 1 个应召的时隙,也只会存在于 1 个委员会中。因此:
一个时段中的所有验证者,通过集体决策尝试敲定某个检查点;方法是 FFG 投票;
各时隙中的所有验证者,通过集体决策尝试选出信标链的顶端区块:方法是 LMD GHOST 投票;
一个委员会中的所有验证者,通过集体投票尝试将某个分片交联到信标链上。
最符合协议的行为可以得到最多的奖励。
信标链的启动(创世块)需要至少 16484 名验证者。验证者的数量会因为罚没及资源退出而减少,也会因为质押用户的投入增加而增加。而且,随着 Eth2 Pahse 1 及后续阶段的升级,预计会有更多验证者参与进来。信标链需要至少 262144 名验证者(质押的 ETH 数量超过 800 万)才能使得单个信标链区块能包含 64 个交联。
我们还从未拥有过一个 去中心化 系统和应用的可扩展平台。如果你想更深入地研究以太坊 2.0,权威的参考来源是 Ethereum 2.0 Specifications。该技术规范包含了信标链技术规范,还提供了其它关键信息源,而且提交 issue 可以获得奖金。当前,最紧迫的 工程需要是点对点网络的组网功能。
自己动手,或者推荐朋友参加挑战、参与 ethresear.ch 论坛或者 Ethereum Magician 论坛,创造历史吧!