区块链-拜占庭将军问题

拜占庭将军问题

参考

拜占庭帝国即中世纪的土耳其,拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。

然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。

于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。

此问题在区块链系统中,就是如何在全网络中的挖矿节点如何达成共识的问题。

身份确认

当每个挖矿节点在完成了交易打包(穷举随机数找到合适目标哈希,也就是具有一定难度的哈希,关于区块链难度值)。向全网发送最新账本的时候,要确定发送节点的身份,还有内容是否被篡改。是使用非对称加密,用私钥进行加签名,验证者可以通过公钥校验。

百分之五十一

通过非对称加密可以解决将军身份问题,保证消息可靠。但是网络延迟等原因可能导致有两个节点几乎同时完成了工作量证明(找到了目标哈希)向全网发送最新账本的更新,出现了分支,两个消息都覆盖了全网的时候,如果节点a接受了两个最近账本,必须通过比较时间戳对比进行取舍,取最早完成的那个。

这就类比于两个将军同时发了消息,一个说撤退,一个说进攻。其他将军有了一个方法可以知道哪个将军最先发送了消息,并且共识只听从最早的那个消息。(当然这边的最早是指一个编号,这两个消息应该是同一个编号,但是有一个是产生得比较早)