Assets
资产既包括有型的资产、也包含无形的资产,Hyperledger使用chainCode去修改用户的资产。
在内部实现中,资产表现为一系列key-value的键值对集合,状态变更记录为Channel账本中的交易(即:通过交易来修改用户的资产)。可以编码为任意的二进制或Json格式.
ChainCode
ChainCode是定义资产、修改资产指令的软件代码;ChainCode是用于读取、修改键值对或其它数据库状态时强制执行的规则。
Ledger
在Fabric中,账本是顺序的、不可变的状态转换记录,状态转换是ChainCode的执行结果,由参与方提交给网络中所有对等节点,交易会导致一系列的资产键值对被更新、修改或删除,然后这些状态变动被提交至账本。
每个channel一个账本,每个节点都为它所属的channel维护一个账本拷贝。
账本提供了下面的一些功能:
Membership Service Provider
实例,允许不同证书鉴权机构 派发的加密证书。Privacy
Hyperledger在每个channel上采用了不可变的账本,chaincode用于维护、修改当前的资产状态。账本存在于channel中,可以被共享给整个网络,也可以仅被共享给特定的参与方,在随后的场景中,参与方可以创建一个独立的channel,从而在公开网络上隔离他们的交易和账本。为了解决这种在透明和隐私实现之间的差距,chaincode需要被安装在那些需要访问资产状态的节点上(即:如果chaincode未被安装在该节点上,则该节点无法正确与账本进行交互)
当在channel上组织的子集需要维护它们交易数据的隐私性时,使用隐私数据集来在私有数据库中分离它们的数据,在channel账本上进行逻辑分离,仅有被授权的子组织可以访问这些隐私数据
因此:在隐私的实现中,使用了两种概念:channel, privacy collection; channel在公网上维护交易隐私,collection在channel上的不同子组织间维护隐私。
同时在发送交易给排序服务或添加区块至账本时,chaincode中的值(部分/全部)可以使用通用的加密算法(AES)来加密,以便进一步混淆链上数据。账本上的加密数据,仅有含有对应密钥的用户才可以解密。
Security & Membership Services(安全和成员服务)
Hyperledger 支持网络中的所有参与方都有公开的身份标识(如:身份证、网站证书);基于此,可以在公共网络和channel级别上对对数据的访问控制进行维护和管理;Hyperledger使用身份许可
和channel,来解决隐私和保密场景问题。
Consensus
在分布式账本技术中,Consensus逐渐演变为一种特定算法的同义词。但是,共识不仅简单是对交易的排序,在Hyperledger中,通过其在整个交易流程中(提案、背书、排序、验证、提交)的基础作用,这种差别越加明显。简单来说,Hyperledger中的共识被定义为组成区块的交易集合的完整验证流程。
当交易顺序、区块的执行结果符合明确的检查标准时,节点之间达成共识。检查和余额发生在交易的生命周期中,且包含使用背书策略去指定特定成员必须对特定的交易类型进行背书,以及系统chaincode去保证这些策略被强制执行。在状态被提交之前,节点必须使用系统chaincode来确保有足够的背书,且这些背书派生自对应的实体。此外,在将包含交易的区块追加至账本时,将进行版本检查,来确保就当前账本的状态达成共识。最后的检查可以防止双花和其他可能破坏数据完整性的操作,而且可以允许在非静态数据上执行一些功能(不懂)。
除了多节点背书、合法性、版本检查外,在交易流程的各个方向上,也会进行身份验证。同时在网络层实现数据访问控制功能(排序服务在channel中实现),当交易在不同组件中传输时,它的载荷数据会被重复签名、验证、认证。
总体来说,共识不仅仅是对一系列交易的排序,相反,排序是一项总体特征,它是交易从提案到提交整个过程中不断验证的副产品。
https://hyperledger-fabric.readthedocs.io/en/latest/fabric_model.html