拜占庭将军问题是容错计算中的一个老问题,由莱斯利.兰伯特等人在 1982 年提出。拜占庭帝国是 5 至 15 世纪的东罗马帝国,即现在的土耳其。拜占庭城邦拥有巨大的财富,使它的十个邻邦垂涎已久。但是拜占庭高墙耸立,固若金汤,任何一个单独邻邦都没实力与之抗衡,任何侵入行为最终会以失败告终,入侵的军队最终结局就是被歼灭,自己处于如此高的地位,很容易遭到其他九个城邦的嫉妒和联合抗衡。
原本十个邻邦之间的平衡局面被打破,战争不断爆发,相互掠夺他人财富的现象屡禁不止。拜占庭的防御功能能够抵抗任何一个邻邦的入侵,只有至少一半以上邻邦联合进攻,才有攻破的可能。也就是说,如果六个联邦联合进攻拜占庭,就有获胜的机会,能够掠夺拜占庭的财富。但是如果其中有一个或者多个背叛,背弃了联合攻击的信念,进攻的军队就会大幅度降低,而拜占庭的强大防御功能则会击退所有进攻,歼灭所有进攻的军队,掠夺其他邻邦的财富。
其他半数以上联邦组成的联盟是一个不互相信任的联盟,每方都小心行事,因为稍有不慎,就会给我们自己所带来灾难。为了获取拜占庭的巨额财富,他们相互通讯,商量进攻的目标和进攻时间,希望可以通过联合进攻,攻克拜占庭,实现自身的强大。拜占庭将军时刻要提防邻邦之间的联合。邻邦将军虽然寻求一切联合的机会去攻打拜占庭,但是不确定之中是否有叛徒,如果存在着叛徒,攻击力会进一步削弱,获胜的可能性会不断降低,将军能否找到用分布式协议进行远程协商,进而赢取拜占庭城堡攻克战役的胜利呢?这就是拜占庭将军问题。与已有方法相比,区块链技术将是更完美的解决方案。
区块链是怎样来解决这个问题的呢?信息可以通过区块链实现快速传递,信息传递效率、速度大幅度提升,同时成本得到了有效控制。另外还加入了随机数,目的就是保障信息能够实现有效传播,而工作量的高低则能够衡量加入成本,区块链矿工必须完成一个随机哈希算法的计算工作量才能向各城邦传播消息。当用户向将交易提交给网络之后,将会从客户端中调用标准加密公共钥匙,形成相应的电子签名或者说是“印章”。基于上述情况,哈希计算速率本身所具有的限制,配合公钥加密,就可以极大的提升网络的可信度,保证了所有参与者都能够在某些特定的事情上达成一致。拜占庭将军问题的区块链解决方案,实际上可以在任何一个分布式的网络环境下发挥其作用,比如说域名、投票选举或其他需要分布式协议的地方。
(4)完成上一过程之后,纳入区块链进行存储,以默认随机散列值为最新区块散列值代表所有节点接受该区块,在新区块制造过程中,将以该区块为基础加以延伸和拓展。在节点运行过程中,将始终以最长区块链当做正确链,并在后续的工作中以此为基础加以验证和延长。如果存在两个节点所广播的区块不是同一个版本的问题,那么其他节点将根据接收时间上的差异,在保留另外一条链的同时,根据第一个接受的链条工作。
在上述过程中,需要共识算法提供进一步的支持,以区分链条长度,并选择链条较长的链继续工作,从而有效的防止区块链分叉问题的出现。这里我们所重点介绍的“新的数据记录广播”,在实际的应用过程中并不要求达到所有节点。只要节点数量足够,那么就能够被有效的整合到一个区块中来。而在实际上,区块有着较强的容错能力,这一特点为丢弃的信息的处理显然是有着重要的积极意义的。如果某个节点没有接收到特定区块,将自动提交申请以下载该区块。
如上文中所介绍的那样,节点在区块链网络中提供了记账功能支持,负责相关数据在区块中的存储,为了提升节点记账的积极性,系统将会对存在记账行为的节点进行随机奖励分配。时间戳保证不会有人制造假数据记录和保证造假数据记录不被通过验证。这也正是区块链与众不同的地方。区块链不仅关注数据区块里的内容,也关注数据区块本身,把数据区块的内容与数据区块本身通过时间戳联系起来。时间戳为什么会出现?这是由区块链的性质规定的。节点把数据记入了区块,所以我们就可以在任何一个区块中找到按照时间序列排列的账单,就如同一个账簿。那么账簿的页与页怎么衔接起来?这里我们所使用的时间戳实际上就是为了解决这一问题存在的。在实际的应用过程中,时间戳的存在,根本目的在于保证数据区块新结构的稳定存在。
这里所介绍的新结构,为不同区块之间的连接提供了时间上的支持,区块链也正是因为有着时间戳的存在,才可以通过时间线而串联成为“链”。按照时序排列的区块,保证了账簿中各页的连续性。通过时间戳的使用,保证了所有记录的唯一性和有效性,并使得数据记录本身在区块和区块上的哪个位置上发生可以被精确定位且可回溯,也给其他校验机制功能和作用的有效发挥提供了强有力的支持,保障了区块链网络可以有明显效果地的对某些数据的真实性加以有效的校验。而由于这一网络本身是公开的,所以系统不但可以掌握所有已发生的数据变化,而且由于过去的数据具有真实性,所以可完全以既有数据为基础形成新的数据,并且通过时间戳将所有的数据串联了起来。
因此如果在区块链网络中造假,就必须对此前的所有数据,造假成本无疑极其高昂。虽然将会在挖矿的过程中形成多个链条,但是由于节点始终控制着最长的链条,因此必须从头构建一个更长的链条才能够对过去的数据来进行修改,在这个新的链条超过原来的那个链条后,虚假数据才能够为节点所接受。但是时间越长,造假的成本也将呈指数级上升,并且随着链条慢慢的变长,其难度也慢慢的变大,成本也就慢慢的升高。同时,因为去中心化的设置,区块链直接将将完整数据保存在核心客户端上,所以即使对区块链进行攻击,也很难取得理想的效果,而且想要完全攻陷区块链系统,其成本远超过重新构建一个这样的系统。所以,我们大家可以认为区块链是一个造假成本极高、攻破难度极大、数据篡改可能性极低的诚信系统。