PBFT如何在区块链中应用?

时间:2018-02-08 22:56:44

标签: blockchain fault-tolerance

我试图理解PBFT(实际拜占庭容错)如何应用于块链中。阅读paper后,我发现PBFT达成共识的过程如下:

  
      
  1. 客户端向主
  2. 发送调用服务操作的请求   
  3. 主要将请求多播到备份
  4.   
  5. 副本执行请求并向客户端发送回复
  6.   
  7. 客户端等待来自不同副本的f + 1个回复,结果相同;这是手术的结果。
  8.   

这就是我理解它如何在块链中应用的方式:

  1. 首先,选定的主节点想要将事务A写入链,它将事务A广播到其他节点。
  2. 如果事务合法,任何节点都会收到事务检查。如果交易被认为是合法的,那么节点将向这一轮共识中的所有节点广播合法信号。
  3. 任何接收等于或大于f + 1响应的节点都会将事务写入其自己的链。
  4. 以下是我的问题:

    对于故障节点,如果他们不能将块写入其链中,则它们将保持与健康节点不同的链。在下一个共识中,现有的链条将首先被选中。节点如何知道哪一个是正确的链?

    在步骤1中,选举节点将事务发送到其他节点。 “其他节点”是指网络中的所有节点吗?如何确保所有节点都包含在共识中,因为没有集中代理。

1 个答案:

答案 0 :(得分:2)

  

节点如何知道哪一个是正确的链?

为了容忍拜占庭故障节点,网络中至少需要 3f + 1 节点。 PBFT是可以容忍拜占庭故障的算法之一。因此,PBFT可以容忍最多 f 拜占庭节点。 如果您使用PBFT,则可以容忍 f 恶意节点数量。如果有 f 个数量的恶意节点未能将块写入其链中,导致与正确节点不一致,那么可以认为来自其余的相同链 2f + 1 节点是正确的。 (正确的节点总是以相同的顺序将完全相同的数据输出到同一个请求)。

  

“其他节点”是指网络中的所有节点吗?如何确保所有节点都包含在共识中,因为没有集中代理。

在PBFT设置中,应建立所有节点的标识。为此,应该有中央权限来确定节点是否可以加入网络。 (重要:中央权威只参与身份管理,而不是算法本身

为什么需要这个?这是因为PBFT通过投票机制工作,当任何人(包括恶意节点)都可以加入网络时,投票就不安全。例如,主要建议的值只能以state machine replication的方式记录到所有节点,这意味着至少需要 2f + 1 约定的匹配消息接受正确的节点。

如果没有受信任的身份管理,Sybil attack是可能的。这就是为什么PBFT不是开放区块链的主要原因,它允许任何节点可以自由加入或离开网络。