PBFT如何应用于区块链?

How PBFT applied in block chain?

我想了解PBFT(practical byzantine fault tolerance)是如何在区块链中应用的。看完paper,我发现PBFT达成共识的流程如下:

  1. A client sends a request to invoke a service operation to the primary
  2. The primary multicasts the request to the backups
  3. Replicas execute the request and send a reply to the client
  4. The client waits for f + 1 replies from different replicas with the same result; this is the result of the operation.

我是这样理解它在区块链中的应用的:

  1. 首先,选出的主节点要将交易A写入链上,它会将交易A广播给其他节点。
  2. 任意节点收到交易后检查交易是否合法。如果交易被认为是合法的,节点将向本轮共识中的所有节点广播合法信号。
  3. 任何收到等于或大于f+1响应的节点都会将交易写入自己的链。

这是我的问题:

对于发生故障的节点,如果它们一直无法将块写入其链,它们将拥有与健康节点不同的链。在下一次共识中,现有链将首先被拾取。节点如何知道哪一个是正确的链?

在步骤1中,选举的节点将事务发送到其他节点。 "other nodes" 是否表示网络中的所有节点?由于没有中心化机构,如何确定是否所有节点都包含在共识中。

How do nodes know which one is the correct chain?

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

Does "other nodes" means all nodes in the network? How to make sure if all nodes included in the consensus because there is not a centralized agency.

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

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

如果没有受信任的身份管理,Sybil attack 是可能的。这也是PBFT不适合任何节点自由加入或离开网络的开放区块链的主要原因。