图10-CA证书信任链条
有许多CA证书权威机构,各自有其RCA。如果RCA得不到信任,那么其下的ICA也无法认证通过。
当然,自己的服务器也可以生成RCA。
在Fabric里,允许不同的企业使用不同的RCA,也可以使用相同的RCA和不同的ICA。这与下文中的MSP密切相关。
我们来总结下区块链,它主要是为了解决社会上的信任问题而存在的,为此,它付出了沉重的性能、可用性代价。它怎么做到的呢?通过4点实现:1、数据到处存放;2、操作记录不可更改;3、传输数据可信;4、业务脚本约束。
那么,这个信任问题的解决,带来了2个非功能性的约束:数据一致性和可用性。其中可用性包括两点:1、交易在可接受的时间内达成。比如比特币的分叉就会造成严重问题。2、吞吐量达标。而比特币每秒只能有7次交易,这显然太低了。
hyperledger fabric符合上面说过的区块链的所有特性。我们必须先了解它的一些概念,才能进一步理解其架构设计。由于英文资料居多,所以这些概念我都以英文描述为准:
chaincode:智能合约,上文已提到。每个chaincode可提供多个不同的调用命令。
transaction:交易,每条指令都是一次交易。
world state:对同一个key的多次交易形成的最终value,就是世界状态。
endorse:背书。金融上的意义为:指持票人为将票据权利转让给他人或者将一定的票据权利授予他人行使,而在票据背面或者粘单上记载有关事项并签章的行为。通常我们引申为对某个事情负责。在我们的共识机制的投票环节里,背书意味着参与投票。
endorsement policy:背书策略。由智能合约chaincode选择哪些peer节点参与到背书环节来。
peer:存放区块链数据的结点,同时还有endorse和commit功能。
channel:私有的子网络,事实上是为了隔离不同的应用,一个channel可含有一批chaincode。
PKI:Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
MSP:Membership Service Provider,联盟链成员的证书管理,它定义了哪些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。
org:orginazation,管理一系列合作企业的组织。
fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等,如下面的图11所示。
图11-fabric技术人员的分层
fabric大致分为底层的网络层、权限管理模块、区块链应用模块,通过SDK和CLI对应用开发者提供服务,如下面的图12所示。
图12-fabric开发模块图
我们的开发流程主要包括写智能合约,以及通过SDK调用智能合约,及订阅各类事件,如图13所示。
图13-开发环节
每个管理协作企业的ORG组织都可以拥有自己的MSP。如下图14所示,组织ORG1拥有的MSP叫ORG1.MSP,而组织ORG2业务复杂,所以维护了3个MSP。
图14-ORG可管理自己的MSP
MSP出现在两个地方:在channel上有一个全局的MSP,而每个peer、orderer、client等角色上都维护有本地的局部MSP,如图15所示。
图15-在channel上的Global MSP以及在参与角色上的Local MSP