【区块链】——区块链学习初探(四)

联盟链中的共识机制

上一篇中介绍了基于法院业务的区块链样例,使用的是比特币链式的结构,但在实际法院这种政府机关使用的区块链中,使用的不是比特币链这种公有链,而是更符合政府网络架构(机关内部网)的联盟链或私有链。更多是联盟链,联盟链中组织与组织的关系很好地还原了各个内部网的关系。

上一篇中介绍的“未输出交易(UTxO)”模式与计算特定难度Hash的“工作量证明(PoW)”这些共识机制在联盟链中是没必要的:

  • 首先UTxO模式更适用于交易的场景,上文中修改一条案件要通过“A给A交易一条新的案件”来实现,很笨拙也很难理解。
  • 其次,联盟链中节点数基本固定,也就是说稳定有一个算力最高的节点,那么所谓的PoW共识就成了一个节点的固定工作,和中心化没什么区别。

在联盟链中通常是将对数据的“操作”广播给大家,等待大家验证,这种算法叫“实用拜占庭算法(Practical Byzantine Fault Tolerance)”

 

什么是拜占庭将军问题

由于拜占庭帝国国土辽阔,所以驻守军队之间分隔的很远。每个军队的实力都差不多,将军们平时只能依靠信使相互传递消息。当拜占庭和强大的敌国发生战争时,任意单独的军队都无法战胜敌人,但是超过一半以上的军队联合起来同时进攻就可能赢得战争。但是将军中可能存在叛徒,给其它将军传递错误的信息,干扰其他将军的行动。比如说现在有ABC三个将军,其中B是叛徒,当A向B、C发出提议,某日早晨6点开始进攻,B收到消息,向A回复同意该协议,并向C提议某日下午4点开始进攻,此时C收到了两份不一样的提议,这就使C产生了迷惑。

在分布式系统中,特别是在区块链网络环境中,也和拜占庭将军的环境类似,有好的节点(类似忠诚的拜占庭将军),有坏节点,还有恶意节点(类似叛变的拜占庭将军)。通常,这些发生故障节点被称为拜占庭节点,而正常的节点即为非拜占庭节点。

要想解决这一问题就要保证消息不可伪造,消息正确传递,不受叛徒影响。

 

 

PBFT

 

假设网络中有F(eg.2)个坏节点,则节点总数为3F+1个,换句话说假设网络中有N个节点,则可以容忍小于N/3个坏节点。

如上图具体流程是这样的(绿色是正常、红色是异常、黄色是延迟):

  • 某节点客户端发起变更请求,则发送一条Request到主节点(自己),Request中包括“消息内容”、“消息摘要”、“具体操作”、“请求时间”、“客户端标识”以及“客户端签名”。
  • 之后主节点进入Pre-Prepare阶段,验证自己收到的客户端的Request。验证成功则发送一条Pre-Prepare到所有节点(含自己),Pre-Prepare中包括“消息内容”“消息摘要”“本次验证流程编号”“Pre-Prepare处理时间”以及“主节点签名”。
  • 之后各个节点进入Prepare阶段,验证自己收到的主节点的Pre-Prepare。验证成功则发送一条Prepare到所有节点(含自己),Prepare中包括Pre-Prepare的全部内容加上“本节点Prepare编号”和“本节点Prepare签名”。
  • 之后各个节点进入Commit阶段,验证自己收到的各个节点的Prepare。如果收到并验证成功了2F+1个Prepare消息,则发送一条Commit到所有节点(含自己),Commit中包括Prepare的全部内容加上“本节点Commit编号”和“本节点Commit签名”。
  • 之后各个节点进入Reply阶段,验证自己收到的各个节点的Commit。如果收到并验证成功了2F+1个Commit消息,则执行这次Request的“具体操作”,并发送一条Reply到客户端,Reply中包括Commit的全部内容加上“操作结果”。
  • 最后如果客户端收到并验证F+1个Reply消息,则说明执行成功。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值