可扩展性之争:区块链 v.s.缠结技术

从表面上看,诸如 IOTA 和 Byteball 这类分布式账本所使用的DAG(有向无环图)设计是一项了不起的创新。 相比起现有区块链设计将庞大的区块作为交易容器的做法,DAG选择去构建一个引用旧交易的交易图,由此一旦节点接收到交易时,该笔交易能立即得到确认,而无需等待下一个区块

任何使用区块链的人都会很快意识到快速的交易确认时间远比等待交易被打包进区块以及一系列状态、余额变动操作更有优势

事实上,只要DAG节点已经知道此交易验证的两个交易,那么DAG就会快速确认此笔交易。但是现有DAG实现的主要问题在于:如何同步节点之间的状态?例如,IOTA 当前依赖于单个协调节点,而 Byteball 依赖于12个见证节点,并且这12个见证节点都由开发者自己控制以检查DAG的状态。

编者注:在DAG中,每当节点想要发送交易时,它必须随机验证前序的两笔交易。如上图所示,灰色交易是最新的未被验证的交易(图片来源:IOTA白皮书)。

那么为什么DAG同步要比区块链同步更难?简单来说,就是因为区块链的状态是由每一个区块进行修正的,而DAG的状态则由每笔交易进行修正。

作为曾经花费过无数个小时进行区块链负载测试和可扩展性研究的人,我可以证实,即使在保证网络内所有参与者都诚实并依照协议规则运作的前提下,高负载运行的去中心化网络也一定会分叉。此外,切换到更优的分叉对节点而言是极度繁重的工作,因为它必须还原废弃区块中现有交易所做的更改,并采用包含在更优分叉的区块中的交易所做的更改。

但是,我坚信,区块链优于DAG的一点是:区块链只对区块而非交易顺序敏感,这一事实将使得它的可扩展性不低于DAG。

正如我在前一篇文章中解释的那样,在分布式网络中,不同的节点会在不同的时间点以不同的排序看到交易,并且随着交易发生的速率越来越高,排序差异的发生会更加频繁。

对区块链而言,这不是什么大问题,因为区块生成的难度是会调整的。因此,在以太坊上平均区块生成频率限制为15秒,NXT / Ardor限制为1分钟,在比特币上限制为10分钟。这意味着即使在高负载情况下,由冲突区块所引起的分叉也很少发生。并且一旦发生分叉,节点会有足够时间来执行切换到更优的分叉所需的大量处理,以便在更多区块生成之前将自身状态与其它节点同步。

然而,在DAG实现中,交易广播的延迟以及排序差异将存在某些问题:比如交易吞吐量增加,并且某些节点开始获得由其它节点提交的交易,但是其中一个或两个已被验证的交易尚不为它们所知,因此这些节点将无法将这极个别交易添加到DAG。

DAG主张的情况是:想要移除协调节点以及见证节点要求,必须同时发生大量交易。作为回应,我想指出DAG实现中的几个缺陷,我预测当DAG网络的tps达到(甚至少于)1000时,将要面临这些问题。

在1000 tps的网络中,当某个远程DAG节点接收到交易后——比如在提交这些交易一秒钟以后(想象一下,光速是目前最快的速度,而互联网运行的速度要比光速慢得多),那么这个远程节点相对网络中其它中心节点将要滞后1000笔交易,这将导致以下问题:

(1)我们几乎可以肯定,该节点无法立即处理某些交易,因为它缺失了经过提交者节点见证的已验证交易,而这些交易仍然在网络中传播,因此它必须将这些交易保存在可能不断增长的未确认池中,这一做法将耗尽节点的资源。

(2)当最终某笔交易的子缠结的所有已验证祖先交易到达节点时,这些交易可以验证很久以前在当前DAG tips(编者注:在缠结中,tips代表未经证明的缠结顶点)后面嵌套的交易,并且当负载达到某个临界点时,DAG将向所有的方向扩展,并产生大量代表未被验证交易的tips。

(3)假设当交易被加入DAG时就已经被执行。由于交易执行顺序在节点间会有很大差异,为此,对于某些需要保证执行顺序的应用(比如民意调查中的投票需要在投票结束之前到达)而言,DAG就不可用了。

(4)修剪DAG几乎不可实现,因为不存在节点可以快照(在不存在单个协调节点的情况下)以修剪所有先前交易历史的稳定状态。

总而言之,我认为在交易到达时就确认交易的能力使DAG对交易广播延迟以及交易到达节点的顺序变得更加敏感,一旦网络承压,很有可能导致未验证交易不断累积,以及DAG爆炸性生长。在这种情况下,除了正常交易,指向旧tips的交易也将被接受,还留下一大堆仍在不断增加的tips等待验证。

翻译:喏呗尔

原文作者:Lior Yaffe

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181008A0LB9B00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券