2017年6月15日木曜日

Hyperledger Fabric V1.0 β のインストール方法

ブロックチェーン基盤であるFabric V1.0 β のインストール方法について説明する。
Ubuntu OSには、Dockcer及びDocker-composeをインストール済みであること。

(参照元URL)
https://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html
  1. Ubuntu OSにTeratermでログインする。
  2. 以下のフォルダを作成する。

    $ mkdir fabric-sample$ cd fabric-sample
  3. 以下のコマンドを実行する。このコマンドを実行すると、インストールに必要なパッケージをダウンロードしてくれる。(結構時間がかかる)

    $curl -sSL https://goo.gl/LQkuoh | bash

  4. docker imagesコマンドでFabricイメージがダウンロードされていることを確認する。


  5. configtxgentツールを使うと、Fabricを動かすために必要となる以下の4つの設定情報ファイルを自動的に作成してくれる。

    ・bootstrap block
    ・チャネルトランザクション
    ・2つのアンカーPeerトランザクション

    まず、bootstrap blockを作成するために、以下のコマンドを実行する。

    $ cd release/linux-amd64/
    $ ./bin/cryptogen generate --config=./crypto-config.yaml

    以下の警告が大量に出力されるが無視する。

    [bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP.
  6. 次に、チャネルトランザクションを作成する。

    $ export FABRIC_CFG_PATH=$PWD
    $ ./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
    $ ./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel2017-06-15 23:31:19.449 JST [common/configtx/tool] main -> INFO 001 Loading configuration
    2017-06-15 23:31:19.460 JST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
    2017-06-15 23:31:19.461 JST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx
  7. Org1という組織にアンカーPeerを登録する。

    $ ./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
    2017-06-05 22:28:12.620 JST [common/configtx/tool] main -> INFO 001 Loading configuration
    2017-06-05 22:28:12.625 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
    2017-06-05 22:28:12.625 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

    同様に、Org2という組織にアンカーPeerを登録する。

    $ ./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychnnel -asOrg Org2MSP
    2017-06-05 22:30:01.798 JST [common/configtx/tool] main -> INFO 001 Loading configuration
    2017-06-05 22:30:01.805 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
    2017-06-05 22:30:01.805 JST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
  8. 以下のコマンドを実行する。

    $ ./generateArtifacts.sh mychannel
  9. docker-compose-cli.yamlをviで開いて、以下をbashコマンドをコマンドアウトする。

    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    # command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
        volumes:
  10. クライアントのDockerコンテナを起動する。

    $ CHANNEL_NAME=mychannel TIMEOUT=60 docker-compose -f docker-compose-cli.yaml up -d
  11. docker psコマンドを実行し、cliというコンテナが起動していることを確認する。

  12. cliコンテナにログインする。

    $ docker exec -it cli bash
  13. 「mychannel」というチャネルを作成する。

    $ CHANNEL_NAME=mychannel
    # peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem
  14. 「mychannel」チャネルに「peer0.org1.example.com」を追加する。

    $ peer channel join -b mychannel.block
  15. Fabric付属のexample02というチェーンコードをインストールする。

    $ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
  16. チェーンコードをイニシエトする。

    $ peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
  17. aという値をクエリしてみる。

    $peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
    ・・・
    Query Result: 100
    ・・・
  18. チェーンコードをinvokeして、aからbに10資産移動させる。

    $ peer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem  -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

    aの資産が90になっていることを確認する。

    $peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
    ・・・
    Query Result: 90
    ・・・

    bの資産が110になっていることを確認する。

    $peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","b"]}'
    ・・・
    Query Result: 110
    ・・・

0 件のコメント: