About PBFT algorithm

首先要搞清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. 每个阶段主节点崩溃会发生什么?