Hyperledger Fabric v1.4提供了各种称为系统链码的特殊链码,用于执行某些特权任务。本文的目标是提供Fabric中各种系统链代码的实现,功能和用法的指示。与用户链码一样,系统链码也实现了Init
和Invoke
函数。Fabric有五个系统链码,如下所示:
接下来,我们将介绍每个系统链码提供的功能以及用法。请注意,我们可能无法使用命令行(CLI)轻松调用/查询系统链码支持的所有函数,因为我们可能需要传递golang结构的某些序列化protobuf字节。因此,对于此类功能,建议使用SDK。在本文中,我们仅使用CLI对适用的函数执行invoke / query。
链码CSCC提供了在重新配置网络时管理配置事务的功能。 配置事务从订购服务到达提交者调用此链码。 链码还提供peer节点配置服务,例如加入链或获取配置数据。
CSCC管理关于对等和进程信道配置事务的信道相关信息。它提供以下五个功能:(i)JoinChain,(ii)GetConfigBlock,(iii)GetChannels,(iv)GetConfigTree和(v)SimulateConfigTreeUpdate。接下来,我们将展示每个功能的用法。我们假设所有命令都是从我们的示例网络中指向peer0的客户端执行的(参见安装)。要运行CSCC相关命令,我们需要使用对等通道和对等链代码CLI命令。
cscc.png
调用JoinChain功能以使peer加入通道。它期望一个参数是通道配置块的序列化protobuf字节,它是由执行peer channel create命令从orderer接收的(参见安装)。以下peer CLI命令使peer加入名为syschannel 的通道。peer channel join命令负责读取syschannel.block并在调用CSCC时将其作为字节传递。但是,如果我们需要使用peer链码调用,那么将syschannel.block的内容放在CLI查询本身并不容易。
# peer channel create -c syschannel -f syschannel.tx -o orderer.rabbit.com:7050
$ peer channel join -b syschannel.block
调用GetConfigBlock以获取给定通道的当前配置块。它期望一个参数是通道名称的字节表示。可以使用以下两个对等CLI命令中的任何一个来获取通道syschannel的配置块。
$ peer channel fetch -o orderer.rabbit.com:7050 config -c syschannel
# Or
$ peer chaincode query -C syschannel -n cscc -c '{"Args":["GetConfigBlock", "syschannel"]}'