Hyperledger fabric は、ブロックチェーン・ベースのアプリケーション開発の出発点となるオープンソースのブロックチェーン・アプリケーション・プラットフォームです。Hyperledger Fabric ネットワークという言葉を使うとき、それは Hyperledger Fabric を使用して稼動するシステムのことを意味します。
必要最小限のコンポーネントで構成されている場合でも、Fabric ネットワークをデプロイするのは簡単なことではありません。そこで、Fabric コミュニティーがブロックチェーン・アプリケーションの開発者やオペレーターのために作成したのが、Cello というプロジェクトです。Cello を利用すれば、規模の大小を問わずに Fabric ネットワークをデプロイできるようになります。
このチュートリアルでは皆さんがブロックチェーン・ベースのアプリケーション開発を始められるよう、必要なすべてのコンポーネントを備えた小規模な Hyperledger Fabric (バージョン 1.0.2) ネットワークを、Cello を使用して 1 台のUbuntu サーバーにデプロイする方法を説明します。
学習の目的
このチュートリアルでは Hyperledger Fabric ネットワークを稼動させることに加え、次のタスクを行います。
- Fabric ネットワークのオーバーレイ・ネットワークを作成する。
- Registrator サービスと DNS サービスをインストールして構成する (Fabric コンテナー同士が IP アドレスではなくコンテナー名を使用して連動できるようにするため)。
- 1 ノードの Zookeeper と、Fabric の発注者に対応する 1 ノードの Kafka クラスターをインストールして構成する。
- 2 つの異なる組織から 2 つのピアと 1 つの発注者をインストールする。
- 1 つのチャネルを作成し、そのチャネルに 2 つのピアを参加させる。
- 単純なチェーンコードを両方のピアにインストールする。
- チャネルを使用してチェーンコードをインスタンス化する。
前提条件
このチュートリアルでは VirtualBox を使用します。VirtualBox は、Windows、Mac、Linux の各種オペレーティング・システム上で使用できます。具体的な前提条件は次のとおりです。
- VirtualBox バージョン 5.1.0 以降
- 4GB 以上のメモリーを割り当てた仮想マシンをホストするのに十分なメモリー
所要時間
このチュートリアルの所要時間は約 30 分です。
手順
環境を準備する
クリーンな VirtualBox Ubuntu 16.04 仮想マシンを作成するには、VirtualBox と Ubuntu をダウンロードして新しい仮想マシンを自分で作成することもできますが、この演習用にあらかじめイメージを作成して利用できるようにしておきました。このイメージをダウンロードした後、「File (ファイル)」 -> 「Import Appliance (アプライアンスのインポート)」を選択し、ダウンロードしたファイルを選択して、VirtualBox にイメージをインポートします。
S仮想マシンを起動します。既製のイメージを使用した場合、ユーザー名は
ubuntu
、パスワードはps
です。あらかじめ作成されたイメージを使用したのでなければ、ユーザー名とパスワードはこれとは異なるはずです。その場合は、
vars/vb.yml
とvars/vb1st.yml
の両方のファイル内でssh_user
を変更してください。パスワードは、Cello プロジェクトでは使用されません。
依存関係をインストールし、Cello プロジェクトを複製する
仮想マシンから、以下のコマンドを実行します。これらのコマンドによって、依存関係がインストールされ、現行ユーザーに Docker 権限が付与され、Cello プロジェクトも複製されます。
sudo apt-get update sudo apt-get install python-dev python-pip libssl-dev libffi-dev docker.io -y sudo pip install 'ansible>=2.3.0.0' sudo gpasswd -a $USER docker cd ~ && git clone https://gerrit.hyperledger.org/r/cello
SSH 鍵ペアと SSH エージェント鍵ペアによるログインをセットアップします。
mkdir -p ~/.ssh && cd ~/.ssh && ssh-keygen -t rsa -f fd -P "" cat ~/.ssh/fd.pub >> ~/.ssh/authorized_keys
ログアウトして再度ログインし、SSH エージェントを起動します。
eval $(ssh-agent -s) && ssh-add ~/.ssh/fd
Ansible を利用して Fabric ネットワークを立ち上げる
Ansible の run ディレクトリーを作成します。
mkdir -p ~/cello/src/agent/ansible/run
このチュートリアルに関連付けられているテンプレート・ファイルをダウンロードして、
~/cello/src/agent/ansible/run
ディレクトリーに配置します。cd ~/cello/src/agent/ansible/run # the runhosts.tpl file should be here
以下のコマンドを実行して runhosts ファイルを作成します。
cd ~/cello/src/agent/ansible ipaddr=$(ip -4 addr show | awk -F '/' '/inet / {print $1}' | grep -v '127.0.0.1' | awk -F ' ' '{print $2;exit}') sed "s/\$ip/$ipaddr/g" run/runhosts.tpl > run/runhosts
Fabric ネットワークを立ち上げます。
ansible-playbook -i run/runhosts -e "mode=apply env=vb" initcluster.yml --skip-tags="resetconn" ansible-playbook -i run/runhosts -e "mode=apply env=bc2nd" setupfabric.yml
Fabric ネットワークが正常に稼動していることを確認する
以下のコマンドを実行して、すべてのコンテナーが稼動中であることを確認します (以下のリストには出力例も記載されています)。
$ docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}' The results: NAMES STATUS IMAGE dev-peer1st-mad-firstchaincode-1.0 Up 6 minutes dev-peer1st-mad-firstchaincode-1.0-xxxx peer2nd-mad Up 7 minutes hyperledger/fabric-peer:x86_64-1.0.2 peer1st-mad Up 7 minutes hyperledger/fabric-peer:x86_64-1.0.2 1storderer-sin Up 7 minutes hyperledger/fabric-orderer:x86_64-1.0.2 kafka1st Up 7 minutes hyperledger/fabric-kafka:x86_64-1.0.2 zookeeper1st Up 7 minutes hyperledger/fabric-zookeeper:x86_64-1.0.2 registrator.fabric001 Up 15 minutes email4tong/registrator:v10 skydns.fabric001 Up 15 minutes skynetservices/skydns:2.5.3a
チェーンコード・コンテナーが稼動中の状態になっていて、このコンテナーによって生成されたログ・エントリーが正しいことを確認します。
$ docker logs dev-peer1st-mad-firstchaincode-1.0 The results: ex02 Init Aval = 100, Bval = 200
チェーンコードのクエリーを実行します。
チェーンコードのクエリーが成功した場合、それは、チェーンコードがピア上にデプロイされて正常に稼動していることを意味します。以下に、前の手順でインストールしてインスタンス化したチェーンコードに対するクエリー例を記載してあります。
```
$ docker exec -it peer1st-mad bash
peer chaincode query -C firstchannel -n firstchaincode -c '{"Args":["query","a"]}'
The results: Notice that the time stamp will be different on your machine
Query Result: 100
2017-11-09 16:38:11.056 UTC [main] main -> INFO 007 Exiting.....
```
独自のブロックチェーン・アプリケーションを開発する
稼動中の環境で、独自のチャネル、チェーンコード、ブロックチェーン・アプリケーションを作成できます。チェーンコードの詳細やチェーンコードの開発方法について調べるには、このリンク先のチェーンコード・チュートリアルを参照してください。
Fabric ネットワークを破棄する
Fabric ネットワークを削除するには、以下のコマンドを実行します。
ansible-playbook -i run/runhosts -e "mode=destroy env=bc2nd" setupfabric.yml
ansible-playbook -i run/runhosts -e "mode=destroy env=vb" initcluster.yml
まとめ
おめでとうございます!必要なすべてのコンポーネントを備えた小規模な Hyperledger Fabric (バージョン 1.0.2) ネットワークを 1 台のUbuntu サーバーにデプロイできました。これで、ブロックチェーン・ベースのアプリケーション開発を開始できます。
- Blockchain Code Patterns: 詳細な資料や動画とともに、数々のサンプルが用意されています。
- Hyperledger Fabric: Hyperledger Fabric の公式資料があります。
- Hyperledger Cello: Cello プロジェクトの資料があります。