Fabric1.2研究笔记-初始化Chain Code

上一篇介绍了已有的scc,但如果需要构建一个自己的scc则必须了解它是如何生效的。首先在scc目录下找到统一的入口register.go...

attachments-2018-03-9MDlTgOS5aa74ab46b850.png

作者:小清新的博客 
来源:CSDN 
原文:https://blog.csdn.net/baidu_37379451/article/details/81171979?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!


上一篇介绍了已有的scc,但如果需要构建一个自己的scc则必须了解它是如何生效的。

首先在scc目录下找到统一的入口register.go

    // CreateSysCCs creates all of the system chaincodes which are compiled into fabric
    func CreateSysCCs(ccp ccprovider.ChaincodeProvider, p *Provider, aclProvider aclmgmt.ACLProvider) []*SystemChaincode {
        return builtInSystemChaincodes(ccp, p, aclProvider)
    }

在peer/node/start.go内调用该方法

    //Now that chaincode is initialized, register all system chaincodes.
        sccs := scc.CreateSysCCs(ccp, sccp, aclProvider)
        for _, cc := range sccs {
            sccp.RegisterSysCC(cc)
        }
        pb.RegisterChaincodeSupportServer(grpcServer.Server(), ccSrv)

第一段代码返回的时scc的配置,为代码内写死的一段配置

    func builtInSystemChaincodes(ccp ccprovider.ChaincodeProvider, p *Provider, aclProvider aclmgmt.ACLProvider) []*SystemChaincode {
        return []*SystemChaincode{
            {
                Enabled:           true,
                Name:              "cscc",
                Path:              "github.com/hyperledger/fabric/core/scc/cscc",
                InitArgs:          nil,
                Chaincode:         cscc.New(ccp, p, aclProvider),
                InvokableExternal: true, // cscc is invoked to join a channel
            },
            {
                Enabled:           true,
                Name:              "lscc",
                Path:              "github.com/hyperledger/fabric/core/scc/lscc",
                InitArgs:          nil,
                Chaincode:         lscc.New(p, aclProvider),
                InvokableExternal: true, // lscc is invoked to deploy new chaincodes
                InvokableCC2CC:    true, // lscc can be invoked by other chaincodes
            },
            {
                Enabled:           true,
                Name:              "qscc",
                Path:              "github.com/hyperledger/fabric/core/scc/qscc",
                InitArgs:          nil,
                Chaincode:         qscc.New(aclProvider),
                InvokableExternal: true, // qscc can be invoked to retrieve blocks
                InvokableCC2CC:    true, // qscc can be invoked to retrieve blocks also by a cc
            },
        }
    }

综上,它是通过获取定好的scc配置进行实例化,所以只需在此处添加类似路径即可完成自定义系统chain code的实例化。
---------------------


章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

attachments-2018-02-kL1zBfXx5a7ffd0b78798.jpg

  • 发表于 2018-10-16 14:08
  • 阅读 ( 2605 )
  • 分类:hyperledger

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
李晓琼

区块链技术开发爱好者

44 篇文章

作家榜 »

  1. 社区运营-小以 621 文章
  2. 社区运营-小链 238 文章
  3. 于中阳Mercina-zy 79 文章
  4. 涂晶 74 文章
  5. 李晓琼 44 文章
  6. 兄弟连区块链培训 42 文章
  7. 吴寿鹤 36 文章
  8. 刘旷 28 文章