Hyperledger Fabric 概要
Hyperledger Fabricはメンバー管理機能を備えた許可型ブロックチェーンです。また、セキュリティやプライバシーを強化するための多様な機能も備わっています。この記事では、Hyperledger Fabricのアーキテクチャについて解説します。
アーキテクチャ
Hyperledger Fabricにはチャネルの概念があります。チャネルは1つのネットワークを分割して、データの共有範囲を設定できるものです。チャネルに参加していないユーザーはそのチャネルに紐づけられたトランザクションやデータにアクセスできません。
図1は2つのOrganizaiton(Org1、 Org2)が同じチャネルに参加している最も単純なファブリックネットワークを示しています。Peer、Orderer、CAなどそれぞれのコンポーネントを見ていきます。
Peer
Peerは台帳(World StateとBlockchain)を保持します。World StateはChaincodeのパブリック変数の最新バージョンの値を格納し、ブロックチェーンはこれまでの全てのトランザクションを格納しています。World StateデータベースにはLevel DBとCouch DBのどちらかを選択できます。Level DBはキーバリューのDB、Couch DBはJSONに基づくリッチなクエリ操作が可能なDBです。各Peerは1つ以上のチャネルに参加でき、同じPeer上の異なるチャネルのストレージは分離されます。
また、PeerにはEndorsing PeerとCommiting Peerの2種類があります。Endorsing Peerはトランザクションの実行と検証を行いますが、Commiting Peerは検証のみ行い、実行は行わないことが特徴です。
Orderer
Ordererはトランザクションの順序を確定して、ブロックを作成します。そして、関連するチャネル上の全てのPeerに新しいブロックを配布します。
CA
Certificate Authority(CA)はユーザー証明書の管理を担当します。Hyperledger Fabricは許可型ブロックチェーンなので、許可されたユーザーのみがトランザクションにクエリし(データにアクセス)、または呼び出せる(トランザクションを作成)ように制御します。
Client
ClientはFabricブロックチェーンネットワークと対話するアプリケーションです。PeerにChaincodeの実行を依頼し、Ordererにトランザクションを送信します。CAで指定された権限に基づいて対話を行います。Fabric SDKを用いて実装されます。
Chaincode
Chaincodeは台帳の更新、照会のロジックです。Go、Node.js、Javaなどの言語で実装できます。Chaincodeをデプロイするにはネットワークの管理者がターゲットのPeerにChaincodeをインストールしてから、ordererを呼び出してChaincodeをインスタンス化します。管理者はEndorsement PolicyをChaincodeに定義できます。Endorsement Policyは全てのピアの台帳にトランザクションを追加する前に、トランザクションの結果に同意(Endorsement)する必要のあるPeerを定義します。
トランザクション処理の流れ
Hyperledger Fablicにおけるトランザクション処理は大きく3つに分けられます。
- Endorsement(図4の1~3)
- Ordering(図4の4~5)
- ValidationとCommitment(図4の6)
- ClientはTransaction Proposalを作成し、ユーザーの証明書で署名します。それを事前に決められたEndorsing Peerに送信します。
- 各Endorsing PeerはProposalのペイロードからユーザーのIDと権限を検証します。検証に通ったら、トランザクションをシミュレートし、read-write setと共にレスポンスを作成します。そして、証明書を使ってレスポンスに署名します。
- ClientはEndorsing Peerから送られたレスポンスをチェックします。
- ClientはEndorseされたレスポンスを添付したトランザクションをOrdererに送信します。
- Ordererは受け取ったトランザクションの順序を確定し、新しいブロックを作成して、生成されたブロックに証明書で署名します。
- Ordererは作成したブロックを関連するチャネル上の全てのPeerに送信します。各Peerは受信したブロック内のトランザクションが適切なEndorsing Peerによって署名されていること、十分な承認があることを確認します。そして、トランザクションに含まれるread-write setを自身のローカルのWorld Stateと照らし合わせて検証します。検証チェックに通ると、各PeerのWorld Stateが更新されます。検証チェックに通らない無効なトランザクションは弾かれて、World Stateには影響しません。しかし、受信したブロックは無効なトランザクションが含まれているかに関わらず、ブロックチェーンには追加されます。
- Clientはイベントを受け取ります。
まとめ
以上がHyperledger Fabricの各コンポーネントのとトランザクション処理の流れの解説になります。
今後も,Acompanyからブロックチェーンに関する記事を投稿していきますので,ぜひfollowしていただけると嬉しいです.