这里是王团长区块链学院,与最优秀的区块链人一起成长!今天给大家讲讲拜占庭将军问题。
了解过比特币和区块链的人,多少都听说过拜占庭将军问题,区块链一个重要成就正是解决了拜占庭将军问题,但真正明白这个问题的人并不多。
拜占庭将军问题是一个共识问题: 首先由莱斯利·兰波特与另外两人在1982年提出,核心描述是军中可能有叛徒,却要保证进攻一致,由此引申到计算领域,发展成了一种容错理论。
拜占庭将军问题的具体描述就是:
古老的拜占庭帝国是一个强大的国家,他们常常进攻他国以扩大疆土。这次,他们打算攻打一个也很强大的国家,采取的战略是兵分十路包抄战略,这样他们才会赢。他们按照地形,每支队伍先驻扎下来做好准备等待进攻时刻。这时问题出现,这个敌人虽比不上拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击,十支部队如今分开了,他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间,那么战争就会失败,损失也将极为惨重。
十位将军为了协调一致,在那个古老的时代,只能靠通信兵传递信息,十位将军相互通信一次就需要90次传信,每位将军都有各自的攻城计划,要想达成统一就需要往复传递不知道多少次。 我们可以假设一个场景,一个桌子上坐着十位将军,每个人各自说着自己的想法,同时听其他九位的说法,但是信息的传递不是实时的,有快有慢,有早有晚。也就是说,这十位将军如果想达成一致,理论上有可能,实际上基本无法实现。
而区块链和比特币的出现,利用互联网信息传递的及时性特点,引入时间戳可以明确知道“谁先说、谁后说”的特性,创造性地加入挖矿机制(就是用计算机算随机数满足一定难度才算成功)比拼各位将军的智商来决定谁做本次进攻的统帅,使用非对称加密保证信息传输的安全性等等手段融合到比特币中,用实例说明自己破解了这个历史难题“拜占庭将军问题”。
下面我们看看到底是怎么解决的,我们把十个将军想象成互联网上十个独立平等的节点,比特币的工作机制是:POW(工作量证明机制)。工作量证明机制主要特征是众多参与节点需要做一定难度的工作得出一个结果,谁先得出立即全网广播,其他节点很容易通过结果来检查出之前节点是不是做了相应的工作,一旦结果被证明正确,其他节点会把之前节点的结果添加到各自的账单中,为争取下一笔的交易记录做好计算的准备。
通过使用比特币的工作量证明机制,将军A在互联网上先发布了一个消息“进攻”并附上了自己的签名“将军A” ,即【进攻 + 将军A】,当然,前提是其他将军都能确实这个消息是将军A发出的。
如果消息发出去,将军A却没有执行的话,那将军A就是叛徒,他会受到处置,所以将军们不敢随意发假消息出去。
将军A的消息被其他节点收到,如果其他将军也打算进攻,则在将军A的消息后面跟上自己的信息,如:【进攻 + 将军B】,以此类推。当此类消息达到十个,他们必将堵上未来,一同发起进攻,攻克敌国,就算是叛徒也不敢轻易现身,因为在网络上会被轻松识破,而且即使叛徒现身也改变不了结局,因为绝大部分将军已经达成共识。
这时也会出现一种情况,将军A发出消息后,可能会有两个或多个将军同时跟上“进攻+签名”的消息,这时,各个节点会严格按照广播的精确时间进行排序,确保一条链的完整性。
也有完全同时广播出来的情况,这时就会出现“分叉”,出现一个分开的两条链,之后,哪条链上添加的账本多(共识多),哪条就成为主链,另一条分叉链就此中断或被部分矿工认可继续添加,就像ETH和ETC,以太坊网络分叉出了一条链,被部分矿工认可继续添加,就有了ETC,而ETH也同时存在。
之所以能够达成统一的共识,认可这一账本,最终是因为利益驱使。任何人都可以随时加入比特币这套系统,读取/更新/记录账本,只要解题的速度够快且准确,就可以争取到比特币作为奖励(我们这里只用比特币的工作机制举例);相反,比特币网络中只有拥有超过51%的算力才能破坏网络安全,如果恶搞的话,会浪费自己的大量资源,而且收益可能会低于成本。
想要了解更多的区块链知识,可以关注我们的公众号:王团长区块链日记,与最优秀的区块链人一起成长!