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() 」を実行してみます。
おわり。