目次


Hyperledger Fabric 入門, 第 6 回

Hyperledger Fabric v1.4 のプログラミングモデル

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Hyperledger Fabric 入門, 第 6 回

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Hyperledger Fabric 入門, 第 6 回

このシリーズの続きに乞うご期待。

第 6 回は Hyperledger Fabric v1.4 で実装されたプログラミングモデルについて紹介します。

Hyperledger Fabric の公式ドキュメントの Fabcar というサンプルを元に解説します。

1

はじめに

Hyperledger fabric の最新の v1.4 ではプログラミングモデルのアップデートがあり、より簡単にチェーンコードや、フロントアプリ(ブロックチェーンネットワークとの接続部分)を書くことができるようになりました。

Hyperledger Fabric v1.4 でもこれまでのチェーンコードやクライアントコードも問題なく動作します。 本稿では Hyperledger Fabric の公式ドキュメントに掲載されている Fabcar というサンプルアプリを元に解説します。

Fabcar ではチェーンコードとユーザの登録や台帳への書き込み用のクライアントコードが用意されています。 また v1.4 の Fabcar には v1.3 までのサンプルプログラムも格納されているため、それぞれのサンプルプログラムの違いも確認することができます。

尚、v1.4 のプログラミングモデルのアップデートがされたのは Javascript の SDK のモジュールだけで、Go や Java のプログラミングモデルについてはこれまでと変更はありません。

2

Fabcar の概要

Fabcar は自動車を作成して、所有者を変更できるアプリケーションです。 自動車の(色、メーカー、所有者等)の情報をブロックチェーン上で管理することができます。

Fabcar ではブロックチェーンネットワークに接続するためのユーザの作成 (enroll) や台帳の参照、更新を行うことができます。 コードがシンプルに記述されているので、初めて、スマートコントラクトやクライアントコードを記述する人には参考になると思います。 また Hyperledger Fabric のコンポーネント (Peer や Ordeer) は用意されているスクリプトですぐに起動できます。

 

3

チュートリアル

公式ドキュメントのチュートリアルを元に概要を説明します。 事前に環境設定も必要ですのでこちらをご確認ください。

まず、サンプルプログラムをインストールします。fabric-samples というディレクトリが作成されます。 fabric-samples の中の fabcar ディレクトリを開きます。

curl -sSL http://bit.ly/2ysbOFE | bash -s 1.4.0
cd fabric-samples
cd fabcar

startFabric.sh を実行して、Hyperledger Fabric のブロックチェーンネットワークを起動します。

./startFabric.sh javascript

Hyperledger Fabric のネットワークが起動します。

docker ps コマンドで起動したコンテナを確認します。

docker ps --format "{{.Names}}"

以下のコンテナが表示されれば完了です。

dev-peer0.org1.example.com-fabcar-1.0
cli
peer0.org1.example.com
couchdb
orderer.example.com
ca.example.com

次にユーザの作成、チェーンコードの実行を行います。

javascript のディレクトリに移動します。javascript ディレクトリの中には改定されたサンプルプログラムが入っており、javascript-low-level ディレクトリの中には Hyperledger Fabricv1.3 まで利用されていたこれまでのサンプルプログラムが格納されています。

cd javascript

ライブラリをイントールします。

npm install

ユーザを作成します。

node enrollAdmin.js
node registerUser.js

wallet フォルダの中に admin と user1 の 2 つのユーザが作成されます。

ls wallet

最後に台帳へアクセスします。query.js と envoke.js を実行します。

node query.js
node invoke.js

実際のチュートリアルでは実行するチェーンコードの関数を変更する等、色々と確認することができます。

詳しくはこちらをご確認ください。

4

SDK

v1.4 では大きく分けて以下の 2 つの部分で簡易化が実装されました。

 

 

v1.4 から提供された fabric-network モジュールに含まれる FileSystemWallet クラスと Gateway クラスを利用することで、以前より、簡単にコードを記述することができます。 まずはモジュールを import します。

const { FileSystemWallet, Gateway } = require('fabric-network');

ブロックチェーンネットワークに接続します。

ブロックチェーンネットワークの情報と接続に利用するユーザ名を指定します。

//接続するブロックチェーンネットワークの情報が書かれた connection プロファイルを指定
const ccpPath = path.resolve(__dirname, '..', '..', 'basic-network', 'connection.json');
const ccpJSON = fs.readFileSync(ccpPath, 'utf8');
const ccp = JSON.parse(ccpJSON);
//ブロックチェーンネットワークに接続
const gateway = new Gateway();
await gateway.connect(ccp, { wallet, identity: 'user1' });

connection プロファイルの詳細についてはこちらをご確認ください。

アクセスするチャネルとチェーンコードを指定します。

const network = await gateway.getNetwork('mychannel');
const contract = network.getContract('fabcar');

トランザクションを送信します。

チェーンコードの関数名 (createCar,queryCar) を指定した後、関数に渡す引数を記載しています。

await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');

クエリの場合はこちら

await contract.evaluateTransaction('queryCar', 'CAR4');

submitTransaction メソッドはチェーンコードの実行に必要な全ての endorsing Peer に送信します。

peer からチェーンコードのシミュレーション実行の結果を確認し、Orderer へ Transaction を送信し、発生したイベントを受信します。

v1.3 まではこれらの処理を全て開発者側で記述する必要がありましたが、v1.4 から全て submitTransaction メソッドが行ってくれます。

5

チェーンコード

v1.4 では大きく分けて以下の部分で簡易化が実装され、よりわかりやすい構造になりました。

 

v1.4 から実装されたプログラミングモデルを利用するためには、まず fabric-contract-api モジュールを使って、チェーンコードの関数を定義するクラスを定義します。

const { Contract } = require('fabric-contract-api');
class FabCar extends Contract {
//関数を定義
}

関数は以下のように定義します。

async queryCar(ctx, carNumber) {...}
async queryAllCars(ctx) {...}

v1.3 までは Init 関数、Invoke 関数を定義し、Invoke 関数の中で関数名に応じた分岐処理を記述して、それぞれの個々の関数 (queryCar,queryAllCars 等) を呼び出していました。

v1.4 からは個々の関数を直接実行することができ、Init 関数や Invoke 関数を定義する必要が無くなり、チェーンコードの構造がわかりやすくなりました。

6

まとめ

今回は v1.4 で新しく実装されたプログラミングモデルについて紹介しました。

また Visual Studio Code では Hyperledger Fabric のアドオンも提供されているので、これを使うとチェーンコードのデプロイや開発が普通のテキストエディタを使うより簡単になります。

2018 年 12 月の時点でまだプレビュー版ですが、詳細はこちらをご確認ください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1064308
ArticleTitle=Hyperledger Fabric 入門, 第 6 回: Hyperledger Fabric v1.4 のプログラミングモデル
publish-date=01152019