大多数权益证明(PoS)链在出块后只做一件事:一个委员会进行投票,如果投票数达到足够的阈值,区块就被计入。
@Dusk 则做了两次,而且第二轮是没人会讲清楚的那一轮。
Succinct Attestation 会在每一轮以三个步骤完成:一个出块者提出候选区块。然后由随机选出的委员会对其进行验证。接着,再由第二个委员会进行确认(ratify)——但它确认的并不是区块本身。它确认的是验证结果。
我花了一段时间才真正看清楚这种区别。
验证回答的是“这个区块是否有效?”。确认回答的是“网络实际上是否已经就‘该区块已被验证’达成一致?”。这两个问题不同,而第二个问题正是确定性最终性的来源。没有它,你得到的是某个委员会意见,被在网络中传播,却可能在不同节点上以不同时间到达。 有了它,你得到的是一份经证明的记录:一致性这件事确实发生过。
这就是“这个区块非常可能是最终的”和“这个区块是最终的”之间的区别。对于面向证券结算(securities settlement)的链来说,这个差距并不只是哲学层面的。它是结算保证(settlement guarantee)和结算预估(settlement estimate)之间的差别。
代价也是真实存在的。两个委员会意味着两轮签名,两次参与可能不足的机会,以及相应的奖励分配——验证与确认各自都会从区块奖励中切走一部分,而且这些都与区块生成者是分开的。
至于多出来这一轮是否值得所增加的延迟和协调开销,这正是审计(audit)无法替你判断的那类问题。Oak Security 的审查认为该协议设计得很好。设计得好”和“能够很好地适应真实负载”是两种不同的说法。
给这里的节点运营者一个真诚的问题:有没有人测量过,卡住流程的是确认步骤(ratification)而不是验证(validation)?
#dusk $DUSK #block