チェーンコードの記述

チェーンコードは、Go、Node.jsまたはJavaで記述され、Oracle Blockchain PlatformネットワークにインストールされるZIPファイルにパッケージ化されます。

チェーンコードは、台帳内のデータ・スキーマの定義とこの初期化、アプリケーションによってトリガーされたときの更新の実行、および問合せへの対応を行います。また、アプリケーションが通知を受けてダウンストリーム操作を実行できるようチェーンコードでイベントをポストすることもできます。たとえば、チェーンコードを使用して発注書、請求書および納品記録を照合した後にイベントをポストし、サブスクライブ・アプリケーションが関連支払を処理したり、内部ERPシステムを更新できるようにします。

チェーンコード開発のリソース

Oracle Blockchain Platformは、Hyperledger Fabricを基盤として使用します。Hyperledger Fabricのドキュメントを使用すると、有効なチェーンコードの記述に役立ちます。

  • 『Welcome to Hyperledger Fabric』。独自のチェーンコードを記述する前に、主な概念とチュートリアルの項を参照してください。

  • 『Go Programming Language』。Goコンパイラ、ツールおよびライブラリでは、チェーンコードの記述を簡略化する様々なリソースが提供されます。

  • 『package shim』。package shimは、チェーンコードが状態変数やトランザクション・コンテキストにアクセスしたり、他のチェーンコードを呼び出すためのAPIを提供します。このドキュメントは、チェーンコードに必要な実際の構文を示します。

Oracle Blockchain Platformには、チェーンコードおよびアプリケーションの記述方法を理解するために役立つダウンロード可能なサンプルが用意されています。「チェーンコード・サンプルとは」を参照してください。

チェーンコードにリッチ問合せ構文を追加して、状態データベースに問合せできます。「SQLリッチ問合せ構文」および「CouchDBリッチ問合せ構文」を参照してください。

Goチェーンコードのパッケージ化とZip

チェーンコードを記述したら、ZIPファイルに含めます。Goチェーンコードのパッケージを作成したり、署名する必要はありません。Oracle Blockchain Platformのインストールおよびインスタンス化プロセスによって、「チェーンコードをデプロイするための一般的なワークフロー」に説明されている処理が行われます。

チェーンコードに外部依存関係がある場合は、それをZIPファイルのvendorディレクトリに配置します。

Node.jsチェーンコードのパッケージ化とZip

Node.jsチェーンコードを記述する場合は、次の2つのセクションを含む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ファイルは、パッケージ内の任意の場所に配置できます。
  • "start" : "node <start>.js"package.jsonに指定されていない場合、server.jsをルート・ディレクトリに配置する必要があります。

チェーンコードおよびパッケージ・ファイルをzipファイルに含め、Oracle Blockchain Platformにインストールします。

Javaチェーンコードのパッケージ化とZip

Javaチェーンコードを記述する場合、GradleまたはMavenを選択してチェーンコードをビルドできます。

Gradleを使用する場合、チェーンコード、build.gradleおよびsettings.gradleをzipファイルに含め、Oracle Blockchain Platformにインストールします。次に、チェーンコードzipパッケージのサンプル・ファイル・リストを示します:
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にインストールします。次に、チェーンコードzipパッケージのサンプル・ファイル・リストを示します:
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

チェーンコードのテスト

チェーンコードを記述した後、テストする必要があります。次を参照してください:

チェーンコードのインストールとインスタンス化

チェーンコードをテストしたら、「チェーンコードをデプロイするための一般的なワークフロー」の情報に従ってデプロイできます。

チェーンコードのアップグレード

チェーンコードは、バージョンを変更することで、いつでもアップグレードできます。チェーンコード名は同じである必要があります。そうしないと、まったく別のチェーンコードとみなされます。

  1. チェーンコードのバージョンを変更します

  2. 「チェーンコードのアップグレード」の指示に従って、新しいバージョンのチェーンコードをインストールおよびアップグレードします。