我试图理解PBFT(实际拜占庭容错)如何应用于块链中。阅读paper后,我发现PBFT达成共识的过程如下:
- 客户端向主
发送调用服务操作的请求- 主要将请求多播到备份
- 副本执行请求并向客户端发送回复
- 客户端等待来自不同副本的f + 1个回复,结果相同;这是手术的结果。
醇>
这就是我理解它如何在块链中应用的方式:
以下是我的问题:
对于故障节点,如果他们不能将块写入其链中,则它们将保持与健康节点不同的链。在下一个共识中,现有的链条将首先被选中。节点如何知道哪一个是正确的链?
在步骤1中,选举节点将事务发送到其他节点。 “其他节点”是指网络中的所有节点吗?如何确保所有节点都包含在共识中,因为没有集中代理。
答案 0 :(得分:2)
节点如何知道哪一个是正确的链?
为了容忍拜占庭故障节点,网络中至少需要 3f + 1 节点。 PBFT是可以容忍拜占庭故障的算法之一。因此,PBFT可以容忍最多 f 拜占庭节点。 如果您使用PBFT,则可以容忍 f 恶意节点数量。如果有 f 个数量的恶意节点未能将块写入其链中,导致与正确节点不一致,那么可以认为来自其余的相同链 2f + 1 节点是正确的。 (正确的节点总是以相同的顺序将完全相同的数据输出到同一个请求)。
“其他节点”是指网络中的所有节点吗?如何确保所有节点都包含在共识中,因为没有集中代理。
在PBFT设置中,应建立所有节点的标识。为此,应该有中央权限来确定节点是否可以加入网络。 (重要:中央权威只参与身份管理,而不是算法本身)
为什么需要这个?这是因为PBFT通过投票机制工作,当任何人(包括恶意节点)都可以加入网络时,投票就不安全。例如,主要建议的值只能以state machine replication的方式记录到所有节点,这意味着至少需要 2f + 1 约定的匹配消息接受正确的节点。
如果没有受信任的身份管理,Sybil attack是可能的。这就是为什么PBFT不是开放区块链的主要原因,它允许任何节点可以自由加入或离开网络。