拜占庭将军问题是学习比特币技术一个绕不开的话题。下次听别人谈起拜占庭,你也可以过去侃两句啦。
什么是拜占庭将军问题?
拜占庭将军问题(ByzanTIne failures),是由计算机科学史上的传奇人物莱斯利·兰伯特提出的。主要针对点对点通信中的基本问题——分布式系统一致性问题。
是不是有种不明觉厉的感觉?完全听不懂啊!
别着急,继续往下看呗。
兰伯特说:故事让问题变得受欢迎。所以,拜占庭将军问题,是兰伯特在研究分布式系统容错性时,编的一个故事:
拜占庭帝国想要进攻一个无比强大的敌人,派出了10支军队去包围这个敌人。由于这样那样的原因,这10支军队不能集合在一起进攻,必须分开驻扎,然后同时发起攻击。
而这个敌人十分的强大,可以同时抵抗5支拜占庭军队的袭击。拜占庭军队里的任何一支,想要单独进攻的话,都毫无胜算。除非至少超过一半(即6支及以上的军队)同时进攻,才能打败敌人。军队分散在敌人的四周,依靠通信兵来相互传递消息:商量“要不要进攻”和“什么时候进攻”。
(因为存在消息丢失的不可靠信道上,试图通过消息传递来达到一致性,是不可能的。所以,在研究拜占庭将军问题的时候,我们已经假定了信道是没有问题的。即所有的通信兵是靠谱的,没有叛徒。)
那么问题来了,如果将军里有叛徒,那么这个叛徒将军可能发送错误消息。比如:告诉其中4只军队要进攻,然后告诉另外5只军队不进攻,然后只有4只军队同时进攻,吃了败仗。剩下5只军队,也无法战胜这个强大的敌人。最后拜占庭军队战败。叛徒真的面黑心黑。
在这种状态下,拜占庭将军们,能不能找到一种分布式的协议,让他们能够远程协商,保证多于6支军队在同时发起进攻?从而打赢这场仗?
计算机科学中,有类似的问题,比如安全漏洞。
系统中的不同节点,会对观察者提供不同的信号。在不知道这些信息是否损坏的情况下,如何交换信息?
比特币和拜占庭将军问题有什么关系?
比特币解决了网络中存在的拜占庭将军问题。
比特币解决了分布式系统信息不一致的问题。
众所周知,比特币是一个分散网络,一个个节点,一个个矿工,就像包围敌人的拜占庭将军们。
而矿工记录的区块信息是否真实?会不会造假人?如何判断?
作恶的矿工造假账,就像混进了军队里的的叛徒。他们会跟其他节点说,他们的假信息是真的,他们记的假账也是真的。叛徒混了进来,会破坏整个比特币网络的真实性和有效性。
大神中本聪解决了这个问题。
首先,大神在设计比特币时,采用了工作量证明机制(PoW)。矿工需要找到一个正确的随机数,才能记账。而随机数是大家认可的数学逻辑,随机嘛,谁都控制不了。这样,所有的矿工(将军)达成共识,投身于轰轰烈烈的挖矿事业中。
其次,造假成本高,真实有奖励。矿工挖矿,要耗费越来越多的时间、电力、资源,造假成本太高。而新币奖励,也激励着矿工真实记账。
第三,每个节点(将军)手里,都有一份实时与其他节点同步的账本,而且账本有时间戳加持,有签名验证身份,如果谁造假,可以非常清楚何人何时造假。
最后,当意见不一致,只要大多数人(超过50%)的人同意,少数服从多数,在分散式网络中共识达成。只要好节点是大多数,整个比特币网络的记账就是真实的。
来源: 区块链研习社
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)