这里说的是一些合约内容:
第一个介绍的是拜占庭将军问题:
拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。
这个例子大意是这样的:
拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。这10支军队在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?
拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问题。Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。所以,在研究拜占庭将军问题的时候,已经假定了信道是没有问题的.
paxos算法
这里给论文的原地址:https://www.microsoft.com/en-us/research/publication/paxos-made-simple/
重点说的是pbft共识算法。这个算法也算是paxos的一个变种。超级账本是用到这个算法。
在这个算法中一共有3f+1个节点。f个错误节点。
对于每一个节点都有节点我们编好号。假设我们一共有01234个节点。
还有我们的client。
1.我们的client发送一个request到各个节点,
2,节点收到消息后,肯定会先验证消息的真实性。然后把消息放到日志里。
然后reply给客户端。
3,当客户端收到f+1个一致性的reply后,client就get到一个weak certificate
4,client 有一个机制,如果在一定时间内没有收到足够的请求时。它会重新发送request。
以上就是pbft的最简化版本。很通俗易懂。。要达成共识,只需要f个节点的reply信息就可以了。
网友评论