最近人気のブロックチェーンについて、調べたことを備忘録として纏めてみました。
はじめに
ブロックチェーン(英語: Blockchain)とは、データベースのトランザクションをブロックという単位にして、それぞれのブロックにハッシュ値を埋め込む(チェーン状に繋いだ)形式でデータの整合性・改ざん防止を図った分散型データベース(ブロックチェーンデータベース)です。
ブロックチェーンデータベースは、Hadoop(HDFS)などの分散型ファイルシステムと異なり、Peer to Peerネットワーク(P2Pネットワーク)でサーバの設置拠点を意識することなく、データを自立的に管理することができます。
ブロックチェーンの詳しい説明は、Wikipediaなどを確認ください。
代表的なブロックチェーン基盤
オープンソースのブロックチェーン基盤はいくつかあり代表的なブロックチェーン基盤を簡単に紹介します。
Bitcoin Core(旧:Bitcoin-Qt)
ビットコイン(仮想通貨)の中核で仮想通貨の支払いやコインに特化しているブロックチェーンです。
Ethereum
Bitcoin Coreが仮想通貨に特化しているのに対して、Ethereumは、汎用的なブロックチェーンを構築可能としています。
なお、Ethereumのスマートコントラクトは、JavaScriptとよく似た高級言語:Solidityで記述します。
Hyperledger Fabric
Hyperledger Fabricは、アプリケーションやソリューションを開発するための基盤として、コンセンサスやメンバーシップサービスなどのコンポーネントをプラグアンドプレイできます。
Hyperledger Fabricはコンテナ技術を活用して、システムのアプリケーションロジックを構成し、「チェーンコード」と呼ばれるスマートコントラクトを実装します。
Hyperledger Fabric v1.0.0が2017年7月11日にリリースされた(執筆時点での最新はv1.0.3である)
その他のブロックチェーン基盤(もしくは類似基盤)
Corda:R3コンソーシアム主導で開発された金融向けの基盤
Chain Open Standard 1:企業利用を前提とした機能が特徴
mijin:テックビューロ(開発元)のプライベート型ブロックチェーン
Orb1:独自の分散型台帳技術「Orb DLT」の開発とその関連Fintechソリューションを提供
Monax(旧:Eris):Ethereumから派生したブロックチェーン
※ akitohさんがの記事「さまざまなブロックチェーン技術」が自分よりかなり詳しく書かれていたので参考になります。
用語について
ブロック
ブロックチェーンデータベースのトランザクション郡と1つ前のブロックから生成されたハッシュ値で構成されたデータの単位。
フォーク
ブロックチェーンの分岐。分岐したチェーンはいずれどちらかに収束しなければならない。(パブリック型ブロックチェーンのみ)
ソフトフォークとハードフォークの2種類ある。
- ソフトフォーク:ブロックチェーン自体に変更を行わずアカウントやコントラクトを変更させる。
- ハードフォーク:ブロックチェーン自体の内容を巻き戻し、ある時点から再開させる。
スマートコントラクト
スマートコントラクトは、その名前の通り、コントラクト(契約)をスマートに行えるプロトコルのことです。つまりスマートコントラクトとは契約の自動化であり、契約の条件確認や履行までを自動的に実行させることができます。
スマートコントラクトは、汎用ブロックチェーンで使用されており、EthereumではSolidity言語,Hyperledger Fabricでは、GO言語やJava言語で記述します。
コンセンサスアルゴリズム
分散(P2P)ネットワークのように情報到達にタイムラグがある場合、単一の結果を得るための分散合意形成アルゴリズムです。ブロックチェーンでは、ブロックの正当性を検証しブロックチェーンに反映するために使用します。
-
Proof of Work(PoW)アルゴリズム
計算量による証明。参加者は確率的に解答が困難な問題を一番早く解くことができた参加者にブロック作成許可と報酬を与える。 -
Proof of Stake(PoS)アルゴリズム
仮想通貨ではより多くコインを所有している参加者が優先的にブロック作成許可を得る。 -
Practical Byzantine Fault Tolelance(PBFT)
ネットワークの全ての参加者をあらかじめ知っておき、管理者から全ての参加者へ要求を送ります。その要求に対する結果を集計し、多数を占めている値を採用する。
コアノードにブロックの生成権限を集中させ、コアノードによる合議制において、トランザクションの承認を行う仕組み
State Database(ステートDB)
ブロックチェーンで使用するデータベースのこと。
Hyperledger Fabric v1.0の環境について
IBM社が提供する「IBM Bluemix」というクラウドサービスにおいて、Blockchainサービス構築のための各種インターフェイスが用意されており、手頃な値段でクラウド上で用意に構築が可能です。
今回は、ローカル環境にHyperledger FabricのDockerコンテナをダウンロードして、Hyperledger FabricのSampleコードを実行する方法を記述します。
実行環境
OS:Red Hat Enterprise Linux 7.2
Docker:1.13.1
docker-compose:1.16.1
※ 各プラットフォームによって異なるため、Dockerのインストール手順は割愛します。
手順
Hyperledger Fabric v1.0.2のdockerコンテナをダウンロードし、サンプルプログラムからHyperledger Fabricを起動させるところまで実行します。
1.暗号化(x509)ツールおよびdockerコンテナのダウンロード
2.fabric-samplesの配備
3.fabric-samples:first-networkの起動
1.暗号化(x509)ツールおよびdockerコンテナのダウンロード
暗号化(x509)ツールおよびHyperledger Fabricがインストールされているdockerコンテナをダウンロードします。
# mkdir /opt/docker
# cd /opt/docker/
# curl -sSL https://goo.gl/Gci9ZX | bash
# chown -R root:root bin
Dockerイメージの状態を確認します。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hyperledger/fabric-ca x86_64-1.0.2 7e53be14f804 4 weeks ago 238.3 MB
hyperledger/fabric-ca latest 7e53be14f804 4 weeks ago 238.3 MB
docker.io/hyperledger/fabric-tools x86_64-1.0.2 ba9750b2565d 4 weeks ago 1.328 GB
hyperledger/fabric-tools latest ba9750b2565d 4 weeks ago 1.328 GB
docker.io/hyperledger/fabric-couchdb x86_64-1.0.2 3f922f54bd68 4 weeks ago 1.469 GB
hyperledger/fabric-couchdb latest 3f922f54bd68 4 weeks ago 1.469 GB
hyperledger/fabric-kafka latest 0b4b1d249e65 4 weeks ago 1.286 GB
docker.io/hyperledger/fabric-kafka x86_64-1.0.2 0b4b1d249e65 4 weeks ago 1.286 GB
docker.io/hyperledger/fabric-zookeeper x86_64-1.0.2 1efb063147d3 4 weeks ago 1.301 GB
hyperledger/fabric-zookeeper latest 1efb063147d3 4 weeks ago 1.301 GB
docker.io/hyperledger/fabric-orderer x86_64-1.0.2 6efd17e86e65 4 weeks ago 151.2 MB
hyperledger/fabric-orderer latest 6efd17e86e65 4 weeks ago 151.2 MB
docker.io/hyperledger/fabric-peer x86_64-1.0.2 0e2ed51971c9 4 weeks ago 154.1 MB
hyperledger/fabric-peer latest 0e2ed51971c9 4 weeks ago 154.1 MB
docker.io/hyperledger/fabric-javaenv x86_64-1.0.2 0be45dbd7ff4 4 weeks ago 1.414 GB
hyperledger/fabric-javaenv latest 0be45dbd7ff4 4 weeks ago 1.414 GB
docker.io/hyperledger/fabric-ccenv x86_64-1.0.2 d0f166e1a89e 4 weeks ago 1.282 GB
hyperledger/fabric-ccenv latest d0f166e1a89e 4 weeks ago 1.282 GB
docker.io/hyperledger/fabric-baseos x86_64-0.3.2 bbcbb9da2d83 5 weeks ago 128.8 MB
暗号化(x509)ツールをダウンロードした/opt/docker/bin
を環境変数:PATHに追加します。
2.fabric-samplesの配備
GitHubに公開されているfabric-samplesをダウンロードします。任意のディレクトリに配備します。
3.fabric-samples:first-networkの起動
fabric-samples:first-networkの証明書の作成およびfirst-networkの起動をします。
# cd [任意のディレクトリ]/fabric-samples-release/first-network/
# ./byfn.sh -m generate
# ./byfn.sh -m up
以下のメッセージが表示され、正常にHyperledger Fabricが起動したことを確認する。
========= All GOOD, BYFN execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
docker ps
コマンドにて、Dockerコンテナの実行状態を確認します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cca60322ac63 dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab "chaincode -peer.addr" 40 seconds ago Up 38 seconds dev-peer1.org2.example.com-mycc-1.0
7399010a74d5 dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 "chaincode -peer.addr" About a minute ago Up About a minute dev-peer0.org1.example.com-mycc-1.0
c094f9b95262 dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b "chaincode -peer.addr" About a minute ago Up About a minute dev-peer0.org2.example.com-mycc-1.0
2b79531a74e5 hyperledger/fabric-tools "/bin/bash -c './scri" 2 minutes ago Up 2 minutes cli
eb1c70cf917b hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
fce3b9141d56 hyperledger/fabric-orderer "orderer" 3 minutes ago Up 2 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
4c158b7b078f hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
14e532038e48 hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
a74783dd25e6 hyperledger/fabric-peer "peer node start" 3 minutes ago Up 2 minutes 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
fabric-samples:first-networkの停止は以下のコマンドを実行します。
# ./byfn.sh -m down
最後に
今回は、docker コンテナのダウンロードから起動までの手順を記載しました。
各手順は、Hyperledger Fabricの公式ドキュメントに記載されているので、詳細はそちらを参照ください。