参考https://hyperledger-fabric.readthedocs.io/en/release-1.2/fabric_model.html#
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. 记账本功能
记账本记录着有序的,不可篡改的状态更新记录,状态的变化则是链码调用的结果,每个提交的交易可影响到记账本中资源键值对的创建,更新或删除。
记账本是一条区块组成的链条,使用区块保存着不变的有序的记录,同时也使用状态数据库维护资源状态。每一个通道只有有一个记账本,而通道的成员节点为维护着该账本的副本。
超级记账本的功能如下:
(1) 查询或更新记账本可通过key(键)查找,范围查询和组合key(键)查询。
(2) CouchDB作为状态数据库时, 可使用富查询语言进行只读查询
(3) 只读的历史查询,查找key(键)的历史账本,适用于分析数据来源。
(4) 交易是由不同版本号的链码读取的键值对(读集合)或写入的键值对(写集合)组成。
(5) 交易包含了其它背书节点的数字签名,并且交易会被提交到ordering(有序)服务中。
(6) 交易被排序保存在区块中,并从ordering(有序)服务中交付到通道的其它节点。
(7) 节点通过背书策略验证交易,并且执行对应策略。
(8) 交易追加到区块之前,版本检查将会被执行,以保证读取出来的资产的状态在链码执行的时候未被改变。
(9) 一旦交易被验证和提交之后,就不再变化,就是我们常说的不可篡改。
(10) 通道的账本包含一个配置的区块用于定义各种策略,权限控制以及其它相关信息,这个区块我们称为Genesis Block创世块。
(11) 通道包含了会员服务提供商实例,用于保密的资料在不同证书机构间传递。
4. 隐私
Hyperledger Fabric以通道为基础提供了不可篡改的记账本和用于修改资产状态的链码。一个账本存在于一个通道之中,它可被分享到整个网络(假设每个参与者都在公用的通道上), 也可被私有化保证只有特定的参与者才能采访。
以上说的第二个场景,这些参与者将会创建一个单独的通道以隔离开他们的交易和账本。为了消除全面的透明和隐私的差距的问题,链码只能被安装在需要读写资产状态的节点上,换而言之,如果链码不能在一个节点上安装,它将不能采访账本。
当一个通道的组织的下属机构想保证交易数据的机密性,保存在私有数据库中的一个私有数据集合将用于隔离这些数据,从通道的记账本中逻辑的隔离,而这些数据只能被授权的组织下级机构采访。
所以,通道保证交易在广阔的网络中私有,而私有数据集合保证交易在通道的组织的下属中私有。
为了进一步混淆数据,链码中的值在交易发送到ordering服务或追加到区块之前可使用常用的密码算法(例如AES)进行加密,一旦加密的数据被写到记账本,只能被拥有这个密钥的用户解密。
“Private Data Collection”私有数据集合是Hyperledger Fabric 1.2引入的, Hyperledger Fabric作为联盟链,企业对行业内竞争对手分享数据是不可能的,超级记账本一再升级隐私的设计是必须的。
5. 安全与会员服务
Hyperledger Fabric是一个基于所有参与者都有已知的身份的交易网络,公钥基础设施用于组织,网络组件,终端用户或终端应用生成加密证书。所以,数据的采访控制可以在更广的网络和通道级别被管理和控制。 Hyperledger Fabric允许的概念,与通道的存在和功能结合一起,帮助解决隐私和机密的这个至关重要的问题。
6. 共识
在分布式记账本技术里面,就单一功能而言,共识已成为特定的算法的同义词。但是,共识不仅是交易中顺序如何达成一致,Hyperledger Fabric通过在整个交易流程中它的基础角色突出了这些差异,从计划和背书,到ordering排序,验证和提交,简而言之,共识被定义为整个周期的组成区块的一组交易的正确性的验证。
当区块交易的顺序和结果经过明确的策略标准检查通过,共识最终达成。这些检查和平衡在交易的周期发生,包括背书策略的使用以指定哪些特定成员必须背书特定交易类型,系统的链码保证这些策略被执行和维持。在提交之前,节点将会使用这些系统链码保证有足够的背书,且来源于适当的实体。除此之外,当账本的状态被认同,在任何包含交易的区块被追加到记账本之前,还会进行版本号的检查。这步最后的检查防止了双重花费操作和其它风险,保证了数据完整性,而且允许对非静态变量执行函数。
除了大量的背书,验证和版本检查,在整个交易流程中还使用身份验证。访问控制列表通过网络分层实现,交易计划在不同架构组件中传递时,载体进行重复的签名,验证和认证。总而言之,共识不仅仅是交易顺序的达成一致,它首要的特性是交易全程的验证(从背书到提交)的副产品。
文字上咬文嚼字不大好理解, 我们在后面的例子中实战下可能会好理解。
本文分享自 Hyperledger实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!