# About PBFT algorithm

By [Untitled](https://paragraph.com/@0x8827659af88ae46b5c07cf76a1df419a5e334bd0) · 2021-10-09

---

### 首先要搞清PBFT算法的目的：

从本地节点视角来看：我必须知道大多数节点都知道 大多数节点收到了这个消息 从全网角度看：大多数节点都知道 大多数节点知道 大多数节点收到这个消息。

从本地视角剖析每个阶段，判断是否能满足最终的目的 ： pre-prepare: 我收到了这个消息 -> 我告诉别人我收到消息了（prepare消息） prepare: 我收到大多数的消息,代表我知道大多数人收到了该消息，但我不能确认别人收没收到 -> 我告诉别人我知道大多数人都收到这个消息了（commit） commit：我收到大多数commit消息 -> 我知道大多数人都知道大多数人收到这个消息，目的达成 -> reply

1 为什么三阶段不能两阶段？ 思考清楚PBFT最终的目的和每阶段达到的效果即可理解。 2. 为什么前两个阶段2f+1个消息的确认而client只需要f+1个reply即可确认？ 拜占庭节点可以给不同的节点发送不通的消息，也可以只给一部分节点发送消息。所以前两个阶段中f+1是肯定不可以的， 因为网络中至多f个恶意节点，所以只要收到额外f+1个消息即可确认该消息的可靠性，总共2f+1。 在提交阶段，假设最坏的情况，在f+1个reply消息中有f个恶意节点，那么肯定有一个是正确的节点，也就是说这个节点一定已经收到了大多数节点的commit消息，也就是说此时大多数节点一定都知道大多数节点收到了这个消息，也就是说这个消息已经被大多数人知道，所以最终可已提交。 3.viewchange具体做了哪些事？

1.  每个阶段主节点崩溃会发生什么？

---

*Originally published on [Untitled](https://paragraph.com/@0x8827659af88ae46b5c07cf76a1df419a5e334bd0/about-pbft-algorithm)*
