前言
因为比特币没有中心节点,各个节点都是平等的,并且可能存在恶意节点,那么怎么达成共识呢?
这里有个著名的拜占庭将军问题。
1. 拜占庭将军问题
拜占庭将军问题是Leslie Lamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。
这个例子大意是这样的:
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们怎么才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?
在拜占庭问题里,各军队最重要的事情是:所有将军如何能过达成共识去攻打敌国或者都不进攻以避免损失。
达成共识并非坐下来开个会那么简单,有的将军心机深不可测,口是心非,如果有叛徒,可能会出现各种问题:叛徒可能欺骗某些将军自己将采取进攻行动。
叛徒可能怂恿其他将军行动。
叛徒可能迷惑其他将军,使他们接受不一致的信息,从而感到迷惑。
针对拜占庭问题的深入研究,科学家们得出一个结论: 若叛徒数为m,则将军总数n>=3m+1时才有解
解决方案
-
每个将军给其他所有的将军发送消息,然后根据收到的所有消息以少数服从多说的原则决定是否进攻。
原理如下:
-
这里假设有一个叛徒,则至少有4个将军。如上图所示,假设A,C,D为忠将,B为叛将。进攻为1,不进攻为0。假设A先发给BCD进攻的消息,则CD为忠将,接到进攻的消息后,也将收到的进攻消息发出去。而B为捣乱,会说收到的消息为不进攻。这样ACD都会收到2个进攻1个不进攻,按照少数服从多数原则,他们都会选择进攻,这样发起进攻的军队将会多于50%。
假设将军A是叛将,则他会向三位将军发出不同的消息,比如上次的2次进攻,1次不进攻。而BCD三位忠将都会将收到的消息如实发出去。最后少数服从多数原则,三位忠将还是能达成进攻的共识。其他情况大家可以尝试推理一下,都是可以达成共识的。
缺点:如果存在大量的节点,每个节点要向全网发送大量消息。
2 . POW共识机制
PoW(工作量证明 )通过计算一个数值( nonce ),使得拼揍上交易数据后内容的 Hash 值满足一定的条件。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。
如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的哈希运算。网络中只有最快算出答案的区块,才会添加到账本中,其他的节点进行复制,这样就保证了整个账本的唯一性。怎么防止恶意节点:要想获得记账权,就要耗费大量的算力去进行哈希运算,付出了很多成本。人是理性的,是逐利的,如果不作恶,正确的记账,就会获得奖励。而如果有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中就不会得到奖励,而付出的算力也就白白付出了,相当于受到了惩罚。两相权衡,人们就失去了作恶的动机。因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。
分叉:当有两名矿工在几乎在同一时间,各自都得了正确的答案,便立即传播自己的区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。假如这两个正确的区块分别为A、B,则有的节点会先收到A区块并将A加入区块链,而有的节点会先收到B。这时就导致了区块链分叉。
最长链原则:刚开始分叉时旷工都在自己收到的区块的基础上进行延伸,两个块都收到的节点,会把其中长度更长的一条作为主链,另一条作为备用链保存(保存是因为备用链将来可能会超过主链长度成为新主链)。这样一段时间后所有旷工都会切换到最长的那条链,从而解决分叉问题。
为什么10分钟出一个块:如果出块时间过短,也就意味着挖矿难度降低,这时就会有更大的几率多个旷工同时算出答案。又由于刚产生的区块在全网广播时需要一定的时间,其他节点也很容易收到不同的区块。简单来说就是出块过快容易导致频繁分叉。但是出块慢也有代价:确认时间变长了。
51%算力攻击:理论上,当攻击者掌握了51%的全网算力时,其攻击总是能成功。因为他总能让自己的链成为最长的链。但是,如果他攻击比特币系统,比特币将不具备可信性,以至比特币必然崩盘,一文不值。这对他显然百害无一利。举个例子:现在有几个国家的原子弹都足以毁灭地球,但他们会这么干吗?
电力消耗:比特币因为挖矿,消耗了大量电力,这是它的一大缺点。并且随着比特币价格越来高,全网算力越来越大,电力消耗也将越来越大。
小结:
本篇简单介绍了一下POW共识问题,后面还会有文章详细介绍挖矿的具体原理。
To be continued...