教程网

您现在的位置是: 首页 > 独家

树链VS侧链:到底在争论什么?

树链VS侧链:到底在争论什么?
树链VS侧链:到底在争论什么?如果在过去几个月里你一直关注着比特币社区的动态,你应该已经听说过“侧链”和“树链”的概念,甚至获悉过一些争论,争论的焦点是其中哪个方案应该增加

树链VS侧链:到底在争论什么?如果在过去几个月里你一直关注着比特币社区的动态,你应该已经听说过“侧链”和“树链”的概念,甚至获悉过一些争论,争论的焦点是其中哪个方案应该增加到比特币协议里。但你可能还不了解它们,不知道为什么要加到比特币系统里,也不知道它们的工作原理。

我们为什么讨论这个话题:

发展“侧链”和“树链”技术的最大动力来自于比特币目前扩展性不良。随着交易总数不断增加,独立矿工所需的带宽和存储空间将会膨胀到难以为继的水平。我们急需一些方法分拆块链,以减少独立矿工的负荷。

除此之外,如果在避免直接使用竞争币(以及交易所交易的资金成本)的同时,还能整合一些竞争币优良的功能(比如快速确认)肯定是个好事。而且,完成这些任务,并不需要把竞争币的功能定义到比特币核心的区块链里。

侧链:

侧链方案中提出了一种交互协议:允许开发者把新的侧块链和比特币主块链“链接”起来,让币可以在主块链和各类侧块链之间来回移动。这些侧块链可以和比特币属性完全不同,比如包括ZeroCoin式的完全匿名,或者狗狗币(Dogecoin)式的快速交易验证。用户可以把币从一个块链移到另一个块链来获得所需的属性,比特币的价值和总量将不受任何影响。

想象一个情形:用户可以用侧链创建那些由比特币“背书”的竞争币。你可以把比特币“挂起”——即从你的钱包里输出一些比特币换成定量的竞争币,未来如果有人可以证明其销毁了等量的该种竞争币,就可以获得当时你“挂起”的比特币。

乍一看,这似乎是个不错的主意,不过它有着一些严重的缺陷。如果把比特币分散到很多侧链中,每个侧链的哈希率只是整个网络的一小部分。这样问题很大,因为在侧链方案中攻击者只需要破坏最薄弱的侧链,就可以破坏整个网络。

一旦他们在某个侧链完成51%攻击,他们就可以创建一个(假的)最长侧链,用伪造的侧链币在原比特币块链中换成比特币。问题的本质在于,侧链们不共享同一个公共块历史。这意味着,从一个侧链到另一个侧链转移币的过程中,大部分侧链方案仅仅依赖所谓的“SPV证明”(译者注:简化交易验证,一种轻量钱包使用的验证机制),它只检查所涉及的币是否来自已知的最长链(而并不追溯币的历史来源至创世区块。

这种SPV证明运行在轻钱包内部,安全标准远低于比特币网络。而在侧链方案中,一个51%攻击者不仅可以双花一笔交易,甚至可以凭空制造侧链币。)

解决这个问题的一个办法是合并挖矿,以确保所有侧链同时以相同哈希率开采。合并挖矿的情形下,所有侧链使用相同的哈希算法,这样可以在同一时刻为两个侧链生成工作量证明。

矿工只需要一次哈希运算就有相同概率完成两个工作量证明。这看上去好像巧妙地化解侧链的缺陷,遗憾的是它没有那么简单。合并挖矿要求矿工运行所有侧链的完整节点,这就会造成中心化挖矿的趋势,这是我们不愿意看到的。此外,如果任意侧链受到51%攻击,风险依旧存在。

综合上述限制条件和风险都留下了许多核心开发者质疑的侧链提案,虽然他们的工作解决上述问题仍在继续。

综合上述限制和风险,很多比特币核心开发者质疑侧链提案的可行性。当然开发者们解决这些问题的工作还在继续。

树链:

树链的方案与侧链类似,但尽可能解决了后者的一些问题。提出树链方案的人是Peter Todd(比特币核心开发者),它大概是这样子:

试想一下,我们有一个树状区块而不是链状区块。比特币区块链的主链还是大家熟知的样子,但主链并不存储实际交易数据,而是在每个块里存储两个哈希值。这是两个新块的哈希值,我们将其表示为“左链”和“右链”——把这两个链看做主链的“孩子”。它们中再存储自己孩子的哈希值,以此类推。延伸到一定深度后,我们达到了“叶子”节点——这些节点就是实际存储数据的区块。

交易数据将随机分布到整个树的最底层,分配基于交易编号。矿工随意挑选底链,在叶子节点上挖矿。由几个矿工负责一个叶子。在底链上,奖励和难度都成指数降低,使矿工可以快速确认交易(在这些底链上)不断获取小奖励。平滑回报率可以鼓励矿工独立挖矿,就不用去矿池了。

这些链形成一整颗树,每个链体积都很小。矿工在子链和父节点上共同挖矿可以实现一些令人激动的属性。矿工挖矿所在的链包括叶子节点、父节点、祖父节点,这意味着矿工可以只存储树的一部分(只是其工作的叶子节点所在的分支)仍然可以挖到根结点,并有机会在任意层级挖出矿获得奖励。

这仍可以确保与链状结构相同的安全性:在每个叶子节点上完成的采矿工作,有利于整个树干的稳定性。虽然最远叶子节点打包的交易安全性(由于减少了难度)比层级较高的节点差一些,但随着树的生长,它的安全性会很快提高,就像现在的比特币交易一样安全。

这个方案不但保留了区块链作为整体的安全性,同时具备很多优点。首先,独立矿工不需要存储整个块链:他们只需要保存他们正在挖矿的叶子节点到根结点之间的数据。这使得整个树安全地分发给众多矿工。

第二,这意味着钱包软件不需要保存整个树,就可以确保安全:钱包只需要保存与其钱包相关的树路径,就有足够的交易证明保证钱的真实性(包含所有交易信息的签名证明)。这意味着轻钱包仍然可行,而且比SPV证明安全的多。

我们甚至可以根据应用需要改变树的深度,这让比特币拥有无限的扩展性:永远不会因为交易过多、数据过大导致单一矿工无法处理——只需要拆分成很多叶子节点就可以了。

这个方案在某种程度上比侧链灵活性差一些,因为它不允许块链做根本性的修改:它不可能单独对某个叶子节点实施ZeroCoin式的匿名性。但是交易速度可以变快,而且不会影响网络整体的安全性。

彼得·托德(Peter Todd)的方案完全拓展了比特币的使用范畴。矿工不再需要验证交易数据:矿工只需要看交易是否附加了矿工费,不用考虑交易内容,因为用户可以自己做验证的工作。用户只需通过树路径存储相关的交易证明数据,然后在需要进行交易的时候广播这些证明就可以了。

这样,比特币块树就可以变成一个竞争币平台:用户只需付比特币作为交易费,交易本身可以是任何资产。你可以在比特币区树链上发送ZeroCoin或其他智能资产,同时受益于比特币的安全性。

同时,使用比特币的用户会直接忽略掉树链中包含的山寨币信息,反之亦然。我们可以用磁带录音机打比方,录音机录下了房间里同时出现的不同语言对话。录音机不管内容,它只是录下很多喋喋不休的声音。听的人可以从录音中分辨出英语,其他人也许听同一盘磁带可以听出普通话。一盘磁带同时服务了两个人,但磁带本身不需要理解它录了什么内容。

树链是全新的概念,而且尚未在开发者社区达成一致:有些开发者对如何处理“孤块”产生顾虑,因为孤块将在底层节点中频繁出现,假如你的交易打包在某个孤块下层的叶子节点,那你该如何追溯交易历史?你怎么确保交易打包在新块里呢?关于这些问题还有大量的工作要做,必须确保这个新结构不会引入不公平的奖励机制或者出乎意料的问题。

最后,在传统比特币(既优雅又简洁)系统上增加复杂度,这件事本身就足以让任何谨慎的开发者停下来好好想想了。将比特币切换到树链结构将是非常重大系统转变,这一方案在宣告可行前,一定要进行认真谨慎的讨论和验证工作。

尽管如此,树链有很多属性非常令人兴奋,而且看上去树链很可能让比特币的未来有很大不同。顺便说点政治话题,这种密集的技术性讨论也提醒我们,试图监管比特币是多么愚蠢的想法:没有人知道几年后比特币到底是什么样子,包括核心开发者。而且即便比特币社区接受了善意、宽松的监管,就比特币目前这种转变的趋势而言,这些监管也很可能突然变成一纸空文。

特别感谢Jinglan Wang对文章的审阅及提供的反馈,我们经常会遇到一个问题:分片(sharding)、侧链以及Plasma有什么不同?这三种体系结构似乎都涉及了一个中心“主链”的星形拓扑结构,该中心“主链”充当系统的共识支柱,此外还有一组包含实际用户级事务(transaction)的“子”链。子链中的哈希通常周期性地发布到主链(理论上不带中心的分片链是可能的,但到目前为止还没有实现,本文不会关注它们,但参数是相似的)。考虑到这种基本的相似性,选择其中一种方案,而不选用其他方案的理由是什么呢?

侧链和Plasma的区分是简单的。Plasma链是具有非监护性质的侧链: 如果Plasma链中存在任何错误,则错误是可检测到的,用户可安全地退出Plasma链,并防止攻击者造成任何持久的伤害。用户所承受的唯一成本,是他们必须等待一个challenge周期,并在(不可扩展的)基础链上支付一些更高的交易费用。而常规的侧链则没有这种安全属性,因此它们的安全性较低。然而,设计Plasma链在很多情况下要困难得多,有人可能会说,对于很多低价值应用而言,增加复杂性而带来更好的安全性,其实是不值得的。

(图:Vitalik Buterin,来自Duncan Rawlinson)

那么,Plasma和分片之间,又是什么关系,两者孰优孰劣呢?关键的技术差异在于紧密耦合(tight coupling)的概念。紧密耦合是分片的一种属性,但不是侧链或Plasma的属性,这意味着主链(例如以太坊2.0中的信标链)的有效性与子链的有效性密不可分。也就是说,根据定义,将无效主链区块指定为附属项的子链区块是无效的,更重要的是,根据定义,包含无效子链区块的主链区块是无效的。

在非分片区块链中,规范链(即所有人都接受的代表“真实”历史的链)的定义,是完全可用和有效的;例如,在比特币和以太坊的情况下,人们通常说规范链是“最长有效链”(或者,换个更卖弄学问说法是,规范链是“最重的有效和可用链”)。在分片区块链中,最重有效和可用的规范链概念同样适用,其有效性和可用性要求同时适用于主链和分片链。然而,分片系统面临的新挑战是,由于数据太多,用户无法直接完全验证任何给定链的有效性和可用性。工程学分片链的挑战在于,通过给用户一个最大程度的不信任和实际的间接手段来验证哪些链是完全可用和有效的,从而使他们仍然能够确定哪条链是规范的。在实践中,这包括委员会、SNARKs/STARKs、fisherman方案、欺诈及数据可用性证明等技术。

如果一个链结构没有这种紧密耦合特性,那么可以说它不是layer-1分片方案,而是一个位于不可扩展的layer-1链之上的layer-2系统。Plasma不是一个紧密耦合的系统:一个无效的Plasma块绝对可以将其块头提交到主以太坊链中,因为以太坊基础层不知道它代表一个无效的Plasma块,甚至根本不知道它代表一个Plasma块;它看到的只是一个包含一小部分数据的事务。然而,单个Plasma链失效的后果,便局限于该Plasma链内。

但是,如果你试图分析用户如何执行“间接验证”程序的过程,以确定他们所查看的链是否完全有效且可用,且在不下载和执行整个过程的情况下,则我们可发现分片与Plasma工作方式更为相似的地方。例如,用来防止可用性问题的一种常见技术是fishermen:如果一个节点将一个区块的给定部分视为不可用,它可以发布一个声明此问题的challenge,从而创建一个时间段,任何人都可以在该时间段内发布该数据。如果一个区块在足够的时间内没有被质疑,则可还原将其作为依赖项进行引用的区块。这看起来与Plasma基本上类似,在Plasma中,如果区块不可用,用户可以将消息发布到主链以响应退出状态。这两种技术最终都会在压力下以同样的方式屈服:如果一个分片系统中有太多的错误challenge,那么用户就无法跟踪是否所有的可用性challenge都得到了解决;如果一个Plasma系统中有太多的可用性challenge,那么当出口填满该链的块大小限制时,主链可能会不堪重负。在这两种情况下,似乎系统具有O(C^2)的 可伸缩性(其中C是一个节点的计算能力),但在发生攻击时,可伸缩性降至O(C)。然而,分片对此具有更多的防御性。

首先,当前的分片设计使用了随机抽样的委员会机制,所以即使是一个委员会也不能轻易地做恶(足以产生一个虚假区块的程度),除非一个委员会拥有链整个验证器集的很大一部分(可能大于1/3)。

第二,有比fishermen更好的数据可用性处理策略:数据可用性证明。在使用数据可用性证明的方案中,如果区块不可用,则客户端的数据可用性检查将失败,客户端会认为该区块不可用。如果该区块是无效的,那么即使是一个欺诈证明也会使得他们相信整个区块的这一事实。一个O(1)大小的欺诈证明,可以使客户端相信O(C)大小的区块是无效的,因此O(C) 数据足以使客户端相信O(C^2)数据是无效的(在最坏的情况下,客户端与N哥姊妹区块交互,所有姊妹区块的母块只有一个是有效的;在更可能的情况下,一个单一的欺诈证明就足以证明整个无效链的无效性。)因此,理论上说,分片系统比Plasma链更不容易被DoS(拒绝服务)攻击所击倒。

 1/3    1 2 3 下一页 尾页