LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 区块DAG真正的终结性

区块DAG真正的终结性

2020-08-01 星球日报 来源:火星财经
那么其就有资格在本轮提议一个PBFT区块”在边界的附近但不在边界上挑选一个DAG区块候选人来进行最终确认。完成一个DAG区块在周期区块中的最终确定主持一次规定交易如何计算的并发调度完成DAG区块的最终确定这个PBFT流程会确认区块DAG内的一个单一区块。

作者: Steven Pu, Taraxa创始人

前言

在之前写过的一篇文章里,我们定义了区块DAG的结构和排序方式,但也提出了排序依旧会随着时间推移而出现变化的问题。本文,我们会为大家介绍Taraxa赋予区块DAG排序真正终结性的方案以及与之相关的所有结果。

终结性(Finality)的重要性

如今大多数区块链拓扑的终结性(Finality)都是基于概率的,也就是说你永远无法百分百确定一笔交易真的彻底完成了。举个例子,在比特币网络中,随着时间推移(或者用比特币世界的语言来说,是随着区块数的增加),攻击者追上网络剩余部分并重组区块的概率会呈指数级下降。这种指数级的风险下降催生了“6个区块”的经验论。也就是说,如果在包含你那笔交易的区块上又新增了5个区块,那么你的交易就有了“6个区块的深度”,从统计上来看,这个交易就不太可能遭到重排攻击。

在很多场合,概率性的终结没什么问题。但是,如果你正在执行大量交易,且每笔交易都依赖于上一笔交易的输出,或者你正在执行一笔巨额交易,你需要确定这笔交易绝不会被撤销,那么终结性就相当重要了。

在原始状态下,我们区块DAG的排序机制也是概率性终结的。为了实现真正的终结性,需要做些添加。

DAG终结性意味着什么?

回想一下,我们早期排序机制的重排风险主要就是出现在锚定链发生变化的时候。

因此,只要我们能确保定期固定住锚链,那么无论出现什么状况,锚链上的区块排序都能彻底确定。

我们是如何做到的呢?网络会定期举行投票,与区块DAG的建设同步,以此来为DAG边界附近的特定区块施加无限权重(infinite weight)。

当一个区块被赋予无限权重的时候,就意味着其通过幽灵指针(ghost pointer)直接或间接指向的所有区块都具有了无限权重,也就是说现在不可能再通过攻击推翻这个排序了。

在上图,我们选择了橙色区块赋予无限权重,并且可以看到这种无限性已经通过反向指向区块DAG赋予了锚链上所有区块无限权重(图中标为深灰色)。现在,我们已经有效地在其所属时期(epoch)确定了这个锚链及所有区块的排序。

那么,我们如何第一时间选择要赋予无限权重的区块呢?

通过类似PBFT的算法选择周期区块

为了选择DAG内的一个区块来完成最终确定,我们采用了一个类似PBFT(实用拜占庭容错)算法的过程。考虑到PBFT是一个研发完备且广泛部署的算法,关于本文会涉及到的细节和潜在错误(fault)这里就一笔带过不再赘述了。

PBFT的周期区块终结(period block finalization)过程大致分为四步,如下面这张高度简化的图表所示。

我们来分别看下,在每个阶段,节点会做什么:

1.提议新的区块

通过VRF (SK, previous_PBFT_block_hash, current_vote_type, current_round_number, current_step_number) = (e, π)来计算其资格,这里e就是资格值,π是VRF正确计算的证明

决定“如果e <阈值,那么其就有资格在本轮提议一个PBFT区块”

在边界的附近但不在边界上挑选一个DAG区块候选人来进行最终确认,也就是当前周期(Period)的区块候选人Pt

在Pt和P(t-1)之间创建一个周期(下文会详细介绍),找到这个周期内包含的所有区块

创建一个并发调度CS

创建一个包含(Pt, CS)以及其他信息(如时间戳、签名、受益人)的PBFT区块候选人(Pc)

计算Pc的哈希(hash)

将hash(Pc)、Pc以及证明其资格的(e, π)广播给其他对等节点

2. 投票选出领头人(Leader)

通过VRF再次计算其资格(带入current_round_number加一以及当前投票类型)生成另一个(e, π)

决定“如果e <阈值,那么其就有资格参与此轮”

等待2个λ的时间,其中λ是网络直径——也就是网络中两个最远节点之间的最短距离(时间上)

计算在π也正确的情况下观察到的e的最小值,创建者即为最小值e为“领头人”(leader)的时候,它就是创建者——这个节点就是提议下一PBFT区块的候选人

将其对hash(Pc)的投票以及证明其资格的(e, π)广播给对等节点——这里的hash(Pc)对应的是会成为“领头人”的最小的e

3. 针对区块的投票

通过VRF再次计算其资格(带入current_round_number加一以及当前投票类型)生成另一个(e, π)

决定“如果e <阈值,那么其就有资格参与此轮”

等待2个λ的时间

计算在给定的e_min时间内其是否收到2T+1的投票(这里T是上一轮合格投票节点的1/3)

如果其尚不具备PBFT区块,就针对e_min对应的Pc以及相关hash(Pc)进行对等节点轮询

验证Pc是否正确创建

将其对Pc的投票以及证明其资格的(e, π)广播给对等节点

4. 投票进入下一步

通过VRF再次计算其资格(带入current_round_number加一以及当前投票类型)生成另一个(e, π)

决定“如果e <阈值,那么其就有资格参与此轮”

等待2个λ的时间

计算对于任意给定的Pc,其是否收到2T+1的投票

验证获胜的Pc是否正确创建

计算最新验证过的Pc并将结果提交到永久存储

将其对继续提议下一个PBFT区块的投票以及证明其资格的(e, π)广播给对等节点

关于我们PBFT的更多介绍

上面写的就是一个极其简单的描述

这是对我们PBFT流程的一个极其简单的描述,因为我们并没有提到所有可能会导致事情往不好方向发展的情况,例如没有节点计算出低于阈值的e、投票没有达到2T+1这个规定的数目、大量节点在这一轮期间崩溃等等。

这个PBFT流程高度安全且可扩展

注意,每当节点要发声时,它都会计算一个VRF资格值来确保在这一轮它有资格发言。资格的阈值已设置好且会动态调整来确保以下两件事:

参与每一轮的节点是随机的且有可能是不同的,这意味着一旦攻击者观察到某个节点是参与者并以其为目标发起攻击,那么可能在下一轮它就失去了资格。这和许多其他算法不同,其他算法会在较长时间里保留参与者(或委员会成员)的资格,使他们成为攻击的首要目标。

在任何给定的回合中,只有一部分合格节点参与其中,使这个PBFT流程高度可扩展。这意味着就算网络容量扩大,合格参与者数量增加,这些PBFT轮次的实际参与者(委员会规模)相对网络容量可以轻松通过设置实现次线性扩展。参与人数越少投票过程就越快。

将随机选择的参与者与次线性增长的委员会规模相结合,得到的就是一个高度安全且可扩展的PBFT流程。

平行的PBFT链

Taraxa的PBFT流程在现有的区块DAG旁边创造了一条PBFT区块线性链。

每个PBFT区块都有两个主要目标,

完成一个DAG区块在周期区块中的最终确定

主持一次规定交易如何计算的并发调度

完成DAG区块的最终确定

这个PBFT流程会确认区块DAG内的一个单一区块。因此,与其他大多数利用PBFT流程的网络不同,它并不作为主要共识算法来对整个区块链流程把关。这也是为什么Taraxa的PBFT流程与区块DAG的创建流程是并行的且基本上异步的。

每当一个新的DAG区块完成最终确定,我们就创建一个已终结的锚链以及锚链上一组相关区块(沿着每个锚定区块的时期(epoch)来实现)。整个区块的集合称为周期(Period),也可以看作是一个最终确定了排序的区块集群的快照。

每个周期包含许多DAG区块,会带领我们进入另一个PBFT区块任务,通过并发调度来确认待计算交易的顺序。

并发调度

并发调度通过以下几种方式来确定排序:

区块的排序,这个由排序机制定义,因为一个周期里有很多区块。

过滤出区块间的冗余交易。因为我们采用的是一个DAG数据结构,所以很有可能发生多个区块提议者将同一组交易打包到不同DAG区块的情况,导致一定程度的交易重叠。Taraxa设计了一个交易仲裁机制(之后的文章会具体介绍)来帮助调整这种重叠——我们希望将这种情况降到最低但又不能为零,否则会出现交易孤立过度的情况。

将交易分为并发集与顺序集。

这是我们并发EVM设计(后续文章会再介绍)的关键部分,其中通过一组推测性执行算法将交易分为可安全并行执行的交易与必须按序执行的交易。

你也可以将并发调度看作将所有单独的DAG区块组合成一个单一区块并嵌入每个PBFT区块的结果。

除了共识,接下来我们还会继续分享更多有趣的技术,并在研究和实现进程中陆续发布。

敬请期待!

本文来源:星球日报
原文标题:区块DAG真正的终结性

—-

编译者/作者:星球日报

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 区块 节点
LOADING...
LOADING...