参考https://hyperledger-fabric.readthedocs.io/en/release-1.2/fabric_model.html#
http://www.javatree.cn/news/0527512134c14833b484ba92494481b8
Hyperledger Faric定位为行业通用的, 可定制化的企业级区块链解决方案,我们在搭建入门例子BYFN(Build your first network)可能有很多疑问,我们先从整体的架构和模型理清思路。
1. 资产(Assets)
和面向对象编程有点类似,资产是可以是有形的(不动产,硬件等),也可以是无形的(合同等), 区块链网络上,资产定义可交换带有货币价值的的任何对象,通过chaincode链码(智能合同)的交易, Hyperledger Fabric提供了修资产的能力。
Hyperledger Fabric里面资产表现为键值对集合的形式,而资产的状态的更变记录称为交易记录,资产可以表示为二进制或JSON的形式。
资产的状态是可变的,我们常说的不可篡改的是指交易记录。
2.链码(Chaincode)
链码用于定义资产,或定义修改资产的交易逻辑,链码定义了读取或修改资产键值对的规则。 链码执行可操作记账本当前的状态数据库,通过交易计划初始化,链码的写操作执行后,会提交交易记录到网络记账本的其它节点达到一致性。
我们常说的智能合同是通过链码是实现的,链码定义了资源和交易的业务逻辑,编写链码是开发者很重要的任务。Hyperledger Fabric当前主要使用Go语言和Nodejs开发链码, 使用Go兼容好些快些, 在BYFN官方例子中安装Nodejs链码时间较长,时不时timeout(不排除环境配置差异或有误)。另外一种开发模式是使用Hyperledger Composer类似javascript的语法定义资源和交易, 后面我们学习。
3. 记账本功能
记账本记录着有序的,不可篡改的状态更新记录,状态的变化则是链码调用的结果,每个提交的交易可影响到记账本中资源键值对的创建,更新或删除。
记账本是一条区块组成的链条,使用区块保存着不变的有序的记录,同时也使用状态数据库维护资源状态。每一个通道只有有一个记账本,而通道的成员节点为维护着该账本的副本。
超级记账本的功能如下:
4. 隐私
Hyperledger Fabric以通道为基础提供了不可篡改的记账本和用于修改资产状态的链码。一个账本存在于一个通道之中,它可被分享到整个网络(假设每个参与者都在公用的通道上), 也可被私有化保证只有特定的参与者才能采访。
以上说的第二个场景,这些参与者将会创建一个单独的通道以隔离开他们的交易和账本。为了消除全面的透明和隐私的差距的问题,链码只能被安装在需要读写资产状态的节点上,换而言之,如果链码不能在一个节点上安装,它将不能采访账本。
当一个通道的组织的下属机构想保证交易数据的机密性,保存在私有数据库中的一个私有数据集合将用于隔离这些数据,从通道的记账本中逻辑的隔离,而这些数据只能被授权的组织下级机构采访。
所以,通道保证交易在广阔的网络中私有,而私有数据集合保证交易在通道的组织的下属中私有。
为了进一步混淆数据,链码中的值在交易发送到ordering服务或追加到区块之前可使用常用的密码算法(例如AES)进行加密,一旦加密的数据被写到记账本,只能被拥有这个密钥的用户解密。
“Private Data Collection”私有数据集合是Hyperledger Fabric 1.2引入的, Hyperledger Fabric作为联盟链,企业对行业内竞争对手分享数据是不可能的,超级记账本一再升级隐私的设计是必须的。
5. 安全与会员服务
Hyperledger Fabric是一个基于所有参与者都有已知的身份的交易网络,公钥基础设施用于组织,网络组件,终端用户或终端应用生成加密证书。所以,数据的采访控制可以在更广的网络和通道级别被管理和控制。 Hyperledger Fabric允许的概念,与通道的存在和功能结合一起,帮助解决隐私和机密的这个至关重要的问题。
6.共识
在分布式记账本技术里面,就单一功能而言,共识已成为特定的算法的同义词。但是,共识不仅是交易中顺序如何达成一致,Hyperledger Fabric通过在整个交易流程中它的基础角色突出了这些差异,从计划和背书,到ordering排序,验证和提交,简而言之,共识被定义为整个周期的组成区块的一组交易的正确性的验证。
当区块交易的顺序和结果经过明确的策略标准检查通过,共识最终达成。这些检查和平衡在交易的周期发生,包括背书策略的使用以指定哪些特定成员必须背书特定交易类型,系统的链码保证这些策略被执行和维持。在提交之前,节点将会使用这些系统链码保证有足够的背书,且来源于适当的实体。除此之外,当账本的状态被认同,在任何包含交易的区块被追加到记账本之前,还会进行版本号的检查。这步最后的检查防止了双重花费操作和其它风险,保证了数据完整性,而且允许对非静态变量执行函数。
除了大量的背书,验证和版本检查,在整个交易流程中还使用身份验证。访问控制列表通过网络分层实现,交易计划在不同架构组件中传递时,载体进行重复的签名,验证和认证。总而言之,共识不仅仅是交易顺序的达成一致,它首要的特性是交易全程的验证(从背书到提交)的副产品。
文字上咬文嚼字不大好理解, 我们在后面的例子中实战下可能会好理解。
更多请关注"Hyperledger Fabric实践"