Hyperledger Fabric简介

超级账本(Hyperledger)是一个开源区块链的大型项目。它使用区块链技术促进跨行业协作,包括分布式账本框架、身份识别、访问控制和智能合约、客户端库、GUI和实用程序库。 Hyperledger项目于2016年初成立,是Linux基金会的一部分,目前拥有包括IBM在内的50多名成员。我们常听说的Fabric是Hyperledger的五个子项目之一,其他子项目包括Sawtooth、Indy、Burrow 和 Iroha。Fabric是其中最活跃的项目,是一个区块链平台或运行智能合约的基础设施。本篇将从功能特性、应用实例、优势劣势三方面介绍一下Fabric。

功能特性

1.身份管理

这是Fabric最出名的特性,所有参与者都有已知的身份。区块链在某些项目中无法落地,有一部分原因就是法律规定的参与者都必须有特定的已知的身份。比如私募股权公司或天使投资人,此网络的参与者需要是已知的,而且在资本投资方面具有可信度,然后才能参与区块链。因此Fabric是目前为止在设计上最贴近联盟链思想的区块链,考虑到商业应用对安全、隐私、监管、审计、性能的需求,提高准入门槛,成员必须被许可才能加入网络。

Fabric网络中的不同参与者,都具有封装在X.509数字证书中的数字身份。这些身份确实很重要,因为它们确定了对资源的确切权限以及对参与者在区块链网络中拥有的信息的访问权限。要使身份可以验证,它必须来自可信任的权威机构。会员服务提供商(MSP)是Fabric用于身份验证的一个模块,它是如何实现的?我引用一个官网的例子,机翻见谅:

想象一下,你去超市购买一些杂货。在结账时,您会看到一个标志,表示只接受Visa,Mastercard和AMEX卡。如果您尝试使用其他卡付款 - 我们称之为“ImagineCard” - 无论该卡是否真实且您的帐户中有足够的资金都无关紧要。它不会被接受。
拥有有效的信用卡是不够的 - 它也必须被商店接受! PKI和MSP以相同的方式协同工作 - PKI提供身份列表,MSP说哪些是参与网络的给定组织的成员。
PKI证书颁发机构和MSP提供了类似的功能组合。 PKI就像一个卡提供商 - 它分配了许多不同类型的可验证身份。另一方面,MSP类似于商店接受的卡提供商列表,确定哪些身份是商店支付网络的可信成员(参与者)。 MSP将可验证的身份转变为区块链网络的成员。

公钥基础结构(PKI)网络中提供安全通信,和SSL证书原理一样,由权威机构发行证书、有一套机密的加密策略。这里涉及到一个权威机构的参与认证成员,这个在普遍的去中心化思想中好像是不可接收的。但是我个人觉得Fabric应用场景是联盟链,有权威机构的参与反而更容易把区块链技术推向应用市场。

2.模块化

Fabric构建于一种模块化架构之上。区块网络主要由两个应用构成:Orderer和Peer,其中Orderer负责交易共识并生成区块,Peer节点负责模拟执行交易和记账。这种划分可以使整个平台拥有更好的弹性和扩展性。Peer和Orderer都是模块化设计,重要模块支持插拔,比如共识机制、合约执行环境、加密算法、证书服务模块等。

模块化设计使得Fabric更像是一个区块链框架,针对不同的服务可以高度定制化,并且类似业务可以复用大部分模块。比如不同的公司对加密算法的要求不同,这个设计就能满足多样性的需求。另外,这种模块化结构是动态可增长的。比如一家管理外汇汇率的公司,有新的规则和标准,甚至添加一家新银行,他们能够以编程方式完成此操作。

3.数据隐私

区块链最有可能被应用到金融领域,金融领域对数据的隐私非常注重。许多金融实体表明担忧竞争对手看到所处理的交易数量。一些金融机构没有考虑通过“足够”的加密来保护其数据。

以以太坊为例,ERC20 token的交易的发送方、接收方、交易数量,其实都是透明公开的。如果一个以太坊应用需要上传个人信息,那么只要查到这笔交易,就能找到个人信息的数据,甚至是该应用的所有用户数据。而Fabric 中支持的渠道允许仅将数据传递给需要知道的相关方。

Fabric默认的通道功能可以屏蔽掉不需要看到数据的其他机构。在同一个通道内的节点仍然能够看到全部数据;相同通道内有权限控制机制,简单的讲就是交易可以指定哪些节点需要保存数据,其他节点只会存证hash而不会保存数据。除了区块链系统本身提供的安全机制外,应用程序也可以选择对数据进行加密来保护隐私数据,即记录在链上的数据本身就可以加密保存。

4.智能合约

在Fabric中智能合约叫做链码(chaincode),是上层应用与底层区块链平台交互的媒介。现阶段,Fabric提供Go、Java等语言编写的链码,但不管是哪种语言编写的链码,套路都是差不多的。所有的链码都继承两个接口,init和invoke。init接口用于初始化合约,在整个链码的生命周期里,该接口仅仅执行一次。剩下的invoke接口是编写业务逻辑的唯一入口,虽然只有一个入口,但是可以根据参数传递的不同自由区分不同业务逻辑,灵活性很高。比如应用开发者规定Invoke接口的第一个参数是合约方法名,剩余的Invoke参数列表是传递给该方法的参数,就可以在Invoke接口方法体中根据方法名的不同分流不同业务了。chaincode的API大致可以分为五类:

第一大类与state操作相关。通过这些API可以根据key来查询/添加/更新相应的state。这些API提供了单key的读写操作、key字典序范围读取操作、composite key读取操作、底层数据库语法的查询操作等。

第二大类与与参数相关。需要开发者自己调用API获取传入的参数。

第三大类与交易有关,并且这一类都是读操作,读取transaction中各种信息,比如transaction id、timestamp等。

第四类是与chaincode间相互调用有关的一个API。Fabric允许在一个chaincode中根据chaincode name和channel name去调用另一个chaincode。可以看到并没有deploy的API,也就是说,fabric不允许在一个chaincode中去部署新的chaincode。

最后一类也只有一个API,SetEvent。Fabric允许开发者定义自己的event,然后这个event会在transaction写进block时触发,因此开发者就可以自己写相应的event handler程序做一些相关的工作。

5.多通道

模块化里面提到了Orderer和Peer,这里也不得不解释一下。Orderers指提供共识服务的网络节点;Peers指的是维护账本的网络节点。每个Peer节点连接到共识服务的一个或多个通道,就像发布-订阅通信系统中的客户端一样。每个peer节点验证区块并将其提交到账本,然后向应用程序提供其他使用账本的服务。也就是说,在fabric中,一个peer可以参与信息隔离的各种不同的网络,维护特定网络的数据。这一点相比于其他主链的优势在于,其他主链几乎都需要客户端下载所有数据,并且一条主链上包含了所有的应用,网络拥堵、数据冗余的问题在多通道中得以解决。

结论

Hyperledger Fabric是一个许可制区块链的技术平台,旨在为商业化应用所使用。它是开源的,基于工业标准运行用户定义的智能合约,支持强大的安全性身份特征,并且使用具有可插拔共识算法的模块化架构。该架构目前正在发展,并在Hyperledger项目的治理下得到积极开发。

相关链接