HotStuff是BFT共识的变种,大致思路和其他类似,系统中有两种角色:leader和replica, leader由选举算法产生。
共识过程为leader发起proposal,replica对proposal投票,投票数达到quorum时,则共识达成。
但HotStuff有以下特点:
- leader收集投票,而不是每个节点都收集
- 门限签名,使用公钥一次验证投票集
- 三阶段投票
- 主动更换leader,每一轮共识后更换leader
- chained hotStuff,可以同时共识多个区块
1. 由leader收集投票
在PBFT中,每个节点都做了一次收集投票信息的工作,这就导致了整个算法的工作量是重复的(起码对于所有非拜占庭节点而言是重复的,而HotStuff仅由leader收集投票,对比如下:

2. 门限签名
门限签名中,每个节点有自己的私钥,由共同的公钥。由私钥签名投票,leader收集投票后,合成一个统一的签名,
这个最终的签名可以由一个公钥验证。
对比PBFT中,需要对每个投票的签名执行验证,而采用门限签名,只需要验证一次,就能证明了至少quorum个节点执行了投票。
3. 三阶段投票
共识流程:
- New View阶段。replica向leader发送new view消息,包含replica自身最新状态,leader由此决定proposal
- Prepare阶段。由leader提出proposa消息l(block),replica验证后发送prepare vote, leader收集prepare vote形成prepare-QC。QC(quorum certificate): 表示quorum个投票集合。
- Precommit阶段。prepare-QC形成后,将其放入precommit消息中,由leader广播给replica。replica验证后发送precommit vote。 leader收集precommit vote形成precommitQC,也叫lockedQC
- Commit阶段,leader把precommitQC放入commit消息中,广播给replica,replica验证后发送commit vote, leader收集commit vote形成commitQC
- Decide阶段。leader把commitQC发送给replica,更新view,共识完成

其中投票阶段时prepare, precommit和commit,属于三阶段投票。
4. 主动更换leader
与pbft不同,hotstuff每一轮共识后,都会更换一个leader,提供更大的随机性和安全性
5. chained hotStuff
chained hotStuff是一种模式,前面的hotstuff流程是basic hotStuff,可以用chained hotstuff进一步提升效率。可以理解为并发共识。
在传统的共识流程中,下一次共识的开始,需要等待上一次共识完成,形成上一个finalized Block之后才可以,如下:
BlockN:prepare->precommit->commit -> BlockN+1:prepare->precommit->commit
BlockN+1需要等BlockN共识完,是出于安全考虑,但牺牲了性能。
可以大胆一点,在BlockN的prepare阶段结束之后,乐观认同BlockN提出的Prosal(Block)会被finalize,那么下一个leader就可以在这个还未finalized的Block基础之上,立即开始BlockN+1的共识,形成一个并发的共识模式,如下:
BlockN prepare->precommit->commit
BlockN+1 prepare->precommit->commit
BlockN+2 prepare->precommit->commit
这样一来,共识的速度就加快了,假如每一次投票的时间都差不多,那么BlockN达到commit阶段的时候,BlockN+2处于prepare阶段。
但问题也有的,如果BlockN的proposal有问题需要回滚,基于它的BlockN+1和BlockN+2都需要回滚。
但总体上来讲,回滚的概率是低的,这种乐观模式效率是提升的。
Ref
回复 agodelo 取消回复