编写链代码

链代码以 Go、Node.js 或 Java 编写,然后打包到 Oracle Blockchain Platform 网络上安装的 ZIP 文件中。

链代码定义分类帐中的数据模式,初始化它,在应用程序触发时执行更新,并响应查询。Chaincodes 还可以发布允许应用程序通知和执行下游操作的事件。例如,在通过链代码匹配采购订单、发票和交货记录后,订阅应用程序可以发布事件,以便处理相关付款并更新内部 ERP 系统。

用于链代码开发的资源

Oracle Blockchain Platform 使用超级账本架构作为其基础。使用 Hyperledger Fabric 文档可帮助您编写有效的链代码。

  • 欢迎使用超级账本架构。在编写自己的链代码之前,应先阅读“Key Concepts and Tutorials(关键概念和教程)”部分。

  • 转到编程语言。Go 编译器、工具和库提供了各种资源来简化编写链代码。

  • Package shim 。程序包 shim 为链代码提供 API,用于访问其状态变量、事务处理上下文和调用其他链代码。此文档记录了链代码所需的实际语法。

Oracle Blockchain Platform 提供可下载的示例,可帮助您了解如何编写链代码和应用。请参阅什么是链代码示例?

可以在链代码中添加富查询语法来查询状态数据库。请参阅 SQL Rich Query SyntaxCouchDB Rich Query Syntax

打包和 Zip a Go Chaincode

编写完链代码后,将其放入 ZIP 文件中。您无需为 Go 链代码创建程序包或对其进行签名 - Oracle Blockchain Platform 安装和部署过程会为您执行此操作,如部署链代码的典型工作流 (Hyperledger Fabric v2.x)部署链代码的典型工作流 (Hyperledger Fabric v1.4.7) 中所述。

如果链代码具有任何外部依赖项,则可以将它们放在 ZIP 文件的供应商目录中。

供应商 Shim for Go Chaincodes (Hyperledger Fabric v2.x)

Hyperledger Fabric v2.x 中不包括以前随超级账本架构早期版本一起提供的 Go 链代码 shim 依赖性。在运行 Hyperledger Fabric v2.x 的对等节点上安装 shim 之前,必须先将 shim 呈现(导入)到 Go 链代码。

您可以使用 Go 模块或第三方工具(例如 govendor)为链码 shim 提供供应商,并将其更新为适用于 Hyperledger Fabric v2.x 的版本。

有关更多信息,请参见 Hyperledger Fabric 文档中的 Chaincode shim changes (Go chaincode only)Upgrade Chaincodes with vendored shim 。有关 Go 模块的更多信息,请参见 Go Modules Reference

打包和压缩 Node.js 链代码

如果您要编写 Node.js 链代码,则需要创建包含两个部分的 package.json 文件:
  • scripts 部分声明如何启动链代码。

  • dependencies 部分指定依赖项。

下面是 Node.js 链代码的示例 package.json

{
	"name": "chaincode_example02",
	"version": "1.0.0",
	"description": "chaincode_example02 chaincode implemented in Node.js",
	"engines": {
		"node": ">=8.4.0",
		"npm": ">=5.3.0"
	},
	"scripts": { "start" : "node chaincode_example02.js" },
	"engine-strict": true,
	"license": "Apache-2.0",
	"dependencies": {
		"fabric-shim": "~1.3.0"
	}
}
Node.js 链代码的打包规则如下:
  • package.json 必须位于根目录中。
  • 条目 JavaScript 文件可以位于软件包中的任何位置。
  • 如果未在 package.json 中指定 "start" : "node <start>.js",则 server.js 必须位于根目录中。

将链代码和程序包文件放在 ZIP 文件中,以将其安装在 Oracle Blockchain Platform 上。

打包和压缩 Java 链代码

如果您正在编写 Java 链代码,则可以选择 Gradle 或 Maven 来构建链代码。

如果您使用的是 Gradle,请将链代码 build.gradle 和 settings.gradle 放在 ZIP 文件中,将其安装在 Oracle Blockchain Platform 上。下面是链代码程序包的示例文件列表:
Archive:  example_gradle.zip 
 Length      Date    Time    Name
---------  ---------- -----   ---- 
      610  02-14-2019 01:36   build.gradle
       54  02-14-2019 01:28   settings.gradle
        0  02-14-2019 01:28   src/
        0  02-14-2019 01:28   src/main/
        0  02-14-2019 01:28   src/main/java/
        0  02-14-2019 01:28   src/main/java/org/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/
        0  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/example/
     5357  02-14-2019 01:28   src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java
---------                     -------
     6021                     10 files
如果您使用的是 Maven,请将链代码和 pom.xml 放在 ZIP 文件中,将其安装在 Oracle Blockchain Platform 上。下面是链代码程序包的示例文件列表:
Archive:  example_maven.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     3313  02-14-2019 01:52   pom.xml
        0  02-14-2019 01:28   src/
        0  02-14-2019 01:28   src/chaincode/
        0  02-14-2019 01:28   src/chaincode/example/
     4281  02-14-2019 01:28   src/chaincode/example/SimpleChaincode.java
---------                     -------
     7594                     5 files

测试链代码

编写链代码后,需要对其进行测试。请参见:

安装和部署链代码

测试链代码后,您可以按照部署链代码的典型工作流 (Hyperledger Fabric v2.x)部署链代码的典型工作流 (Hyperledger Fabric v1.4.7) 中的信息来部署链代码。

升级链代码

您可以按照 Upgrade a Chaincode (Hyperledger Fabric v2.x)Upgrade a Chaincode (Hyperledger Fabric v1.4.7) 中的步骤升级已部署链代码。