12.6 系统链码

系统链码(System Chaincode)是超级账本Fabric项目在设计上的一大创新。

通过上一小节的阅读,相信读者已经了解,最常见的用户应用链码(User Application Chaincode),由应用开发者来编写逻辑,运行在链码容器中,通过Fabric提供的有限接口与账本平台进行交互。

而系统链码则负责Fabric节点自身的处理逻辑,包括系统配置、背书、校验等工作。这些处理过程最初通过硬编码 (Hard-Coded)的方式固化在系统中。Fabric通过系统链码的形式来实现,运行在Peer主进程内,兼顾了逻辑实现和管理的灵活性,以及通信 的性能。

系统链码目前仅支持Go语言,在Peer节点启动时会自动完成注册和部署,以进程内逻辑形式跟主进程进行交互。

目前,Fabric中包括五大类型的系统链码,主要功能如表12-4所示。

表12-4 Fabric五大类型系统链码

image.png

image.png

这些链码的实现都在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

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值