深度学习
系统链码(System Chaincode)是超级账本Fabric项目在设计上的一大创新。
通过上一小节的阅读,相信读者已经了解,最常见的用户应用链码(User Application Chaincode),由应用开发者来编写逻辑,运行在链码容器中,通过Fabric提供的有限接口与账本平台进行交互。
而系统链码则负责Fabric节点自身的处理逻辑,包括系统配置、背书、校验等工作。这些处理过程最初通过硬编码 (Hard-Coded)的方式固化在系统中。Fabric通过系统链码的形式来实现,运行在Peer主进程内,兼顾了逻辑实现和管理的灵活性,以及通信 的性能。
系统链码目前仅支持Go语言,在Peer节点启动时会自动完成注册和部署,以进程内逻辑形式跟主进程进行交互。
目前,Fabric中包括五大类型的系统链码,主要功能如表12-4所示。
表12-4 Fabric五大类型系统链码
这些链码的实现都在fabric/core/scc路径下,下面分别予以讲解。
1.配置系统链码
Configuration System Chaincode,即配置系统链码,顾名思义,是负责配置管理的系统链码,支持被从链外进行调用。
CSCC主要代码实现在core/scc/cscc路径下,目前支持如下类型的Invoke方法:
·JoinChain:当某个节点申请加入某条通道时被调用。负责根据传入的初始区块参数生成所加入通道的创世区块,并完成账本、通道相关数据结构的初始化工作。调用后,节点本地将维护所加入通道的数据结构,并创建初始区块;
·GetConfigBlock:当需要获取节点在某个通道上配置时候被调用。该方法获取指定通道的配置区块(未更新时等价于初始区块)的内容;
·UpdateConfigBlock:当需要更新节点在某个通道上的配置时被调用。根据传入的区块数据生成区块结构,替换掉现有的配置区块结构。替换后,配置区块数据将跟该通道内的初始区块不再一致;
·GetChannels:需要获取到节点所加入所有通道列表时被调用。该方法获取该节点已经加入的所有通道的信息。
2.背书管理系统链码
Endorsement System Chaincode,即背书管理系统链码。负责背书(签名)过程,并可以支持对背书策略进行管理,仅支持链内系统调用。
ESCC主要代码实现在core/scc/escc路径下,目前提供了Invoke方法,会对传入的链码提案的模拟运行结果进行签名,之后创建响应消息返回给客户端。
3.生命周期系统链码
Lifecycle System Chaincode,即生命周期系统链码,负责对用户链码的生命周期进行管理,支持被从链外进行调用。
LSCC主要代码实现在core/scc/lscc路径下。
链码的生命周期包括安装、部署、升级、权限管理、获取信息等环节。这些操作都可以通过对LSCC进行Invoke来实现:
·INSTALL:安装意味着将用户链码相关文件打包,放置到节点的文件系统,默认在/var/hyperledger/production/chaincodes/路径下面;
·DEPLOY:意味着链码被部署和实例化(Instantiate),生成链码容器。在此过程中会检查通道的ACL,从本地拿到链码数据,检查Instantiation Policy;
·UPGRADE:升级链码时被调用。检查Instantiation Policy,通过则对本地文件进行替换,并生成新的链码容器;
·GETCCINFO:获取链码信息时被调用。检查节点对该通道是否有读权限,通过则返回指定链码的信息;
·GETCCDATA:获取链码数据时被调用。检查节点对该通道是否有读权限,通过则返回指定链码的完整数据;
·GETCHAINCODES:获取节点在通道上的链码信息,检查节点是否具有管理员权限,通过则返回在通道上的所有的链码信息,包括已安装和已实例化的。
4.查询系统链码
Query System Chaincode,查询系统链码,负责提供一些账本和链信息的查询方法,包括GetChainInfo、GetBlockByNumber、 GetBlockByHash、GetTransactionByID、GetBlockByTxID等,支持被从链外进行调用。QSCC主要代码实现在 core/scc/qscc路径下:
·GetChainInfo:获取区块链的信息,包括高度值、当前区块Hash值、上一个区块Hash值等;
·GetBlockByNumber:根据给定的高度,返回对应区块的数据;
·GetBlockByHash:根据给定的区块头Hash值,返回对应区块的数据;
·GetTransactionByID:根据给定的TxID,返回对应交易的数据;
·GetBlockByTxID:根据给定的TxID,返回包含该交易的区块的数据。
5.验证系统链码
Verification System Chaincode,验证系统链码,负责担任Committer角色的节点对从Orderer收到的一批交易进行写入前的再次验证,仅支持链内系统调用。
VSCC主要代码实现在core/scc/vscc路径下。该链码比较简单,提供了Invoke方法,其主要过程为:
·首先解析出交易结构,并对交易结构格式进行校验;
·检查交易的读集合中元素版本跟本地账本中版本一致;
·检查带有合法的背书信息(目前主要是检查签名信息);
·通过则返回正确,否则返回错误消息。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=900
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区