gpc矿机系统开发,基于累计式委员会的最终确定

来源 | ethresear.ch

作者 | Vitalik Buterin

这是对信标链提议的一个替代设计方案,信标链可以在比较远的未来切换到这个模型 (替代现在计划的 CBC),它试图提供以下一些关键特性:

➤ 在正常情况下,提供有意义的单个 slot 的经济确定性 (即类似于 Tendermint 的特性)

使得即使大多数验证者参与合谋进行单个 slot 的重组,执行的成本也比现在高得多,从而减少共识可提取价值 (consensus-extractable value, CEV)

➤ 摆脱对 LMD GHOST 分叉选择的高度依赖,避免那些已知的缺陷,并需要引入 复杂的混合分叉选择规则,以修补这些缺陷。

➤ 有可能会使更低的最低存款额度 (deposit size) 和更高的验证者数变得可能

➤ 保留经济确定性 (economic finality) 最终接近于一个非常大的数值 (数百万个 ETH) 这一特性

预备知识

让 CONSENSUS 成为一种异步安全的共识算法 (例如,Tendermint、Casper FFG 等)。
我们假设共识算法的设计是涉及 slot 和 view (查看视图) 的,即它在每个固定时间段尝试达成共识时。
我们还假设它把加权的验证者集 (现有的拜占庭容错共识算法要增加这一特性是很容易的) 作为输入。

在下面的设计里,我们修改 CONSENSUS,使得在每次的查看中,要求做最终敲定的验证者集都是不一样的。
也就是说,是把 CONSENSUS 而不是验证者集作为函数 get_validator_set(view_number: int) -> Map[Validator, int] (其中 int 代表验证者余额) 的输入,该函数可以生成验证者集的新查看视图。
get_validator_set 应该具有这样的特性,验证者集从一个视图到下一个视图最多变化 1/r,其中 r (r=65536 ) 是复原周期长度。
更形式化来说,我们希望是这样:

其中,|x| 返回的是 x 值的绝对值之和,而 diff 返回的是每个键值相减后的值 (例如,diff({a: 0.1, b:0.2}, {b:0.1, c:0.3}) = {a: 0.1, b: 0.1, c: -0.3})。

在实践中,相邻的两个验证者集间的差值会包括现有验证者被扣除的余额,而新加入的验证者的比率与被扣除余额的比率相等。

请注意,只有在之前的验证者还未做最后敲定时,1/r 的最大验证者集差值函数才可用。
如果之前的验证者集已经最终敲定了,CONSENSUS 的实例会改变,因此 get_validator_set 函数的内部随机性会也会完全改变;在这种情况里,两个相邻的验证者集会变得完全不一样。

请注意,这意味着,如果两个最终敲定视图上的数值相差足够大,CONSENSUS 函数现在是可能两个一起敲定的,且不会发生罚没;这是故意如此设计的,而协议的处理方法就与今天 Casper FFG 处理怠工惩罚一样。

机制

我们使用两级分叉选择:

➤ S 选择 LATEST_FINALIZED_BLOCK (最新被敲定的区块)

➤ 从 LATEST_FINALIZED_BLOCK 开始,使用其他的分叉选择 (例如 LMD GHOST) 来选择区块头

内容版权声明:除非注明,否则皆为赚币吧本站原创文章。

转载注明出处:https://www.zuanbiba.com/btbkj/10699.html