当我们在 PBFT 中有完全错误的副本时,视图更改协议如何工作?

问题描述

我正在考虑一个案例,比如我们有 10 个副本,即 3f+1=10 意味着我们可以有 3 个错误的副本。现在,假设一个场景,其中主节点出现故障并与其他两个故障副本串通,其余非故障副本位于 4(G1) 和 3(G2) 组中。 现在,主要尝试通过向每个非故障组(例如 0 到 G1 和 1 到 G2)提出不同的客户端请求来作弊。在 G1 中的节点的情况下,仲裁 2f+1 可以达到 4(G1)+3(faulty),因此可以在本地提交,而 G2 不能发生,因为它们有 3(G2)+3(faulty),即只有2楼因此,我假设 G2 副本将超时并将启动视图更改过程。但根据我的理解,只有当新的主要收到 2f+1(包括 self)视图更改消息时,才会发生视图更改。但是在这种情况下,错误可能不会发送视图更改,这让我们只剩下 G2(3) 视图更改消息,而 G1 从不要求更改视图,因为它们已经在法定人数中。这不满足安全属性。那么,PBFT 究竟是如何解决这种情况的呢?

解决方法

如果您正在考虑单独的组,则应在这些组内考虑 PBFT。如果你的 PBFT 在 10 个成员以内,那么这意味着他们都参与了对 EACH 请求的确认。

,

Primary 无法在准备阶段发送消息。如果主节点无论如何发送准备消息,所有非故障副本都会将此检测为故障主节点。他们将立即启动视图更改。因此 G1 不会达到提交本地状态。 有关详细信息,请参阅此处Sawtooth PBFT Architecture