背景
超级账本(Hyperledger)是linux基金会下的众多项目中的一个。是由IBM、因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目,超级账本还包括4个框架项目:Sawtooth、Iroha、Fabric、Burrow。其中广为人知的是Fabric。当前成员大约140个,其中1/4来自中国,现在中国技术组由万达、华为、IBM担任主要负责,负责中国会员和中国需求的提供,以及推进代码。
超级账本是什么?
正如Hyperledger官方网站上的描述,这一项目的目标是发展一个跨行业的开放式标准以及开源代码开发库,允许企业创建自定义的分布式账本解决方案,以促进区块链技术在商业当中的应用。
我的理解,超级账本Fabric是一门编程语言,它定义了编程标准,函数库等基础规则,允许企业使用这门语言开发出适合自己的应用。或者再深入一层,超级账本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、chaincode信任的灵活性:支持多个ordering服务节点,增强共识的容错能力和对抗orderer作恶的能力
2、扩展性: 将endorsement和ordering进行分离,实现多通道(实际是分区)结构,增强系统的扩展性;同时也将chaincode执行、ledger、state维护等非常消耗系统性能的任务与共识任务分离,保证了关键任务(ordering)的可靠执行
3、保密性:新架构对于chaincode在数据更新、状态维护等方面提供了新的保密性要求,提高系统的业务、安全方面的能力
4、共识服务的模块化:支持可插拔的共识结构,支持多种共识服务的接入和服务实现
架构特点
Hyperledger fabirc 1.0 版本的在0.6版本基础上,针对安全、保密、部署、维护、实际业务场景需求等方面进行了很多改进,特别是Peer节点的功能分离,给系统架构具备了支持多通道、可插拔的共识的能力。
初步了解Hyperledger Fabric
1、登陆
https://crl.ptopenlab.com:8800/bc/#home
2、注册用户,登陆账户,进入MYDASHBOARD。
3、创建自己的一个chain。
共识算法选择PBFT实际拜占庭容错。
4、部署智能合约
系统默认提供两个智能合约的模板,可以基于模板部署,也可以自己上传一个。
基于chaincode_example02模板deploy一个智能合约
合约内容为:["qujon","10000","higher","200000"]
5、现在我们做个转账。
转账成功。
6、查询转账结果。
6、分析和疑点
这是一个最简单的智能合约例子:给账户存入金额,转账,查询转账是否成功。
为了更好理解block概念,我们点击“mychain”进入自己创建的这个chain的详细内容。
然后再看block,
这里可以看到这个block的Chaincode ID,Type是Invoke,Payload内容是实际转账记录 �transfer �qujon �higher �500以及Timestamp。
这里可以测试,每一次的deploy和invoke操作都会产生1个block,而query不会产生block。因为前者是实实在在的交易动作,后者只是对交易的对象发起一次查询。
现在看看系统提供的分析数据:
可以看到健康状况,运行时间,链码数量,区块数量。
包括Invoke次数和系统反应时间。
一共3个区块,block1的block time竟然为22d3h(感觉这个d不是现实世界实际的天数)。这其中包括一个很困扰的问题,这个实验第一次很快结束了,后来为完成作业,重新开始创建chain,deploy contract,这时只有1个block,transit之后query一直失败,重复多次甚至重新注册账户都不行。后来过了一天,再次登陆就可以了。能力有限解释不了,哪位路过的大侠帮忙解释一下,在此先谢过了。
参考内容:
什么是Hyperledger的核心竞争力?
http://www.8btc.com/hyperledger-julian-gordon-0526
IBM HyperLedger fabric 简述
http://www.8btc.com/ibm-hyperledger-fabric
Hyperledger Fabric 技术术语
微信公众号TechFirst文章。
Hyperledger Fabric1.0架构概览
https://zhuanlan.zhihu.com/p/25130241