Hyperledger Fabric从源码分析系统链码

系统链码简介

在 Fabric 中,有一些链码是比较特殊的,叫系统链码。它们作为peer进程的一部分运行,而不是像用户链码一样运行在独立的 docker 容器中。因此它们有更高的权限来访问 peer 中的资源来实现用户链码难以实现或者不能实现的功能。

在 Fabric 1.4 版本之前,总共有五种系统链码,它们分别是:

  • Life Cycle System Chaincode (LSCC):生命周期系统链码
  • Configuration System Chaincode (CSCC):配置系统链码
  • Query System Chaincode (QSCC):查询系统链码
  • Endorser System Chaincode (ESCC):背书系统链码
  • Validator System Chaincode (VSCC):验证系统链码

在我学习的过程中都是按照 Fabric 1.4 版本的源码及资料学习的,在 1.4 版本中,官方文档明确表示,当前现有只支持 LSCC、CSCC、QSCC 三种链码,而 ESCC 与 VSCC 则是被可插拔背书和验证方法所取代,具体的描述文档可以参考官方文档——可插拔交易背书与交易验证,主要是是因为在某些情况下,用户需要自定义背书与验证的规则。

和用户链码不同的是,系统链码不使用 SDK 或 CLI 的提案安装和实例化。它在 peer 节点启动的时候注册和部署。

本篇文章将从源码角度,分析系统链码是如何在 peer 节点启动的时候就注册和部署的,并且它们主要对外主要提供了哪些方法。

注:本篇文章会着重分析 1.4 版本中支持的三种链码,对于 ESCC 与 VSCC 只会简单带过。

1. peer 节点如何完成系统链码的注册与部署

peer 节点是以 docker 容器的形式存在的,在容器启动是会执行 peer node start命令来启动 peer 节点,因此我们顺藤摸瓜就可以找到 peer 节点启动时的源码文件 —— peer/node/start.go

我把有关系统链码的部分贴出来,别的部分暂时先不关心。start 命令的主要入口函数就是 serve 函数。

func serve(args []string) error {
   
  //.................
  
	// Initialize chaincode service
	chaincodeSupport, ccp, sccp, packageProvider := startChaincodeServer(peerHost, aclProvider, pr, opsSystem)
	
  //.................
  
	// deploy system chaincodes
	sccp.DeploySysCCs("", ccp)
  
  //.................
}

在 serve 函数主要就是调用了一个 startChaincodeServer 函数,创建了我们关心的两个对象 ccp (ChainCodeProvider,链码提供者)和 sccp (system ChainCodeProvider,系统链码提供者),之后调用 sccp.DeploySysCCs 方法来部署系统链码。因此系统链码的安装和部署就完成了,我们主要关心的是创建了一个 sccp 对象,之后调用了 sccp 的 sccp.DeploySysCCs 方法部署系统链码。那么我们就先来关心一下 startChaincodeServer 函数中创建系统链码的部分。

// startChaincodeServer will finish chaincode related initialization, including:
// 1) setup local chaincode install path
// 2) create chaincode specific tls CA
// 3) start the chaincode specific gRPC listening service
func startChaincodeServer(
	peerHost string,
	aclProvider aclmgmt.ACLProvider,
	pr *platforms.Registry,
	ops *operations.System,
)<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值