BFT-SMaRT是一个基于Java的开源库,为基于BFT的状态机复制算法提供了一套改善的解决方案;它实现了类似于PBFT的共识协议,但在无故障执行时具有更高的性能,且在拜占庭副本进行任意错误行为时能保证整体共识的正确性。另外BFT-SMaRt也是BFT类共识中第一个支持副本集合动态变更的库,用户可以根据自己的需要在不停机的情况下快速进行共识网络拓扑结构的更新。与PBFT不同,BFT-SmaRt库具有更好的模块化设计,实现了共识算法与状态机复制,状态传输,通信等模块的完全分离。BFT-SmaRt库还具有简单性,它把所有的复杂性都封装在简单的API中,程序员可以使用它来实现确定性的服务,客户端只需要使用简单的invoke方法即可向共识网络提交待共识的请求消息。
常规的bft-smart共识算法如下图:
JDChain在其基础上进行了局部优化,目前共识图如下:
1)广播:多个客户端向所有共识节点发起广播;
2)提议:通过Leader节点向其他节点发出提议(待排序消息);
3)回执:收到提议后向其它节点发送写消息;
4)预算:收到2f+1个写消息后,进行写账本预处理;
5)接受:至少2f+1个节点预处理结果一致,向其它节点广播接受提议的消息。
6)裁决:收到至少2f+1个节点的“接受提议”消息,则正式裁定此提议生效。
7)提交:将此提议写账本;
8)响应:将提议执行结果反馈给其对应的客户端(共识客户端)。