Hyperledger Fabric

Table of Contents

1 Hyperledger Fabric

Hyperledger Fabric是一个开源的“分布式账本”实现,主要由IBM开发主导。

下面是它的一些主要概念:

  • Chaincode: Chaincode is software that encodes key value pairs or text-based data (JSON) and transaction instructions for modifying this information.
  • Smart contract: 就是上面介绍的chaincode。
  • Channel: A Channel is formed as an offshoot of the system chain; and best thought of as a “topic” for peers to subscribe to, or rather, a subset of a broader blockchain network. A peer may subscribe on various channels and can only access the transactions on the subscribed channels. Each channel has a unique ledger, thus accommodating confidentiality and execution of multilateral contracts. 一个blockchain系统可以支持多个无关的子系统,如一个用于记录用户的房屋交易信息,一个用于记录用户的汽车交易信息,这就是两个Channel,它们之间相互独立,每个Channel对应一个不同的总账簿(Ledger)。
  • Peer: 存放区块链数据的结点,它同时有endorse和commit功能。
  • Orderer: 用于对交易进行排序。如果一个Channel中,“同时”发起了两个交易,按照什么顺序把它们放入到Blockchain系统中呢?这就需要先排序了。如果系统中只一个Orderer结点,则实现可以很简单,比如先收到哪个交易就把该交易放前面(solo模式);如果系统中有多个Orderer结点,则相对麻烦一些,可以借助kafka等分布式队列工具来进行排序(kafka模式),都往同一个队列(一个Channel对应一个队列)中写,读出来的顺序自然就是排序后的顺序。

参考:http://hyperledger-fabric.readthedocs.io/en/release-1.0/

1.1 Transaction lifecycle in v1.0 of Hyperledger Fabric

Fabric 1.0中Transaction的流程如图 1 和图 2 所示。

hyperledger_fabric_tx_lifecycle.png

Figure 1: Transaction lifecycle in v1.0 of Hyperledger Fabric

图片摘自:https://www.ibm.com/developerworks/cloud/library/cl-top-technical-advantages-of-hyperledger-fabric-for-blockchain-networks/index.html

hyperledger_fabric_tx_common_case.png

Figure 2: Illustration of one possible transaction flow (common-case path)

图片摘自:http://hyperledger-fabric.readthedocs.io/en/release-1.0/arch-deep-dive.html

2 Hyperledger Fabric Consensus

2.1 区块链中的共识算法

在区块链实践中,Block一个接一个地连在一起(当前Block引用着前一个Block的Hash值),为了确保链是唯一的,我们需要寻找一种机制来确定由谁创建Block,这就是“共识算法”。在比特币中,谁先挖矿成功,谁就创建Block,这种共识算法被称为POW(Proof-of-Work)。 在Hyperledger Fabric中,通过Orderer节点来实现共识,它利用了Kafka分布式消息队列的功能,其基本原理是大家把Transaction发送到Kafka的同一个Topic中,从Topic中读出来后自然就是有序的了,再组装为一个个Block即可。

2.2 Orderer源码分析

可以认为Orderer就3个线程(当然这是不准确的,这种简化不影响核心问题的描述):一个线程实现Broadcast这个gRPC service(接收Peer发来的Transaction,并发送到Kafka中);另一个线程从Kafka中取Transaction,并封装为一个个Block;第三个线程实现Deliver这个gRPC service(发送Block给Peer)。整个过程如图 3 所示(图片摘自https://github.com/yeasy/hyperledger_code_fabric/blob/master/process/orderer_workflow.md)。

hyperledger_fabric_orderer_workflow.png

Figure 3: Orderer提供的服务

笔者基于Hyperledger Fabric 1.1源码,总结了Orderer节点的主要代码执行流程,如图 4 所示。

hyperledger_fabric_orderer_src.png

Figure 4: Hyperledger Fabric Order源码流程(基于git分支release-1.1)


Author: cig01

Created: <2018-04-21 Sat 00:00>

Last updated: <2018-07-24 Tue 23:23>

Creator: Emacs 25.3.1 (Org mode 9.1.4)