5.4.2.1 Hyperledger Fabric链码包规范

  Fabric链码(智能合约)支持多种语言编写,包括golang、java、node.js。每个链码程序都必须实现Chaincode接口,链码包含:Init、Invoke和Query三个基本操作:

  • Init: 链码初始化的方法,在链码实例化或者升级的时候调用一次,以便链码可以执行任何必要的初始化,包括应用程序状态的初始化。
  • Invoke: 接收和处理链下业务系统调用事务处理提案,其参数包含调用的链码程序中函数的名称和具体业务处理数据参数,即在Invoke中根据不同的方法参数调用其他分支处理响应的业务。Invoke可以简单的理解为链码方法的入口。
  • Query: 提供查询链码数据的方法,该方法只作为查询使用,不提供操作链上数据的操作。可在Query操作时调用,亦可在Invoke方法中作为某些方法的分支被调用,该方法可以不实现。

  注:

  Fabric 1.4中的链码包不能直接在Fabric 2.3.2及Fabric2.2.1国密这两个版本中使用,需要根据对应语言最新链码依赖库进行修改。

  为实现自动化部署,提升部署效率,不同语言开发的链码在BSN发布时需按照以下规范要求来组织链码部署包。

  1. Golang

  main函数必须在项目中所有链码的上级或同级,打包路径为main函数所在同级文件夹,main函数路径为基于src的引用路径。

  例:bsnBaseCC链码包(预置链码包)

bsnBaseCC
   └─main.go
   └─ChainCode/
   └─models/
   └─utils/

  需在bsnBaseCC/下进行打包(包名称无要求),main函数路径(引用路径)为bsnBaseCC。

  例:github上的FabricBaseChaincode链码包(预置链码包)

github.com
   └─BSNDA
      └─FabricBaseChaincode
         └─chaincode
            └─go
               └─bsnBaseCC
                  └─main.go
                  └─ChainCode/
                  └─models/
                  └─utils/

  需在github.com/BSNDA/FabricBaseChaincode/chaincode/go/bsnBaseCC/下进行打包(包名称无要求),main函数路径(引用路径)为github.com/BSNDA/FabricBaseChaincode/chaincode/go/bsnBaseCC。说明:main.go入口,ChainCode:链码;models:实体;utils:工具类。

  注:针对Fabric2.3.2及Fabric2.2.1国密预制链码包参考如下

chaincode-demo
   └─main.go
   └─chaincode/
   └─vendor/
 └─go.sum
   └─go.mod

  2. Java

  gradle或maven构建的项目,项目中必须包含build.gradle或pom.xml文件。

  例:bsnBaseCC链码包(预置链码包)

bsnBaseCC
    └─build.gradle
    └─src
     └─main
       └─java
         └─com.example.javacc
           └─javacc.java

  需在bsnBaseCC/下进行打包,zip包名称无要求。

  说明:src/main/java:项目目录,com.example.javacc:包名,javacc.java:链码信息

  3. NodeJs

  必须在项目根目录下创建package.json。需在bsnBaseCC/下进行打包,zip包名称无要求。

  例:bsnBaseCC链码包

bsnBaseCC
   └─marbles_chaincode.js
   └─package.json

  说明:marbles_chaincode.js:链码

  注:发布服务时,链码包打包时进入项目根目录进行打包,格式为.zip。

Copyright 北京红枣科技有限公司

results matching ""

    No results matching ""

    results matching ""

      No results matching ""