はじめに
Hyperledger-fabric(以下HLF)の基盤部分の理解があいまいだったので、まとめてみました。
【本記事で触れないこと】
- Blockchainとは
- Hyperledger-fabricとは
- HLFネットワーク構築時の具体的なコマンド
HyperLedger-fabricネットワークの全体像
構築を始める前に、HLFネットワークの全体像を確認します。
要素 | 役割 |
---|---|
R* | HLFネットワークに参加する組織 |
C1 | チャネル。 参加者が相互に通信するまとまり。参加者は複数のチャネルに所属することができる。(チャネルごとに、台帳やStateDBを保持する。) |
CC1 | HLFネットワークの構成情報やチャネルに参加する際のポリシー等をまとめたもの。(組織はこのポリシーに合意したうえでHLFネットワークに参加する。) |
P* | HLFネットワークを構成する。台帳とスマートコントラクトを保持する。 |
L* | 台帳(Ledger)。トランザクションの履歴や結果、ネットワーク内の状態を保持する。 |
S* | スマートコントラクト。 台帳に対して参照や更新などを行うロジック。 |
O | トランザクションからブロックを作成し、各Peerに配布する。 |
A* | クライアントアプリケーション。SDKを用いて、Peerに対してトランザクションを発行する※ |
CA* | 認証局(Certificate Authority)。参加者に対して証明書の発行や失効を行う。(ここで発行された証明書を用いることで、各要素はトランザクションの発行や署名などが行える。) |
※クライアントアプリケーションから発行されたトランザクションがどのようにHLFネットワーク内を伝播するかは下記参照ください。
https://qiita.com/Annoske/items/7e997461e4fd4c417aa6
補足:
あまり触れませんが、チャネルが複数ある場合は下記のような構成になります。
HyperLedger-fabricネットワークの構築手順
下記手順でHLFネットワークを構築します。
- ネットワークを作成する
- 認証局を設定する
- チャネルを作成し、参加者を所属させる
- チェーンコードを各Peerにインストールする
- クライアントアプリケーションをチャネルに接続する
ネットワークを作成する
まず、これから作成するHLFネットワークの構成情報やポリシーをまとめたChannel Configuration(CC1)を作成します。
CC1の中に、参加する組織(R*)を記載して、R1,R2,R0がHLFネットワークに参加することを明示します。
例)
- &Org1
# DefaultOrg defines the organization which is used in the sampleconfig
# of the fabric.git development environment
Name: Org1MSP
# ID to load the MSP definition as
ID: Org1MSP
MSPDir: ../organizations/peerOrganizations/org1.example.com/msp
# Policies defines the set of policies at this level of the config tree
# For organization policies, their canonical path is usually
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
Policies:
Readers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org1MSP.admin')"
Endorsement:
Type: Signature
Rule: "OR('Org1MSP.peer')"
# OrdererEndpoints is a list of all orderers this org runs which clients
# and peers may to connect to to push transactions and receive blocks respectively.
OrdererEndpoints:
- "orderer.example.com:7050"
上記設定ファイル(configtx.yaml)の詳細は下記から確認できます。
認証局を設定する
次に、各組織にトランザクション実行可能なユーザを作成するために、認証局(CA*)を設定します。(組織ごと)
CA自体は、hyperledgerが公開しているリポジトリをもとに作成することができます。
https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#install
チャネルを作成し、参加者を所属させる
Peer・Ordererを作成し、チャネルに所属させます。
Peer・Ordererは下記からインストールできるDockerイメージをもとに作成できます。
https://hyperledger-fabric.readthedocs.io/en/release-1.4/install.html
チャネルの作成方法
https://hyperledger-fabric.readthedocs.io/en/latest/create_channel/create_channel_participation.html
チェーンコードを各Peerにインストールする
HLFネットワークに所属するすべてのPeerにチェーンコードをインストールします。
クライアントアプリケーションをチャネルに接続する
チェーンコードがPeerにインストールされ、チャネルに定義されると、クライアントアプリケーションはそのチェーンコードを参照することができます。
実際にクライアントアプリケーションがチェーンコードを実行する際、クライアントアプリケーションはPeerに対して「transaction proposal」を送信して、チェーンコードの実行を依頼します。
おわりに
今回は構築手順のイメージだけまとめてみました。
じゃあ実際にどんなライブラリ使ってどんなコマンド打って...みたいなのは別途まとめようと思います。
間違いあればご指摘ください!🙏
参考
https://hyperledger-fabric.readthedocs.io/en/latest/network/network.html
https://hyperledger-fabric.readthedocs.io/en/release-1.4/build_network.html#install-prerequisites