摘要
超级账本(Hyperledger)是linux基金会下的众多项目中的一个。是由IBM、因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目,超级账本还包括5个框架项目:Sawtooth、Iroha、Fabric、Burrow、Indy和3个工具项目:Blockchain explorer、Cello、Composer。其中广为人知的是Fabric。当前成员大约140个,其中1/4来自中国,现在中国技术组由万达、华为、IBM担任主要负责,负责中国会员和中国需求的提供,以及推进代码。下图是项目之间的逻辑关系图:
Hyperledger Fabric:
区块链技术的一个实现,它的目标是成为开发应用和解决方案的基础,设计为模块化架构,允许组件如共识和成员服务模块,可以插入即用。
Hyperledger Sawtooth:高度模块化的分布式账本平台,Hyperledger Sawtooth是一个模块化平台,用以创建、部署和运行分布式账本。Hyperledger Sawtooth包含诺韦尔共识算法,计时验证(PoET), 它针对的是以最小的资源消耗处理大量的分布式验证器。
Hyperledger Iroha:轻量级分布式账本,侧重于移动。Hyperledger Iroha 是一个业务区块链框架,用于简单和容易地并入需要分布式账本技术的基础设施项目。
Hyperledger Burrow:智能合约客户端,是一个可以许可的智能合同机。Burrow发布于2014年12月,首次提供了一个模块化的、带经过许可的智能合约解释器的区块链客户端,它采用了部分以太坊虚拟机(EVM)的技术规范。
Hyperledger Indy:Hyperledger Indy 提供了工具、程序库和可重复使用的组件,用于提供基于区块链或者其它分布式账本的数字身份,从而让它们跨管理域、跨应用和其他silo进行互操作。
Hyperledger Explorer:展示和查询区块链块、事务和相关的Web应用。Hyperledger Explorer 可以查看、调用、部署或者查询区块、事务和相关数据、网络信息、链码和事务序列,以及任何其它保存在账本中的相关信息。
Hyperledger Cello:Bass工具集,帮助创建、管理、终止区块链。Hyperledger Cello 的目标是将按需的 “即服务” 部署模式带给区块链生态系统,减少创建、管理和终止区块链所需要的工作量。
Hyperledger Composer:Hyperledger Composer 是一个协同工具,用以创建区块链业务网络,加速智能合约及其跨分布式账本部署的发展。
什么是超级账本?
对于超级账本Hyperledger官方网站上的描述是:
1.创建企业级的、开源的、分布式账本框架和代码库,支持商业事务。
2.通过技术和业务的治理,为市场提供一个中立的、开放的和社区驱动的基础设施。
3.创建技术社区, 开发区块链和共享账本的POC、应用案例、现场试验和部署。
4.教育公众, 为区块链技术争取市场机会。
5.推广我们社区内各子社区, 用我们的带多个平台和框架的工具箱方法
总结起来可以理解为:项目的目标是发展一个跨行业的开放式标准以及开源代码开发库,允许企业创建自定义的分布式账本解决方案,以促进区块链技术在商业当中的应用。
我的理解是超级账本Fabric是一门编程语言,可以是Go,Java,C/C++等,它定义了编程标准,函数库等基础规则,允许企业使用这门语言开发出适合自己的应用。或者再深入一层,超级账本Fabric是区块链的驱动程序,通过它实现将区块链类业务逻辑解释给开发平台,再把平台实现方式反馈给业务逻辑,从而将不同企业区块链各种应用打包成为可行的解决方案。
主要概念
Anchor(锚点)
一般指作为刚启动时候的初始联络元素或与其它结构的沟通元素。如刚加入一个 channel 的节点,需要通过某个锚点节点来快速获取 channel 内的情况(如其它节点的存在信息)。
Auditability(审计性)
在一定权限和许可下,可以对链上的交易进行审计和检查。
Block(区块)
代表一批得到确认的交易信息的整体,准备被共识加入到区块链中。
Blockchain(区块链)
由多个区块链接而成的链表结构,除了初始区块,每个区块头部都包括前继区块内容的 hash 值。
Chaincode(链码)
区块链上的应用代码,扩展自“智能合约”概念,支持 golang、nodejs 等语言,多为图灵完备。
Channel(通道)
Fabric 网络上的私有隔离。通道中的 chaincode 和交易只有加入该通道的节点可见。同一个节点可以加入多个通道,并为每个通道内容维护一个账本。
Committer(提交节点)
1.0 架构中一种 peer 节点角色,负责对 orderer 排序后的交易进行检查,选择合法的交易执行并写入存储。
Commitment(提交)
提交节点完成对排序后交易的验证,将交易内容写到区块,并更新世界观的过程。
Confidentiality(保密)
只有交易相关方可以看到交易内容,其它人未经授权则无法看到。
Endorser(推荐节点或背书节点)
1.0 架构中一种 peer 节点角色,负责检验某个交易是否合法,是否愿意为之背书、签名。
Endorsement
背书过程。按照 chaincode 部署时候的 endorsement 策略,相关 peer 对交易提案进行模拟和检查,决策是否为之背书。如果交易提案获得了足够多的背书,则可以构造正式交易进行进一步的共识。
Invoke(调用)
一种交易类型,对 chaincode 中的某个方法进行调用,一般需要包括调用方法和调用参数。
Ledger(账本)
包括区块链结构(带有所有的交易信息)和当前的世界观(world state)。
Member(成员)
代表某个具体的实体身份,在网络中有用自己的根证书。节点和应用都必须属于某个成员身份。同一个成员可以在同一个通道中拥有多个 peer 节点,其中一个为 leader 节点,代表成员与排序节点进行交互,并分发排序后的区块给属于同一成员的其它节点。
MSP(Member Service Provider,成员服务提供者)
抽象的实现成员服务(身份验证,证书管理等)的组件,实现对不同类型的成员服务的可拔插支持。
Non-validating Peer(非验证节点)
不参与账本维护,仅作为交易代理响应客户端的 REST 请求,并对交易进行一些基本的有效性检查,之后转发给验证节点。
Orderer(排序节点)
1.0 架构中的共识服务角色,负责排序看到的交易,提供全局确认的顺序。
Permissioned Ledger(带权限的账本)
网络中所有节点必须是经过许可的,非许可过的节点则无法加入网络。
Privacy(隐私保护)
交易员可以隐藏交易的身份,其它成员在无特殊权限的情况下,只能对交易进行验证,而无法获知身份信息。
System Chain(系统链)
由对网络中配置进行变更的配置区块组成,一般可以用来作为组成网络成员们形成的联盟约定。
Transaction(交易)
执行账本上的某个函数调用或者部署 chaincode。调用的具体函数在 chaincode 中实现。
Transactor(交易者)
发起交易调用的客户端。
Validating Peer(验证节点)
维护账本的核心节点,参与一致性维护、对交易的验证和执行。
World State(世界状态)
即最新的全局账本状态。Fabric 用它来存储历史交易发生后产生的最新的状态,可以用键值或文档数据库实现。
逻辑架构(1.0)
BlockChain区块服务:负责节点间的共识管理、账本的分布式计算、账本的存储以及节 点间的P2P协议功能的实现,是区块链的核心组成部分,为区块 链的主体功能提供了底层支撑。
Membership成员管理:会员注册、身份保护、内容保密、交易审计功能,以保证平台访问的安全性。
Chaincode:ChainCode的集成平台,为ChainCode提供安全的部署、运行的环境。
Event:贯穿于其他各个组件中 间,为各个组件间的异 步通信提供了技术实现
运行时架构(1.0)
设计目标
1、chaincode信任的灵活性:支持多个ordering服务节点,增强共识的容错能力和对抗orderer作恶的能力。
2、扩展性: 将endorsement和ordering进行分离,实现多通道(实际是分区)结构,增强系统的扩展性;同时也将chaincode执行、ledger、state维护等非常消耗系统性能的任务与共识任务分离,保证了关键任务(ordering)的可靠执行。
3、保密性:新架构对于chaincode在数据更新、状态维护等方面提供了新的保密性要求,提高系统的业务、安全方面的能力。
4、共识服务的模块化:支持可插拔的共识结构,支持多种共识服务的接入和服务实现。
架构特点
Hyperledger fabirc 1.0 版本的在0.6版本基础上,针对安全、保密、部署、维护、实际业务场景需求等方面进行了很多改进,特别是Peer节点的功能分离,给系统架构具备了支持多通道、可插拔的共识的能力。Hyperledger Fabric 在 1.0 中,架构已经解耦为三部分:
1. fabric-peer:主要起到 peer 作用,包括 endorser、committer 两种角色;
2. fabric-ca:即原先的 membersrvc,独立成一个新的项目。
3. fabric-order:起到 order 作用。
其中,fabric-peer 和 fabric-order 代码暂时都在 fabric 项目中,未来可能进一步拆分。
源代码结构
实现 fabric 功能的核心代码,包括:
accesscontrol包:实现对 chaincode 的权限管理和属性校验等;
common包:一些通用的模块;
core包:大部分核心实现代码都在本包下。其它包的代码封装上层接口,最终调用本包内代码;
events包:支持 event 框架;
examples包:包括一些示例的 chaincode 代码;
flogging包:封装 go-logging,提供日志支持;
gossip包:实现 gossip 协议;
metadata包:版本信息等;
msp包:Member Service Provider 包;
order包:order 服务相关的入口和框架代码;
peer包:peer 的入口和框架代码;
protos包:包括各种协议和消息的 protobuf 定义文件;