编写链代码

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

链接代码在分类账中定义数据方案,对其进行初始化,在应用程序触发时完成更新,以及响应查询。链代码还可以发布事件,允许应用程序收到通知并完成下游操作。例如,在采购订单、发票和交货记录与链代码匹配后,它可以过账事件,以便订阅应用程序可以处理相关付款并更新内部 ERP 系统。

用于链代码开发的资源

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

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

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

  • Package shim 。软件包 shim 为链代码提供 API,用于访问其状态变量、获取事务上下文以及调用其他链代码。软件包 shim 文档描述了链代码所需的实际语法。

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

可以向链代码添加多查询语法以查询状态数据库。请参见 SQL Rich Query SyntaxCouchDB Rich Query Syntax

打包 Go 链代码

编写链代码后,将其压缩为 .zip 格式的文件。您无需为 Go 链码创建程序包或对其进行签名— Oracle Blockchain Platform 安装和部署过程可为您执行此操作,如 Typical Workflow to Deploy Chaincodes 中所述。

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

为 Go Chaincodes 提供 Shim

Hyperledger Fabric 不再包含 Go 链代码 shim 相关项。Shim 现在必须先向 Go 链码进行预售(导入),然后才能安装到对等节点上。

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

有关更多信息,请参见 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

测试链代码

编写链代码后对其进行测试。请参见以下主题:

安装和部署链代码

测试链代码后,您可以按照用于部署链代码的典型工作流中的信息来部署链代码。

升级链代码

按照升级链代码中的步骤升级已部署的链代码。