Hyperledeger Fabricのチュートリアルをやってみる Part1

初めに

PS/SLの佐々木です。

今までWeb3チームではEthereumのようなパブリックチェーンを使用しての開発や技術検証を行ってきましたが、今年から新しい取り組みとしてコンソーシアム型のチェーンやプライベートチェーンを使用した開発を行っていこうと思っています。

コンソーシアムチェーンで最も有名なところで行くとHyperledger Fabricが候補に挙がってくるのでキャッチアップがてらチュートリアル(参考)を進めて使用感を見てみようと思っています。

Hyperledger Fabricの詳細な説明は別ブログで行いますので今後出る記事を参考にしてください。

今回はHyperledger fabricをドキュメント通りに動かしてみようと思います。

動作環境

windows 10 pro

wsl ubuntsu 20.04.3

事前準備

  • Git
  • cURL
  • Docker
  • Go

Hyperleger install

サンプルとバイナリとDockerイメージをインストールできる

curl -sSL https://bit.ly/2ysbOFE | bash -s

ka-sasaki@1020-00001:~/web3$ ls
fabric-samples

ka-sasaki@1020-00001:~/web3$ docker image ls
REPOSITORY                   TAG       IMAGE ID       CREATED       SIZE
hyperledger/fabric-peer      2.5       2d02d49d3d1a   3 weeks ago   142MB
hyperledger/fabric-peer      2.5.8     2d02d49d3d1a   3 weeks ago   142MB
hyperledger/fabric-peer      latest    2d02d49d3d1a   3 weeks ago   142MB
hyperledger/fabric-orderer   2.5       c833f32f9244   3 weeks ago   111MB
hyperledger/fabric-orderer   2.5.8     c833f32f9244   3 weeks ago   111MB
hyperledger/fabric-orderer   latest    c833f32f9244   3 weeks ago   111MB
hyperledger/fabric-ccenv     2.5       b4bf6fadf0c7   3 weeks ago   638MB
hyperledger/fabric-ccenv     2.5.8     b4bf6fadf0c7   3 weeks ago   638MB
hyperledger/fabric-ccenv     latest    b4bf6fadf0c7   3 weeks ago   638MB
hyperledger/fabric-baseos    2.5       6f1a89df96f3   3 weeks ago   129MB
hyperledger/fabric-baseos    2.5.8     6f1a89df96f3   3 weeks ago   129MB
hyperledger/fabric-baseos    latest    6f1a89df96f3   3 weeks ago   129MB
hyperledger/fabric-ca        1.5       c2449e2873d5   3 weeks ago   209MB
hyperledger/fabric-ca        1.5.11    c2449e2873d5   3 weeks ago   209MB
hyperledger/fabric-ca        latest    c2449e2873d5   3 weeks ago   209MB

サンプルとイメージがダウンロードされていることを確認できます。

最後にbinファイルのパスを通す

export PATH=$PATH:$HOME/fabric-samples/bin
echo "export PATH=\\$PATH:\\$HOME/fabric-samples/bin" >> ~/.bashrc
source ~/.bashrc

テストネットワークの構築

Hyperledger Fabricの構築

ディレクトリは/test-network

  • peer 2つ
  • orderer 1つ
  • CAはなし

test-networkディレクトリに移動し、network.sh を使用してローカルマシン上のDockerからネットワークを構築する

以前の実行結果などあれば削除する

./network.sh down

ネットワーク起動

./network.sh up

起動するとPeer ノード二つとordererノード一つが起動していることが確認できる。

docker ps
CONTAINER ID   IMAGE                               COMMAND             CREATED         STATUS         PORTS
                       NAMES
f3bf9f73341c   hyperledger/fabric-peer:latest      "peer node start"   3 minutes ago   Up 3 minutes   0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:9444->9444/tcp, :::9444->9444/tcp
                       peer0.org1.example.com
0c7fb71179d6   hyperledger/fabric-peer:latest      "peer node start"   3 minutes ago   Up 3 minutes   0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:9445->9445/tcp, :::9445->9445/tcp
                       peer0.org2.example.com
8d55459a26dd   hyperledger/fabric-orderer:latest   "orderer"           3 minutes ago   Up 3 minutes   0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   orderer.example.com

Channelの作成

./network.sh createChannel

Channel 'mychannel' joined

Org1とOrg2がmychannelに参加できたことが確認できる

チェーンコードのデプロイ

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

goで作成されたchaincode(ethereumでいうところの smart contract)をデプロイし、channel上でチェーンコードを使用できるようにする

ネットワークとやり取り

export FABRIC_CFG_PATH=$PWD/../config/

// 以下はOrg1のPeerに対して実行するための環境変数
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

台帳の初期化

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'

// 以下のようなメッセージが出ればOK
-> 2024-06-17 18:48:11.035 JST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200

台帳に登録されているAssetの一覧を取得

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

// 以下のようなメッセージが出ればOK
-> [{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}]

Assetの移動

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

// 以下のようなメッセージが出ればOK
-> 2024-06-17 18:51:02.629 JST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"Michel"
// 以下はOrg2のPeerに対して実行するための環境変数

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

転送結果の確認

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'

// 以下のようなメッセージが出ればOK
-> {"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Christopher","Size":15}

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です