今天我给大家讲讲区块链里面的一个大坑以及预警的方法,将会涉及到双花问题,以及与之相关的最长链原理,还有6个确认原则。
双花,指的就是双重花费。在前面的章节中,我们讲到过双花问题是数字货币设计中的一大挑战,因为如果一个货币系统中,一笔钱可以被花费两次,那么这个货币系统便是毫无公信力的。然而不同于纸币,证明数字货币权益的代码可能会被多次发送。在中心化的银行系统中,有银行帮助将每一笔交易记录到银行的数据库系统中,防止一笔交易被支付两次。而去中心化的比特币网络是怎么应对这一难题的呢?这是我们今天课程主要讲解的内容。
我们已经学习过,比特币通过工作量证明机制来出块,矿工打包合法区块并解出哈希谜题公布到网络中等待全网的确认。网络中节点接收到区块后,对矿工计算的哈希谜题结果进行验证时,也会同时对区块内的交易进行合法性校验,以保证矿工没有将试图双重花费的交易打包进来。所以通过这一机制保证了矿工会在打包区块时阻止双花行为。
在这个网络中不同的矿工打包计算的区块是不一样的。这不仅是因为他们可能打包了不同的交易,而且他们在区块中提供的获得区块奖励的地址是不同的。由于交易和区块在网络中的传播都是有延时的,不同矿工打包计算的区块可能会分别以不同的先后顺序到达不同的节点中。考虑这样一种情形,位于美国东部的一群节点优先收到了一个美国的矿工节点打包的区块,而差不多同一时间中国西部的一个矿池挖到了同一高度的另一个合法区块。这两个不同的区块分别在网络上进行传播并分别被不同的节点所确认。这会导致网络出现暂时性的分叉,因为在这样一个去中心化的网络中并不存在一个权威的机构来判定两个区块的生成先后顺序,每个节点只能根据自己接收到区块的时间来判定应当接收哪一个区块。
在比特币网络中,对收到区块的确认方式,就是在这个区块的后面继续打包与计算哈希谜题以延长这条链。所以接下来不同的矿工节点可能会分别在他们各自认可的区块后面继续挖矿,并将计算得到的新区块广播至网络,以试图得到全网的认可。这样由于网络延时便可能导致网络出现分叉。
因为比特币是去中心化的,是没有中心机构的,想要让所有的完整节点都有一份相同的公共总帐本,就需要达成共识。我们接下来要讲的最长链原则就是这些共识中很重要的一条。
随着网络中不断地有新块产生,逐渐便会有一条链脱颖而出成为最长的链。比特币通过最长链原则来解决分叉的问题。最长链原则是指,节点会在他看到的最长的链上继续挖矿,当节点看到网络中有比自身链更长的链时,便会抛弃当前的链转而去接收那条更长的链。这也意味着,当两个矿工同时挖出区块的时候,系统就会根据最长链原则进行取舍,即哪个新产生的区块能使其所在的区块链变得更长,则哪个区块得以被记录。节点会把其中较长的一条链继续作为主链,另一条作为备用链保存,如果新添加的区块使备用链变成了更长的链,那么这条备用链将被作为新的主链。这是保证区块链不发生分裂的重要机制。
最长链原理与工作量证明在原理上一脉相承。因为工作量证明的本质是对矿工付出的计算能力的证明,而最长链原理则认为最长链代表了最多的用于计算哈希谜题的算力。
最长链原理解决了由于网络延时而导致网络短暂分叉的问题。但是既然区块确认是可能被扭转的,那我们就考虑另外一种可能性,会不会有人利用这一点来对网络进行攻击?在一笔花费被区块链确认之后,攻击者转而从该区块以前的区块上进行延伸,并尝试将这条新链做成一条更长的链。通过这种方式,使得网络抛弃之前那条链,攻击者把以前的交易中花费的虚拟货币取回来并用于二次交易,从而实现双花的目的呢?
理论上这样的可能性是完全存在的。
但是事实上,这样的攻击成本非常高。一般来说,攻击者需要掌握全网50%以上的算力才有胜算发动这样的攻击,这种攻击也被称作“51攻击”。但是事实上在比特币的世界中,几乎没有任何组织或个人能够拥有如此大的计算能力,所以51%一般只会出现在一些相对规模比较小,算力不是太强的且同样使用POW共识机制的公链中。
例如:2018年5月,比特币黄金BTG遭遇了51攻击,此次攻击之后,系统超近40万个BTG被双花;6月,ZEN也遭受到两次同类型攻击;前不久,ETC网络被爆出遭遇51双花攻击,造成数百万美元的损失。
虽然比特币上的任何节点都无法拥有全网超过50%以上的算力,但是攻击者仍然可能进行这类攻击尝试。因为追赶一两个块的高度仍然存在一定的可能性,比如某个节点可能运气特别好地连续出了两个块。一般来说,要追赶的块的数目越多,则这种成功的可能性就越小。此外,由于网络延时可能导致的天然的短暂分叉的可能性依然存在,所以在比特币的世界中,有个叫做“6个确认”的法则,也就是说一般要等待一个交易被确认并且在其后有5个区块得到网络的验证,才可以认为这笔交易被妥妥地确认在了比特币的世界中,几乎没有可能被逆转。当然,关于6个确认来验证比特币交易的真实性,6这个数字并不是硬性规定的,只是为了更大程度地保障交易不会出现“被双花”的问题。
这也意味着,在比特币的世界中,对区块的确认是一种概率性的确认,因为作为单独的节点并不知道自己目前接收的区块是否存在于最长的链上。只能说,随着其后被网络确认的区块越来越多,则该区块越不可能会由于其他一条更长链的出现而被抛弃。
好的,今天我们主要学习了比特币的最长链原理、双花攻击问题以及比特币交易中的“6个确认”。明天我们将一起探讨另一种重要的数字货币——以太坊。丰评区块链,期待明天咱们一起学习。
网友评论