Help us understand the problem. What is going on with this article?

HyperLedger Fabric v1.1でchaincodeを実行する

More than 1 year has passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした