見出し画像

Hyperledger Fabricを学ぶ(18回目)Fabcarのチェーンコード②

こんにちは。

このブログでは、ブロックチェーン関連を中心としたテック系の情報の紹介をしております。

この連載では、オープンソースのブロックチェーンプラットフォーム「Hyperledger Fabric」について、少しずつ勉強を進めてゆきます。

自分なりに公式のドキュメントを噛み砕きながら、分かり易くまとめて行きたいと思います。

前回では、サンプルネットワーク「Fabcar」に登録されているチェーンコードを見てきました。

今回は、サンプルアプリケーションで使われていなかったチェーンコードを実際に動かしてみようと思います。

queryCar() 指定した自動車情報の参照

Fabcarにインストールされているチェーンコードは以下から確認することができます。

https://github.com/hyperledger/fabric-samples/blob/master/chaincode/fabcar/javascript/lib/fabcar.js

queryCar() コードは以下の様になっています。

async queryCar(ctx, carNumber) {
       const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state
       if (!carAsBytes || carAsBytes.length === 0) {
           throw new Error(`${carNumber} does not exist`);
       }
       console.log(carAsBytes.toString());
       return carAsBytes.toString();
   }

queryCar() は、パラメータに指定した自動車番号(carNumber)の自動車の情報を取り出すチェーンコードの様です。

では、実際に実行してみましょう。

queryCar() 実行用のプログラムを一から書くのは面倒なので、fabcarディレクトリにある「query.js」を流用します。

「query.js」をコピーして、呼び出すチェーンコードを書き込んでいるところを編集します。

(編集前)

// queryCar chaincode function - requires 1 argument, ex: args: ['CAR4'],
// queryAllCars chaincode function - requires no arguments , ex: args: [''],
const request = {
	//targets : --- letting this default to the peers assigned to the channel
	chaincodeId: 'fabcar',
	fcn: 'queryAllCars',
	args: ['']
};

(編集後)

// queryCar chaincode function - requires 1 argument, ex: args: ['CAR4'],
// queryAllCars chaincode function - requires no arguments , ex: args: [''],
const request = {
	//targets : --- letting this default to the peers assigned to the channel
	chaincodeId: 'fabcar',
	fcn: 'queryCar',
	args: ['CAR0']
};

実行するチェーンコードプログラム名を指定する「fnc:」に「queryCar」を、パラメータを指定する「args:」に自動車番号「car0」を指定します。

編集したquery.js を実行すると以下のような実行結果が得られます。

Store path:/mnt/c/fabric/fabric-samples/fabcar/hfc-key-store
Successfully loaded user1 from persistence
Query has completed, checking results
Response is  {"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}

元々query.js はすべての自動車情報を取得するプログラムでしたが、指定した「car0」のみの情報が取得できています。

次回は「changeCarOwner() 」を実行してみます。

おわり。


この記事が気に入ったらサポートをしてみませんか?