#0.前回
前回の投稿でHyperLedger Fabricの起動まで行いましたので今回は動作確認のためgo言語のサンプルソースを使ってchaincodeの実行を行いたいと思います。
#1.chaincodeとは
端的にいうと、イーサリアムでいうスマートコントラクトのことであり、HyperLedger Fabricではchaincodeと呼んでいます。HyperLedger Fabricでもブロックチェーン上にプログラムを実行することができます。HyperLedger Fabricを使用したブロックチェーンの開発となれば大半がchaincodeの開発になると思います。
#2.dockerのCLIイメージへログインする
前回の投稿に沿ってHyperLedger Fabricを起動した場合、イメージ名がcli
であるイメージが起動されているはずです。コマンド実行によりチェーンコードを実行するためのイメージですが、chaincodeのインストール、インスタンス化についても使用します。以下のコマンドでイメージの中へログインします。
#「cli」の部分にdockerのイメージ名を入れる
sudo docker exec -it cli bash
#3.ソース格納用のディレクトリを作成する
ログインしたら、イメージ内部にソース格納用のディレクトリを作成します。作成したらログアウトしておきます。
mkdir -p /opt/gopath/src/github.com/sample
exit
#4.dockerへファイルをコピー
以下のコマンドでdockerのcliイメージへファイルをコピーします。ここではサンプルソースであるchaincode_example02.goを使用します。
cd /home/vagrant/fabric-samples/chaincode/chaincode_example02/go
sudo docker cp chaincode_example02.go cli:/opt/gopath/src/github.com/sample/chaincode_example02.go
#5.ファイルのインストール
chaincodeをsample
という名前でインストールします。更新をする場合は、-v 1.0
がバージョン情報になっていますので、バージョンを上げて実行してください。
sudo 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 sample -v 1.0 -p github.com/sample
#6.インスタンス化
chaincodeをインスタンス化します。サンプルソースは簡単な送金アプリになっていて、-c '{"Args":["init","a","5000","b","5000"]}'
で初期の設定を行っています。a
,b
が名称、5000
が金額になります。
sudo 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 instantiate -o orderer.example.com:7050 -C mychannel -n sample -v 1.0 -c '{"Args":["init","a","5000","b","5000"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
#7.送金処理
これでchaincodeを実行できる状態になりました。サンプルのソースの機能で送金機能がありますので実行してみます。ここでは「a」から「b」へ100を送金します。
sudo 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 sample -v 1.0 -c '{"Args":["invoke","a","b","100"]}'
#8.残高確認
以下のコマンドで残高を確認します。aの残高は4900、bの残高は5100と出力されるはずです。
#「a」の場合
sudo docker exec cli peer chaincode query -C mychannel -n sample -c '{"Args":["query","a"]}'
---------結果---------
Query Result: 4900
#「b」の場合
sudo docker exec cli peer chaincode query -C mychannel -n sample -c '{"Args":["query","b"]}'
---------結果---------
Query Result: 5100