博客> 初步分析初链的pbft共识
初步分析初链的pbft共识
1小时前 评论:0 阅读:135 欧皇鱼子酱
区块链 初链 共识

最开始在区块链领域引进pbft的是fabric0.6,pbft是使用拜占庭容错算法,通过多轮次的交互保证各节点执行一致性。下面分析初链的pbft实现。 pbft经典流程:

 Enter your image description here:

pbft的特点是流水线作业可以实现异步的拜占庭容错共识,而且需明确共识节点数量及身份标识。分析初链pbft共识的思路如下: 1)网络报文消息类型 2)共识流程是否满足上图所示三个步骤 3)当节点出现SPoF时,系统可否正常工作 4)是否支持异步拜占庭 5)是否考虑DPoS攻击

1消息类型

提案消息:Request Msg ,客户端将交易消息提交至区块链节点 预准备消息:PrePrepare Msg, 将交易信息进行打包封装后生成预准备消息。 投票消息:VoteMsg ,包括Prepare与Commit流程。

2提案消息处理流程

1)节点接受到交易请求,数据结构包括:客户端编号、交易序列号、时间戳等参数。 2)将交易请求打包生成PrePrepare信息,进行交易广播,但发现问题在交易广播前需进行身份绑定,程序中没有发现类似签名机制来保证系统安全。

3 预准备消息处理流程

1)节点接受到预准备消息后,存储到对应的state槽中。每个预准备消息之间没有关联性,这种设计方式优劣各半,可以提高系统共识的并发能力,但没有存储前块Hash。降低恶意攻击成本,攻击者只修改某块消息而不会对其他产生影响。 2)将预提交报文重新封装成Prepare报文进行广播至其他共识组成员。这里有的地方需要注意:假设区块链节点数为N =3f + 1, 容错个数为f。如果N != 3f + 1的时候就要注意容错个数的计算。

4 Prepare消息处理流程

1) 接受prepare消息,判定是否已经满足大于2/3. 2)接受到的prepare满足了2/3,节点封装commit消息进行广播。

5 Commit消息处理流程

1) 接受Commit消息,判定是否已经满足大于2/3. 2)接受到的Commit满足了2/3,进行reply处理。 至此,pbft的基本流程都已经完成。

评审意见:

1)

评审维度:安全性

代码截图:

 Enter your image description here:

评审意见:发送的preprepare没有看到签名表明自身身份。

2)

评审维度:安全性

代码截图:

 Enter your image description here:

评审意见:直接使用http通信需要考虑自己设计传输压缩,如果有需求切换tls也不是很快捷。

3)

评审维度:完备性

代码截图:

 Enter your image description here:

评审意见:输出到控制台不便于进行日志管理,也不具有分级输出能力、日志滚动。

4) 评审维度:可用性 代码截图: 评审意见:目前并行共识技术可以高效的处理交易请求,提高系统的交易吞吐量。 5) 评审维度:健壮性 代码截图: 评审意见:由于在公有链中选择节点进行pbft,可以增加一些惩罚措施,如果在pbft过程中,大量重复投票,或者投恶意票,可进行链上惩罚扣除token。 6) 评审维度:可用性

代码截图:

 Enter your image description here:

评审意见:使用secp256k1曲线目前是安全的,但ed25519签名算法的效率被椭圆曲线效率高出一个数量级,可以考虑将算法做成可插拔,更换高速签名算法。

7)

评审维度:可用性

代码截图:

 Enter your image description here:

评审意见:拜占庭容错节点计算方式N >= 3f + 1 f <= (N + 1)/3, 这里不一定是问题但是需要注意。

8) 评审维度:可读性 代码截图: 评审意见:代码命名规则统一,易懂易读,且英文注释较多。外部人员可以非常快速的上手初链。

收藏
1
sina weixin mail 回到顶部