Hyperledger Fabric 的共识

Consensus of Hyperledger Fabric

我是 Hyperledger Fabric 的新手。我正在阅读 Fabric 最新版本的文档,但我不清楚 Fabric 的共识。 Fabric 使用的共识是什么?它是如何工作的?请解释。

我假设您了解区块链上下文中共识的基础知识。 Hyperledger Fabric 的共识可以看作是相同的特例,可能是一个功能强大的共识。它会在多个阶段检查交易,以确保写入分类帐的变更的许可、顺序和正确性。

在Fabric中,当你在执行一个交易的时候,如果没有出错,你会希望这个交易提交到账本上,即把这个交易按照正确的顺序写入账本的一个块中。然后通过协作过程在网络中的所有参与者之间始终如一地同步。所以这个确保顺序正确和数据同步的过程被称为共识

HLF 标准定义是

The process of keeping the ledger transactions synchronized across the network – to ensure that ledgers update only when transactions are approved by the appropriate participants, and that when ledgers do update, they update with the same transactions in the same order – is called consensus

这是通过以下方式在整个交易周期中完成的

  1. 当您提交交易时,即当您调用智能合约中的函数时,您使用的客户端 SDK 必须将该交易提案发送给背书人(特定于特定渠道中的智能合约) 此交易提案采用用户的加密凭据生成唯一签名
  2. 背书节点进行他们的检查,喜欢的提议是有效的,尝试交易的用户在该通道等中具有相同的特权。然后他们会模拟交易 - 并创建一个响应和 R/W 集。这是作为返回 SDK 的提案响应发送的。
  3. SDK 将它们累积并检查它们,然后将它们发送给订购者。 Orderer 将按时间对交易进行排序并创建一个块并将该块发送给相关通道中的所有节点
  4. 收到区块的节点开始检查区块中的每笔交易(使用验证系统链码),查看是否为所有交易完成了背书&r/w设置是否正确(MVCC检查)。根据支票,交易可能被标记为有效或无效

因此,一旦所有检查都正常,交易将被标记为有效并更新当前状态,最后写入块并相应地生成事件。通过这种方式,在 Hyperledger 结构中的多个阶段达成共识。我想你如果参考下面的这个 link 会更好理解 Hyperledger Fabric Transaction Flow

Hyperledger Fabric 中的共识分为 3 个阶段:背书、排序和验证。

背书由参与者背书交易的政策(n 个签名中的 m 个)驱动。(由我们定义)。

排序阶段将获得背书交易并同意将交易提交到账本。(我们可以使用任何排序服务,除了 solo、Kafka 和 Raft)。

验证采用有序交易块并验证 result.During 验证节点的正确性将验证排序者发送的交易(以块为单位)是否有效。

根据 Hyperledger fabric v1.4

One of the most important of the platform’s differentiators is its support for pluggable consensus protocols that enable the platform to be more effectively customized to fit particular use cases and trust models. For instance, when deployed within a single enterprise, or operated by a trusted authority, fully byzantine fault tolerant consensus might be considered unnecessary and an excessive drag on performance and throughput. In situations such as that, a crash fault-tolerant (CFT) consensus protocol might be more than adequate whereas, in a multi-party, decentralized use case, a more traditional byzantine fault tolerant (BFT) consensus protocol might be required.

交易的排序被委托给一个模块化组件以达成共识,该组件在逻辑上与执行交易和维护分类帐的对等方分离。具体来说,订购服务。由于共识是模块化的,它的实现可以根据特定部署或解决方案的信任假设进行定制。这种模块化架构允许平台依赖完善的工具包进行 CFT(崩溃容错)或 BFT(拜占庭容错)排序。

Fabric 目前提供两种 CFT 排序服务实现。

  1. 第一个是基于Raft协议的etcd库
  2. 另一个是Kafka(内部使用Zookeeper)