Hyperledger Fabric v1.0-alpha2での環境構築手順

NO IMAGE

Hyperledger Fabric v1.0-alpha2での環境構築手順

公式のマニュアル見たり、ネットの記事や本を見ても全く動かないことばっかりのHyperledger Fabricですが、マニュアルのバージョンと、ソフトウェアのバージョンが合わないと、エラーになって全然動かないので、それが起きないようにバージョン固定にしてセットアップ・メモ

v1.0-alpha2は、2017年5月17日位にリリースされた

前提知識

  • 基本的なブロックチェーンの用語と意味を知っている (genesis blockなど)
  • Hyperledger Fabricの基礎用語と意味を知っている (オーダラー、チャンネルなどの意味と役割)

v1.0-alpha2の公式手順書

https://github.com/hyperledger/fabric/blob/59ec440d3f51aef510b149b8b3b0909ef093c8f4/docs/source/getting_started.rst

上記のマニュアル固定で実施する

作成される環境

  • 2つの組織が、それぞれ2つのピアを管理 (=4ピア)
  • 一つのオーダラー (ソロorderingサービス)

docker psするとこんな感じ

$ docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                              NAMES
ede0870c2393        dev-peer0.org1.example.com-mycc-1.0   "chaincode -peer.a..."   4 hours ago         Up 4 hours                                                             dev-peer0.org1.example.com-mycc-1.0
14e41648eb86        hyperledger/fabric-peer               "peer node start"        4 hours ago         Up 4 hours                                                             cli
97cda571f1d1        hyperledger/fabric-peer               "peer node start -..."   4 hours ago         Up 4 hours          0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp     peer0.org1.example.com
68989aa76773        hyperledger/fabric-peer               "peer node start -..."   4 hours ago         Up 4 hours          0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp   peer1.org2.example.com
7fbfcc700a63        hyperledger/fabric-peer               "peer node start -..."   4 hours ago         Up 4 hours          0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp     peer0.org2.example.com
3484189fbe37        hyperledger/fabric-orderer            "orderer"                4 hours ago         Up 4 hours          0.0.0.0:7050->7050/tcp                             orderer.example.com
4181dc9514e7        hyperledger/fabric-peer               "peer node start -..."   4 hours ago         Up 4 hours          0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp     peer1.org1.example.com

ツール

  • cryptogen: x509証明書を作成と鍵の作成
  • configtxgen: 必要な設定ファイルを作る (オーダラー・ブートストラップとチャンネル作成)

必須条件

  • Docker – v1.12以上
  • Docker Compose – v1.8以上
  • Docker Toolbox – Windowsユーザのみ
  • Go – 1.7以上
  • Git Bash – Windowsユーザのみ。ウィンドウズコマンドプロンプトより良い選択肢として

手順

バイナリとDockerイメージをpull

まず、作業用ディレクトリの作成

mkdir fabric-sample
cd fabric-sample

Dockerを立ち上げておく。
以下のコマンドを実行…となっているが、バージョンが同じであるbootstrap.shを使う

curl -sS https://raw.githubusercontent.com/hyperledger/fabric/master/examples/e2e_cli/bootstrap.sh | bash

v1.0-alpha2用のbootstrap.shはこちら

#!/bin/bash

export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')

curl https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/fabric-binary/${ARCH}-1.0.0-alpha2/fabric-binary-${ARCH}-1.0.0-alpha2.tar.gz | tar xz
cd release/${ARCH}
sh download-dockerimages.sh -c $(uname -m)-1.0.0-alpha2 -f $(uname -m)-1.0.0-alpha2

上記をbootstrap.shとして保存して、chmod755などして実行する。

結果、releaseというディレクトリ以下に設定ファイルなどが配置される。
そして、dockerイメージがダウンロードされる

docker imagesを実行すると以下の様に表示される

jdoe-mbp: johndoe$ docker images
REPOSITORY                     TAG                  IMAGE ID            CREATED             SIZE
hyperledger/fabric-couchdb     latest                3d89ac4895f9        3 days ago          1.51 GB
hyperledger/fabric-couchdb     x86_64-1.0.0-alpha2   3d89ac4895f9        3 days ago          1.51 GB
hyperledger/fabric-ca          latest                86f4e4280690        3 days ago          241 MB
hyperledger/fabric-ca          x86_64-1.0.0-alpha2   86f4e4280690        3 days ago          241 MB
hyperledger/fabric-kafka       latest                b77440c116b3        3 days ago          1.3 GB
hyperledger/fabric-kafka       x86_64-1.0.0-alpha2   b77440c116b3        3 days ago          1.3 GB
hyperledger/fabric-zookeeper   latest                fb8ae6cea9bf        3 days ago          1.31 GB
hyperledger/fabric-zookeeper   x86_64-1.0.0-alpha2   fb8ae6cea9bf        3 days ago          1.31 GB
hyperledger/fabric-orderer     latest                9a63e8bac1f5        3 days ago          182 MB
hyperledger/fabric-orderer     x86_64-1.0.0-alpha2   9a63e8bac1f5        3 days ago          182 MB
hyperledger/fabric-peer        latest                23b4aedef57f        3 days ago          185 MB
hyperledger/fabric-peer        x86_64-1.0.0-alpha2   23b4aedef57f        3 days ago          185 MB
hyperledger/fabric-javaenv     latest                a9ca2c90a6bf        3 days ago          1.43 GB
hyperledger/fabric-javaenv     x86_64-1.0.0-alpha2   a9ca2c90a6bf        3 days ago          1.43 GB
hyperledger/fabric-ccenv       latest                c984ae2a1936        3 days ago          1.29 GB
hyperledger/fabric-ccenv       x86_64-1.0.0-alpha2   c984ae2a1936        3 days ago          1.29 GB

設定

generateArtifacts.sh により、以下の2つのツールで作成される暗号設定と4つの設定ファイルを作成できる。
channel-artifacts

Crypto Generator

証明書や鍵のジェネレータ

  • x509証明書
  • crypto-config.yaml: ネットワークトポロジ
  • ca-cert: ユニークなルート証明書
  • keystore: プライベート鍵
  • signcerts: パブリック鍵
  • /crypto-config/: 保存先

Configuration Transaction Generator

設定ファイルを作成する

  • configtxgenツール: fabric/configtxgen.rst at master · hyperledger/fabric
    • 4つの設定ファイルを作る
    1. orderer bootstrap block
    2. fabric channel configuration transaction
    3. 2つのanchor peer transactions
  • 設定ファイル: configtx.yaml
    • 3つの組織
      • オーダラー組織(OrdererOrg)
      • ピア組織(Org1とOrg2)
    • このファイルが設定するコンソーシアム: SampleConsortium
  • オーダラージェネシスブロック: TwoOrgsOrdererGenesis
  • チャンネル: TwoOrgsChannel
  • 各ピア組織用のアンカー・ピア(peer0.org1.example.comとpeer0.org2.example.com)

設定ファイルを手動で作成

  • 今回はやらない

設定ファイルを自動で作成

もし手動で作成してしまっていたら

  • /crypto-config/ ディレクトリを削除する
  • /channel-artifacts/ ディレクトリから4つの設定ファイルを削除する

スクリプトのあるプラットフォームのディレクトリに行く。

./generateArtifacts.sh <チャンネルID>

すると、以下のようなものが表示される

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################

##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################

#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################

#################################################################
#######    Generating anchor peer update for Org0MSP   ##########
#################################################################

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################

ネットワークの開始

始める前に、docker-compose-cli.yamlのscript.shの部分をコメントアウトする。
コメントアウト後は、以下のような形になる。

working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
# command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
volumes

ネットワークを開始する。<チャンネルID>は、自分の好きな値を入れる。

CHANNEL_NAME=<チャンネルID> TIMEOUT=60 docker-compose -f docker-compose-cli.yaml up -d

タイムアウトは、60秒に設定しています。

環境変数の設定

CLIコマンドをpeer0.org1.example.comに実行するために以下の4つの環境変数を設定する。面倒なので個人的には、シェルスクリプトにしました。

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

上記のパスを確認したい場合は、docker-compose-base.yamlを参照

Dockerに入る

以下を実行する

docker exec -it cli bash

以下が表示される

root@0d78bb69300d:/opt/gopath/src/github.com/hyperledger/fabric/peer#

チャンネルの作成と参加

channel.txをオーダラーに渡す

dockerの中で、channel-artifactsディレクトリはマウントされているので、dockerの中で以下を行う

その前にチャンネルIDを以下のように環境変数に設定しておく

CHANNEL_NAME=チャンネルID

チャンネルの作成

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

これによって <チャンネルID.block>が返ってくる。これを使ってチャンネルに参加する。

peer channel join -b <チャンネルID.block>

chaincodeのインストールと初期化

インストール

まず、サンプルのGo言語のコードを4つの内の1つのピアノードにインストールする。

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

初期化

チャンネル上のチェーンコードを初期化する

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')"

Query #1

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

Invoke #2

100持っている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"]}'

Query #2

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

結果として90が返ってくる

Query Result: 90

とりあえず、ここまで。

用語

  • ブロックチェーン
  • Hyperledger Fabric v1.0: ハイパーレッジャー、ハイパーレジャー、ファブリック
     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

Techカテゴリの最新記事