見出し画像

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

こんにちは。

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

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

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

前回はHyperledger Fabricのネットワーク起動がどのように行われているのか、サンプル「Fabcar」の起動プログラム「startFabric.sh」の中身を見てみました。

今回はFabcarでインストールしているチェーンコードの中身を見ていこうと思います。

チェーンコードのインストール

Fabcarではネットワーク起動用のプログラム「startFabric.sh」の中でチェーンコードのインストールを行っています。

# Now launch the CLI container in order to install, instantiate chaincode
# and prime the ledger with our 10 cars
docker-compose -f ./docker-compose.yml up -d cli

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar

CLIコンテナの立ち上げの後、fabcarのチェーンコードをインストールしています。

Fabcarのチェーンコード

インストールされたチェーンコードはGitHub上に公開されています。

こちらのURLからインストールされたチェーンコードの一覧を参照することができます。

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


ここでは、いくつかのチェーンコードプログラムが実装されています。

・initLedger()
・queryCar()
・createCar()
・queryAllCars()
・changeCarOwner()

このうち、initLedger()はネットワーク起動時プログラムの「startFabric.sh」の中で実行されていました。

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n fabcar -c '{"function":"initLedger","Args":[""]}'

台帳に初期データを追加するプログラムですね。

queryAllCars()は「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: ['']
};

こちらは台帳に登録されている全ての自動車データを出力するためのプログラムです。

createCar()は「invoke.js」で呼び出されていました。

var request = {
        //targets: let default to the peer assigned to the client
        chaincodeId: 'fabcar',
        fcn: 'createCar',
        args: ['CAR10', 'Toyota', 'Purius', 'White', 'MasaAndTomo'],
        chainId: 'mychannel',
        txId: tx_id
};

こちらは新しい自動車情報を追加するためのプログラムです。

まとめ

「Fabcar」ではチェーンコードプログラムとして、以下のプログラムが実装されていました。

・initLedger()
・queryCar()
・createCar()
・queryAllCars()
・changeCarOwner()

画像1

「Fabcar」のサンプルプログラムですは、クライアントアプリケーションから、登録されたチェーンコードプログラムを呼び出すことで、台帳の情報を取得したり、書き込んだりしています。

以前紹介した「Fabcar」のサンプルプログラムでは、queryCar()とchangeCarOwner()は使われませんでした。

次回は実際にこの二つを呼び出して、動きを見てみようと思います。

いいなと思ったら応援しよう!