什么是区块链?
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
显而易见,利用区块链构造基于互联网的去中心化账本,需要解决的首要问题是如何实现不同节点上的账本数据的一致性和正确性,即如何达成共识,这就需要借鉴已有的分布式系统中实现状态共识的算法。
在20世纪80年代出现的分布式系统共识算法,是区块链共识算法的基础。
我们从基本的拜占庭容错技术入手,逐步介绍适合于私有链/联盟链和公有链的共识算法。
(一)拜占庭将军问题
问题描述
拜占庭将军问题是20世纪80年代的一个假想问题。
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。
基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。
困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。
在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商达成一致,从而赢取战斗?
区块链网络的记账共识和拜占庭将军问题是相似的:
-
记账节点——将军
-
消息传递——信使
-
恶意节点——拜占庭节点
-
正常节点——非拜占庭节点
问题假设
应该明确的是,在研究拜占庭将军问题的时候,假定了消息传递的信道是没有问题的,并不去考虑通信兵是否会被截获或无法传