树链VS侧链:到底在争论什么?
树链VS侧链:到底在争论什么?如果在过去几个月里你一直关注着比特币社区的动态,你应该已经听说过“侧链”和“树链”的概念,甚至获悉过一些争论,争论的焦点是其中哪个方案应该增加到比特币协议里。但你可能还不了解它们,不知道为什么要加到比特币系统里,也不知道它们的工作原理。
我们为什么讨论这个话题:
发展“侧链”和“树链”技术的最大动力来自于比特币目前扩展性不良。随着交易总数不断增加,独立矿工所需的带宽和存储空间将会膨胀到难以为继的水平。我们急需一些方法分拆块链,以减少独立矿工的负荷。
除此之外,如果在避免直接使用竞争币(以及交易所交易的资金成本)的同时,还能整合一些竞争币优良的功能(比如快速确认)肯定是个好事。而且,完成这些任务,并不需要把竞争币的功能定义到火币网的公众邮箱比特币核心的区块链里。
侧链:
侧链方案中提出了一种交互协议:允许开发者把新的侧块链和比特币主块链“链接”起来,让币可以在主块链和各类侧块链之间来回移动。这些侧块链可以和比特币属性完全不同,比如包括ZeroCoin式的完全匿名,或者狗狗币(Dogecoin)式的快速交易验证。用户可以把币从一个块链移到另一个块链来获得所需的属性,比特币的价值和总量将不受任何影响。
想象一个情形:用户可以用侧链创建那些由比特币“背书”的竞争币。你可以把比特币“挂起”——即从你的钱包里输出一些比特币换成定量的竞争币,未来如果有人可以证明其销毁了等量的该种竞争币,就可以获得当时你“挂起”的比特币。
乍一看,这似乎是个不错的主意,不过它有着一些严重的缺陷。如果把比特币分散到很多侧链中,每个侧链的哈希率只是整个网络的一小部分。这样问题很大,因为在侧链方案中攻击者只需要破坏最薄弱的侧链,就可以破坏整个网络。
一旦他们在某个侧链完成51%攻击,他们就可以创建一个(假的)最长侧链,用伪造的侧链币在原比特币块链中换成比特币。问题的本质在于,侧链们不共享同一个公共块历史。这意味着,从一个侧链到另一个侧链转移币的过程中,大部分侧链方案仅仅依赖所谓的“SPV证明”(译者注:简化交易验证,一种轻量钱包使用的验证机制),它只检查所涉及的币是否来自已知的最长链(而并不追溯币的历史来源至创世区块。
这种SPV证明运行在轻钱包内部,安全标准远低于比特币网络。而在侧链方案中,一个51%攻击者不仅可以双花一笔交易,甚至可以凭空制造侧链币。)
解决这个问题的一个办法是合并挖矿,以确保所有侧链同时以相同哈希率开采。合并挖矿的情形下,所有侧链使用相同的哈希算法,这样可以在同一时刻为两个侧链生成工作量证明。
矿工只需要一次哈希运算就有相同概率完成两个工作量证明。这看上去好像巧妙地化解侧链的缺陷,遗憾的是它没有那么简单。合并挖矿要求矿工运行所有侧链的完整节点,这就会造成中心化挖矿的趋势,这是我们不愿意看到的。此外,如果任意侧链受到51%攻击,风险依旧存在。
综合上述限制条件和风险都留下了许多核心开发者质疑的侧链提案,虽然他们的工作解决上述问题仍在继续。
综合上述限制和风险,很多比特币核心开发者质疑侧链提案的可行性。当然开发者们解决这些问题的工作还在继续。
树链:
树链的方案与侧链类似,但尽可能解决了后者的一些问题。提出树链方案的人是Peter Todd(比特币核心开发者),它大概是这样子:
试想一下,我们有一个树状区块而不是链状区块。比特币区块链的主链还是大家熟知的样子,但主链并不存储实际交易数据,而是在每个块里存储两个哈希值。这是两个新块的哈希值,我们将其表示为“左链”和“右链”——把这两个链看做主链的“孩子”。它们中再存储自己孩子的哈希值,以此类推。延伸到一定深度后,我们达到了“叶子”节点——这些节点就是实际存储数据的区块。
交易数据将随机分布到整个树的最底层,分配基于交易编号。矿工随意挑选底链,在叶子节点上挖矿。由几个矿工负责一个叶子。在底链上,奖励和难度都成指数降低,使矿工可以快速确认交易(在这些底链上)不断获取小奖励。平滑回报率可以鼓励矿工独立挖矿,就不用去矿池了。
这些链形成一整颗树,每个链体积都很小。矿工在子链和父节点上共同挖矿可以实现一些令人激动的属性。矿工挖矿所在的链包括叶子节点、父节点、祖父节点,这意味着矿工可以只存储树的一部分(只是其工作的叶子节点所在的分支)仍然可以挖到根结点,并有机会在任意层级挖出矿获得奖励。
这仍可以确保与链状结构相同的安全性:在每个叶子节点上完成的采矿工作,有利于整个树干的稳定性。虽然最远叶子节点打包的交易安全性(由于减少了难度)比层级较高的节点差一些,但随着树的生长,它的安全性会很快提高,就像现在的比特币交易一样安全。
这个方案不但保留了区块链作为整体的安全性,同时具备很多优点。首先,独立矿工不需要存储整个块链:他们只需要保存他们正在挖矿的叶子节点到根结点之间的数据。这使得整个树安全地分发给众多矿工。
第二,这意味着钱包软件不需要保存整个树,就可以确保安全:钱包只需要保存与其钱包相关的树路径,就有足够的交易证明保证钱的真实性(包含所有交易信息的签名证明)。这意味着轻钱包仍然可行,而且比SPV证明安全的多。
我们甚至可以根据应用需要改变树的深度,这让比特币拥有无限的扩展性:永远不会因为交易过多、数据过大导致单一矿工无法处理——只需要拆分成很多叶子节点就可以了。
这个方案在某种程度上比侧链灵活性差一些,因为它不允许块链做根本性的修改:它不可能单独对某个叶子节点实施ZeroCoin式的匿名性。但是交易速度可以变快,而且不会影响网络整体的安全性。
彼得·托德(Peter Todd)的方案完全拓展了比特币的使用范畴。矿工不再需要验证交易数据:矿工只需要看交易是否附加了矿工费,不用考虑交易内容,因为用户可以自己做验证的工作。用户只需通过树路径存储相关的交易证明数据,然后在需要进行交易的时候广播这些证明就可以了。
这样,比特币块树就可以变成一个竞争币平台:用户只需付比特币作为交易费,交易本身可以是任何资产。你可以在比特币区树链上发送ZeroCoin或其他智能资产,同时受益于比特币的安全性。
同时,使用比特币的用户会直接忽略掉树链中包含的山寨币信息,反之亦然。我们可以用磁带录音机打比方,录音机录下了房间里同时出现的不同语言对话。录音机不管内容,它只是录下很多喋喋不休的声音。听的人可以从录音中分辨出英语,其他人也许听同一盘磁带可以听出普通话。一盘磁带同时服务了两个人,但磁带本身不需要理解它录了什么内容。
树链是全新的概念,而且尚未在开发者社区达成一致:有些开发者对如何处理“孤块”产生顾虑,因为孤块将在底层节点中频繁出现,假如你的交易打包在某个孤块下层的叶子节点,那你该如何追溯交易历史?你怎么确保交易打包在新块里呢?关于这些问题还有大量的工作要做,必须确保这个新结构不会引入不公平的奖励机制或者出乎意料的问题。
最后,在传统比特币(既优雅又简洁)系统上增加复杂度,这件事本身就足以让任何谨慎的开发者停下来好好想想了。将比特币切换到树链结构将是非常重大系统转变,这一方案在宣告可行前,一定要进行认真谨慎的讨论和验证工作。
尽管如此,树链有很多属性非常令人兴奋,而且看上去树链很可能让比特币的未来有很大不同。顺便说点政治话题,这种密集的技术性讨论也提醒我们,试图监管比特币是多么愚蠢的想法:没有人知道几年后比特币到底是什么样子,包括核心开发者。而且即便比特币社区接受了善意、宽松的监管,就比特币目前这种转变的趋势而言,这些监管也很可能突然变成一纸空文。