首页 >>
Avalanche是如何解决比特币现金中常见问题的
发布时间:2019-08-06 15:23:32 来源:天游线路-天游线路检测登录点击:27

  一位Reddit用户前几天说,他不明白Avalanche的必要性,也不知道它真正解决了什么问题。这似乎是对Avalanche的一种普遍看法。在这篇文章中,我将尽我最大的努力,阐明目前我们在比特币现金中遇到的问题,以及Avalanche如何解决这些问题。Avalanche有两种使用方式——预共识和后共识——所以我将在本文中介绍它们。

  

  预共识

  有什么问题呢?实际上有两个——块传播和零确认。

  块传播

  我们社区中似乎有很多人认为块传播是一个已经解决的问题,因为我们已经了解了块压缩算法,比如石墨烯。但这个问题真的没有彻底解决。我们所有的块传播算法,包括Graphene,XThin,Compact Blocks和XThinner,都是依赖网络中各个节点的内存池来彼此同步的。

  如果每个节点已经拥有了区块中的所有交易,那么块传播只会成为一项挑战,即只传输最少的必要数据,以便传送内存池中的那些在区块中的交易,而不是完整的交易本身。

  但是,内存池可能存在很多原因导致不能同步,特别是当网络上的交易量增加时。这些原因包括:

  1、不同的内存池策略:节点始终可以自由选择自己的内存池策略。一些节点拒绝非标准交易,而其他节点接受它们。有些节点拒绝接受零费用的交易,而另一些则接受等等。这些差异并不一定会造成一次性的差异,相反,在拒绝其中一个依赖项的节点的内存池中,任何构建在这些交易上的未经确认的交易链都将丢失。

  2、双倍花费:当同一时间发送双倍花费时,不同的节点第一次看到的交易是不一样的。与上述情况一样,如果未经确认的交易链建立在这一个或另一个交易上,内存池的差异会被放大。

  3、高容量:在交易量非常大的情况下,网络中存在有很多交易,节点最终会因正常的传播延迟而产生完全不同的内存池。

  那么当内存池不同步时会发生什么?这意味着我们的块压缩算法不能很好工作,甚至根本无法工作,因为我们需要通过区块传输完整的交易,而它们不在内存池中。

  这是BU Gigablock测试网研究的结论之一。在大约100 MB区块的持续吞吐量下,有时网络上各个节点的内存池彼此不同步,以至于XThin压缩算法根本无法为传播100MB的区块提供任何压缩。

  而且,由于传播完整的100MB区块可能超过10分钟或者更长的时间,这意味着区块链将会分叉并保持下去,从而导致共识的失败和系统的全面崩溃。这一点在Peter Rizun的研究中曾提到。

  Avalanche有什么帮助?

  作为一种预共识机制,Avalanche可以帮助保持内存池的同步,采用不同的方式部署它。在这一点上,我们仍然只讨论Avalanche并研究最佳方法,但是如果你要求所有交易在被允许打包之前使用Avalanche,那么你最终会遇到所有的Avalanche-aware节点在网络共识的设置下允许打包的交易集合,因此区块总是以最大速度传播,因为每个节点已经在区块中具有完整的交易集。

  零确认

  我们提出了一种改进零确认的双花证明方法,以防止快速重花攻击。在这种情况下,攻击者广播两个双花交易的时间几乎相同,因为彼此的结果都是非零概率的,所以双花的两个交易都会被打包。我们的双花证明中继可以帮助商家检测这些双倍花费并拒绝付款。

  一种难以解决的双花攻击是矿工贿赂。在这种情况下,攻击者向双重支出交易附加大额交易费试图贿赂矿工接受它。在之前的一篇文章中,给出的例子是,攻击者购买了4000美元的电视。他用2000美元的费用广播双倍花费。如果有任何矿工接受贿赂,他们可以获得2,000美元,而攻击者可以得到2,000美元的折扣。

  如果哪怕只有一小部分矿工愿意接受贿赂,零确认对任何人都不起作用,因为在这种支付系统中,在可以进行诈骗的地方,对大多数商家来说5-10%的时间是不可用的。

  Peter Rizun 提出的研究表明,今天网络上有矿工会很乐意接受贿赂来打包双重支出交易。因此,这是一个我们想要解决的真正问题。

  Avalanche有什么帮助?

  通过让节点预先就哪些交易是可以打包的达成共识,它们必然会在区块被开采之前解决冲突交易(双重花费)之间的冲突。事实上,Avalanche可以无理由的在几秒钟内批准交易。假设我们能做到这一点,任何在接受付款后广播的双重支出都不会被接受。即使大多数矿工,甚至所有矿工都愿意接受贿赂打包双重支出的交易,也是不能做到的。因为他们无法回到过去,逆转已被Avalanche标记为最终交易的交易。

  因此,Avalanche有可能给我们带来近乎即时的确认。或者至少可以在网络延迟允许的范围内以最快的速度批准交易。

  后共识

  有什么问题呢?

  51%攻击!

  回顾白皮书,人们一直都知道比特币(以及任何POW加密货币)很容易受到控制着50%以上网络算力的恶意方的攻击。比特币现金作为SHA-256哈希算法的小算力链,处境非常糟糕。因为有许多大型比特币矿工个人拥有大量的算力,足以对BCH发起攻击。即使BCH使用不同的挖矿算法并拥有自己独特的ASICS,但是有足够资源的恶意人员总是有可能购买足够的算力来攻击系统。

  事实上,这正是11月份比特币现金的遭遇。一个不理智、心怀恶意的演员(Craig Wright)使用他的财富(或者更具体地说是Caliv Ayre的财富)购买ASIC,其公开声明的目标是对比特币现金进行51%攻击。最终他们失败了,但保卫比特币现金付出了巨大的代价。如果 Craig 和 Calvin有更多的资源或愿意花更多的钱来进行攻击,那么防御是非常困难的。

  当时实施的临时应急防御策略是在网络节点构建10个区块之后,让网络节点确定“最终”区块。最终意味着软件认为给定的区块是区块链的最终和永久部分。如果没有这个规则,当51%攻击者发布了一个更长的链就会发生重组,而现在软件会忽略这个更长的链,因为它试图覆盖一个标记为final的块。

  从表面上看,这确定听起来是个好主意。如果没有必要的话,那为什么我们还想要保持深度重组和51%攻击的可能性呢?毕竟,如果历史交易发生逆转,货币体系就无法运转。

  这个问题的答案与客观性的概念有关。加入网络的新节点,或者从缺失状态返回的节点,只有一个客观的衡量标准,用于确定他们应该遵循哪条竞争链,那就是工作量证明。如果现有节点拒绝深度重组并且遵循具有累积工作量较少的链,那么加入网络的新节点无法知道这一点。结果是,新节点将同步到攻击者的链上,现有节点将跟随他们自己的链,从而导致分裂网络。

  还有一些人担心,51%的攻击者可能会利用竞争条件导致现有节点彼此分裂,尽管可能会部署一些技术来缓解此类攻击。

  Avalanche有什么帮助?

  Avalanche可以让我们在不暴露上述问题的情况下完成最终确定。当网络节点使用Avalanche来协调他们认为有效的链时,51%的攻击者不会利用竞争条件来分裂网络。

  此外,加入网络的新节点可以使用Avalanche来确定其他人正在关注哪条链,并且将避免同步到由51%攻击者生成的链。

  因此,在后共识Avalanche的情况下,51%的攻击者无法执行深度重组或任何重组。这意味着一个确认将具有与当前系统中数千个确认相同的权重。

  51%的攻击者也不能挖空块并对区块链执行某种形式的拒绝服务攻击。空块链的开采需要执行一个块重组操作,其他矿工挖块都是孤块。因为Avalanche的存在,这将是不可能的。攻击者可以做的事情是,他个人挖的51%的区块是空的,但其他人挖的区块显然不会是空的。

  Avalanche的安全性如何呢?在某些方面,我们正在绕开POW的权威,这是不是意味着整个系统的安全现在要依赖于Avalanche的安全?答案并不是这样。

  如果你看一下Avalanche论文中的雪球算法,你会注意到一个拥有系统攻击能力的拜占庭攻击者只能在他保持攻击的时候阻止块的最终确定。举个例子,他不能使某些节点最终确定是区块A,而其他节点最终确定是区块B,从而导致网络的分裂。

  所有这些意味着,如果Avalanche系统受到攻击,网络就会默认回到我们从第一天开始使用的中本聪共识。区块将不会最终确定,节点将遵循工作量累积最多的链。一旦攻击停止,区块将再次开始最终确定。

  因此,在POW之上使用Avalanche协议可以增强系统抵御51%攻击的能力。它具有以下安全属性:

  如果攻击者具有》 50%的算力而不是》攻击Avalanche所需的拜占庭节点所需的阈值,则无法攻击比特币现金。

  如果攻击者具有》攻击Avalanche所需的拜占庭节点所需的阈值但没有》50%的算力,那么也无法攻击比特币现金。

  只有攻击者既具有大部分的算力也具有足够的可以攻击Avalanche系统的拜占庭节点,才能实现对比特币现金的攻击。

  希望这篇文章能够澄清一些对于Avalanche的误解。我们还有更多的工作要做,以能够在预共识和后共识的情况下更好的使用Avalanche。Avalanche似乎是针对比特币诞生以来存在的一些棘手的问题的有效解决方案。