编写链代码
链代码以 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 Syntax 和 CouchDB Rich Query Syntax 。
打包 Go 链代码
编写链代码后,将其压缩为 ZIP 格式的文件。您无需为 Go 链代码创建程序包或对其进行签名— Oracle Blockchain Platform 安装和部署过程为您执行此操作,如 Typical Workflow to Deploy Chaincodes (Hyperledger Fabric v2.x) 中所述。
如果您的链代码具有任何外部依赖项,则可以将它们放置在 ZIP 文件的供应商目录中。
为 Go Chaincodes 提供 Shim
Hyperledger Fabric v2.x 不包含以前包含在 Hyperledger Fabric 早期版本的 Go 链代码 shim 依赖项。现在必须先将 shim 授予(导入)Go 链代码,然后才能将其安装在对等点上。
您可以使用 Go 模块或第三方工具(例如政府供应商的链代码 shim),并将其更新为适用于 Hyperledger Fabric v2.x 的版本。
有关更多信息,请参见 Hyperledger Fabric 文档中的 Chaincode shim changes (Go chaincode only) 和 Upgrade Chaincodes with vendored shim 。有关 Go 模块的更多信息,请参见 Go Modules Reference 。
打包 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"
}
}
package.json
文件必须位于根目录中。- 条目 JavaScript 文件可以位于软件包中的任何位置。
- 如果未在
package.json
文件中指定"start" : "node <start>.js"
,则server.js
文件必须位于根目录中。
压缩 ZIP 格式的链代码和程序包文件以将其安装在 Oracle Blockchain Platform 上。
打包 Java 链代码
如果要编写 Java 链代码,可以选择 Gradle 或 Maven 来构建链代码。
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
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) 中的信息进行部署。
升级链代码
按照 Upgrade a Chaincode (Hyperledger Fabric v2.x) 中的步骤升级部署的链代码。