小伙伴关心的问题:HotStuff(hots stuff),本文通过数据整理汇集了HotStuff(hots stuff)相关信息,下面一起看看。

HotStuff(hots stuff)

论文地址:HotStuff: BFT Consensus in the Lens of Blockchain

HotStuff的主要特点:

通过在投票过程中引入门限签名实现了 O(n)O(n) 的消息验证复杂度。使用了流水线共识加快了共识效率。具有乐观响应性(Optimistic Responsiveness)安全性(Safety)与活性(Liveness)解耦

使用限签名实现了 O(n) 的消息复杂度,在 (k−n)(k-n) 门限签名的场景下,HotStuff 的阈值 kk 取 2f+12f+1 。(节点数量 n=3f+1n=3f+1 )。使用门限签名带来的一个缺点:门限签名在生成私钥的过程是中心化的,而且集群节点数量变化的时候也需要重新生成和分配私钥。

使用门限签名实现线性复杂度

这里解释一下为什么众多 BFT(Byzantine Fault Tolerance)算法的投票通过的阈值都是 2f+12f+1 :我们假设在 n=3f+1n=3f+1 的情况下,将投票通过的阈值设为 2f2f ,假设现在网络有两个提议 A 和 B ,其中有 ff 个好人只对提议 A 投票,另外 ff 个好人只对提议 B 投票,然后 ff 个坏人对两边都投票,那么提议 A 和 B 都会被通过,此时网络出现了不一致,造成了分区。所以投票通过的阈值必须设为 2f+12f+1 就能保证每次投票都至少有 f+1f+1 个好人,那么根据抽屉原理每两次投票至少有会有 11 个好人在两次都投了票,好人不会给两个冲突的提议投票,这就能保证冲突的提议永远不会通过,从而保证系统的安全性。

HotStuff在共识通信过程使用流水线共识加快共识效率,这也并非HotStuff,这在实践中很常用。原理很简单,看起来是和CPU指令流水线类似。即在 cmd1cmd_1 的 PRE-COMMIT 阶段和 cmd2cmd_2 的 PREPARE 阶段并行,cmd1cmd_1 的 COMMIT 阶段、 cmd2cmd_2 的 PRE-COMMIT 和 cmd3cmd_3 的 PREPARE 阶段并行……

三阶段的 HotStuff 具有乐观响应性,我个人对响应性的理解就是不会被阻塞,客户端发来的cmd 能够立马被处理。论文4.4有解释这个东西。

安全性(Safety)与活性(Liveness)解耦。

投票规则,当收到的新快 bnewb_{new}同时满足以下条件时replica会给primary投票,否则不投票 vheight">bnew.height>vheightb_{new}.height > vheight b_{lock}.height) ">(bnewisonthesamebrancha *** lock)or(bnew.justify.node.height>block.height)(b_{new}\ is\ on\ the\ same\ branch\ as\ b_{lock} )\ or\ (b_{new}.justify .node.height > b_{lock}.height) 执行规则,满足以下条件时会递归执行条件见标红的伪代码

按照上面的规则来投票和执行就能保证系统的安全性,并且是可证明的。在实践过程中,将安全性通过如上的规则来决定,活性通过一个独立的模块起搏器(pacemaker)来保证。

工程实现

GitHub开源地址:https://github.com/hot-stuff/libhotstuff

. ├── CMakeFiles ├── doc ├── examples # 例子,里面有实现的 hotstuff,以及客户端 ├── include # HotStuff . *** 件 ├── libsecp256k1-prefix ├── salticidae # 最小异步网络通信库,也是由作者实现的 ├── scripts # 测试、部署相关脚本 ├── secp256k1 # 椭圆曲线库 ├── src # HotStuff .cpp 文件 └── test

include 和 src 实现了事件驱动的 HotStuff 框架,依赖通信库salticidae和加密库secp256k1。 examples 包含了 hotstuff_app.cpp (共识节点)和 hotstuff_client.cpp (客户端),该部分为 HotStuff 框架的运行提供了"事件"。

hotstuff_app.cpp 主要有三个event-loop 线程/进程,req_ec、resp_ec、ec,分别负责请求的event-loop进程 、回复的event-loop进程、主event-loop进程(统计数据打点、发起pacemaker)

工程实现

HotStuff 的实现基于事件驱动,多处使用了libuv库。这样做的目的是为了提升性能。 libuv库是多平台C库,提供对基于事件循环的异步I/O的支持

更多HotStuff(hots stuff)相关信息请关注本站,本文仅仅做为展示!