一 区块链不可能三角--扩容、扩展、无限扩展

1 区块链不可能三角
区块链可扩展性,也就是不可能三角
2 可扩展的第一个定义—可扩展的POW
可扩展性的定义:
在不加任何限定下,这是指某个表现y随着某个变量x的增长的变化情况,如果y能够随着x的增长而线性增长,我们会说y是 (线性可扩展)的,或者就简单地说是可扩展的 。换句话说,如果我们定一个很高的目标y,如果我们知道“这种东西我们只要用某f方法,然后把x堆起来就一定可以达到”,那么我们就说这个f方法是可扩展的
比特币的7TPS(每个区块1MB,每笔交易大小250B,10分钟生成一个区块,每笔交易的时间为1MB/250B/10分钟=/250/10*60=7笔交易/s)是不可扩展的 。因为想要提升比特币的7TPS,尤其是想要把它提高到能和传统支付手段相比的输出,例如,我们能做的事很有限 。最自然而然的方法是加大区块大小,或者降低区块间隔,而因为即便没有严谨的数学分析和证明,人们也知道这是不可能的,因为要是把区块加大1000倍到一个G然后十分钟一个区块,除网速带宽限制外还有分叉安全性问题 。
比特币的POW算法里,安全性依赖于区块同步的时间远小于区块间隔时间的前提
比特币的安全性的前提是——假设所有矿工都是逐利的,那么任何人想要作弊,都需要打败50%的算力,因为你必须要拥有超过其他人的算力,才能挖出比别人更长的链 。然而,这个竞争是公平的前提是,作弊者和其他所有人都在挖同一条链,即全网对于当前最长链在大多数时间里是同步的 。然而,对于比特币而言,这是不一定的 。而这也是比特币的POW和传统分布式系统的算法不一样的地方——比特币中允许网络中出现短暂的不一致,即分叉,即网络中的两部分不同节点同时分别认为两条不同的链是合法的 。这个时候,如果恶意节点想要挖出最长的链,他不再需要竞争过其他所有人了 。假设一个分叉中两条链各被50%的算力接受,那么这个时候如果网络中总是存在着两个分叉,实际上等同于网络分区,举个最简单的情况,就是说当你挖到区块的时候,另外一条链也挖了一块出来但是你们这一半没有收到,然后两边都继续挖下一块,于是最终你有26%的算力你的链就是最长的 。如果链始终处于两个分叉的状态,就代表始终总有一半人不和你竞争,全网算力存在浪费现象,可以认为比特币的安全性下降了 。而如果网络中一直有分叉,很难收敛,那么就总有人不是在最终的最长链上挖矿,于是整个网络的安全性就达不到POW理论上的50%的水平;而分叉无法收敛,则不仅仅是安全性下降,而是交易永远无法确认 。
比特币很少出现分叉,而且一般分叉很快就会消失的解决方案:
分叉是怎么出现的——当A挖到一个块的时候,A会尽快把这个块公布到全网,越多的人知道,就越多人会继续在后面挖矿,于是这一条链比别人长的可能性就越大,于是这一块最终出现在最长链上的可能性就越高——而在比特币中,只有最长链上的才是最终结果 。然而,如果A的这块还没有被网络中的另一点B收到的时候,B也挖到了一块,而B在不知道A挖到这块的前提下,也会做同样的事情,于是就产生了分叉,而网络也会被分割成两部分,先收到A的块的就会认为A的链更有前途,在后面继续挖,反之亦然 。在现在的比特币网络中,一个区块是1M,传输和验证起来都比较快,所以需要把一个区块同步到全网的时间很短,只有当两个节点在这段时间里同时挖到区块才可能产生分叉 。因此,如果区块传输延迟远小于区块生成间隔的话,分叉的概率就会很小,而连续几次分叉的概率就更小,所以大概率分叉在一个区块后就会结束,留下一个深度1的孤块 。而如果我们加大区块大小,或者缩短区块间隔,使得区块同步时间和区块生成间隔的比例没有那么悬殊的时候,那么同步所需要的时间就会变长,于是产生分叉的可能性就会增加 。而如果同步区块时间超过了区块间隔,那么分叉数量就永远不会减少,而是会越来越多 。