最终一致性但幸运的是,再过约10分钟,假定 A 链上的某矿机先挖出第k+2区块,它会把这新区块广播出去。其他矿机收到这个区块时候,就会停止手中的挖矿(不管原来是在A链挖还是B链挖),都切换到基于这个k+2区块上继续挖。可以看到,原来基于B链挖矿的矿机们,收到A链上的k+2区块,也都切换到A链上来挖 k+3区块了。(当然,如果第k+2区块是B链先出,矿机们切换到的是B链) 那么原来B机器挖到的B区块呢,会怎么样?——被作废了,包括B挖出的比特币和其他交易信息。这就是比特币系统的最长链合法的约定。为什么要这样约定?我们假定,A链上挖矿的算力是Pow(A),B链继续挖的算力是Pow(B)。如果Pow(A)算力远高于Powe(B),那么A链上被扩充的概率是远大于B链的。一般来说,矿机数多的明显算力更大,所以对矿工而言,这是最经济、利益最大化的选择。区块B(也就是B链)被抛弃掉,这个区块的交易,也被作废。点击下方图片获取国内三大虚拟货币交易平台恶意竞争者?如果B矿机(不服气,或者恶意)硬是要在B链继续挖,是否可以?可以的(如果修改协议的话),但是它区块高度还在k+1,别的矿机已经走到k+2了。它如果要赶上主链并且被认可,意味着它(要在其他矿机们挖出k+3前)挖出至少两个区块。就工作量和算力的对比,明显它是拼不过A链的矿机们的。当再10分钟后,A链挖出k+3区块,矿机们继续挖k+4时候。傻帽B机器还不死心,还在挖k+2?那么它在A链继续出新区块之前,它至少需要挖出是3个区块了,落后区块越多,越不可能赶上了的。如果A链出到k+6区块的时候,B链赶上来的概率接近不可能了。这时候,A链(k+1)的区块的交易,被认为是安全的,被确认的了。这就是为什么比特币交易确认慢的主要原因。《比特币:一种点对点电子货币系统》白皮书有专门的这个问题讨论。恶意站点找到区块的概率如果是0.7(比如控制了70%的网络),如果想从6个区块之后赶上主链,概率也会小于0.1。
(代码证明参考《白皮书》)
CAP原理——比特币系统牺牲的可用性比特币交易确认至少需要1小时的问题,其实就是分布式系统常常谈论到CAP问题。1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)。Eric Brewer 说,CAP这三个指标不可能同时做到。这个结论就叫做 CAP 定理。做过分布式系统(如统计等)的同学应该都知道这个的头痛,就不展开说了。 事实上比特币系统牺牲的是可用性。简单地说,是对于交易记录的完整性和响应时间的快速不可兼得。如果选择了快,那么交易记录就不可能完整;如果选择了交易记录完整,那确认交易的时间就不能快,所以一笔交易如果需要数个小时才能确认。