先修区块链(01):两份签名都正确,账本仍会冲突的成员问题,以及旧文分布式系统(33):PBFT、恶意节点与信任边界的认证副本。经典 PBFT 把服务限制在已知成员的确定性复制状态机中:n=3f+1,最多 f 个 Byzantine 副本;正确副本的密钥不泄露,网络可延迟与分区。任意两个大小 2f+1 的证书至少相交 f+1 个成员,交集中至少一个正确副本。这个算术只给同槽不双投提供基础,不是完整的换主安全证明。

flowchart LR
  C[客户端请求] --> P[primary: 分配 view 和序号]
  P --> PP[PRE-PREPARE]
  PP --> PR[PREPARE: 检查是否矛盾提议]
  PR --> CO[COMMIT: 传播锁定证据]
  CO --> EX[按序执行并回复]
  P -->|失联或作恶| VC[换主: 携带已准备证据]
  VC --> PP

恶意 primary 可对两个副本发不同请求摘要;副本通过准备阶段互核 (view, sequence, digest),不能把普通多数派的两票交点当作诚实。换主时新 primary 不能只看自己的交易池就随便覆盖旧 view 的已准备请求;跨 view 继承证书是安全性的一部分。安全性要求冲突请求不能在同槽被两个正确副本执行,长期异步时宁可停止提交。活性额外要求最终通信足够稳定,且能选到可用的 primary;永久分区不提供完成承诺。

交集算术能证明哪一步

固定四名已认证成员 {0,1,2,3},最多一名作恶,两份三票证书最少重叠两名;即使交集里有一名作恶,仍有一名遵守“同槽不支持冲突值”的正确副本。对七名成员、最多两名作恶的五票证书,最小交集三名,至少一名正确。examples/blockchain/models/quorums.py 枚举上述所有法定集合并记录见证。若错误地保持三票门槛却把成员扩充到五名,可能出现 {0,1,2} 与 {0,3,4}:交集只有 0,一旦 0 作恶,交集论证不再阻止冲突。examples/blockchain/evidence/14/ 保存代码 SHA、两项测试、原始输出和这一反例;这是有限集合枚举,不是 PBFT 消息协议实测。

交集之外,还要防止 view 切换抹掉已准备的请求。设正确副本在旧 view 对订单 A 的某序号形成准备证据;新 primary 如果只凭自己新收到的订单 B 分配该序号,两组副本可能依旧 view 与新 view 分歧。新 view 消息要继承足够的已准备信息并按协议选安全值;具体要看哪个阶段证书、由哪些副本携带,以及副本何时可回复客户端。集合程序既没建模跨 view 的锁与消息,也没运行恶意 primary 或网络延迟,因此不能用其 pass 声称 PBFT 安全、终局或活性通过。

练习一:f=1 时两个三票集合至少相交多少成员?答案:在四节点集合中至少两个,最多一个恶意,因此至少一个正确交点。练习二:让主节点把同序号不同摘要分发到两个组,仅有一轮 PRE-PREPARE 能否提交?答案:不能;正确副本必须核对后续准备、提交及 view 证据。法定集合枚举 MODEL_RUN;冲突提议、换主和消息层 NOT_RUN,旧系列实验也不能算新系列验收。

可迁移原则:交集论证要连同成员模型、正确副本不双投与换主继承一起写。参考:PBFT 原论文入口(本环境未获取正文,源码 SHA 与实验另待核)。导航:区块链(13):沿交易和候选块追踪 Bitcoin 总体架构 · 14 · 区块链(15):PoS 权重、普通惩罚与可罚没行为。