1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Hyperledger-fabricのトランザクションフローについて

Posted at

はじめに

Hyperledger-fabricにおいて、トランザクションが発行されたときに、Blockchain内部でどのような処理があるのか気になったのでまとめてみました。

(BlockchainやHyperledger-fabricそのものについては扱いません)

構成要素

トランザクションフローを見ていく前に、Hyperledger-fabric(以下HLF)ネットワークにどんな構成要素があってどんな役割を持っているのか予習します。

ざっくり全体の構成はこんな感じになってます。↓
image.png

クライアントアプリケーション

HLFのSDKを用いてトランザクションを発生させる。
(正確にはHLFネットワーク内にいないです。)
image.png

Organization

HLFネットワークに参加する1組織

Peer(Endorsement)

「Endorser」とも呼ばれる。
受け取ったトランザクションの検証を行う。
image.png
(検証するからチェックマークのイメージ)

Peer(Commiting)

「Commiter」とも呼ばれる。
受け取ったブロックをチェーンに追加する。
image.png
(ブロックをチェーンに書き込むから鉛筆マークのイメージ)

Orderer

トランザクションの結果を保持するブロックを作成し、各Peer(Commiting) にブロックを送信する。
image.png
(ブロックを作成するからプラスマークのイメージ)

台帳

HLFネットワーク内の状態遷移(トランザクション実行など)を記録したもの。
image.png

Chaincode

台帳やstateDBに対して、参照や更新を行うロジック(スマートコントラクト)
image.png

stateDB

HLFネットワーク内で参照するデータベース。
(各Organizationごとに同一の値を保持する)
image.png

CA

(トランザクションフローとはかかわりが少ない要素になります。こんなのがいるよって紹介だけ。)
HLFネットワーク内の認証局
Chaincodeの実行権限等を含んだ証明書を発行する。
image.png
(認証局だから鍵マークのイメージ)

トランザクションフローとコンセンサスの流れ

クライアントアプリケーションからトランザクションが発行されると、HLFは下記の3つのフェーズを経てトランザクション結果を台帳に反映させます。

  1. Endorsementフェーズ
  2. Orderingフェーズ
  3. Validationフェーズ

Endorsementフェーズ

  1. Proposal:クライアントアプリケーションがPeer(Endorsement)に対して、SDKを用いてトランザクションを送付する
  2. Proposal Response:Peer(Endorsement)がそのトランザクションを仮実行し、自身の署名(Endorsement)を加えてクライアントに返却する。クライアントはEndorsementPolicy※が満たされていることを確認する
  3. Transaction Submit:EndorsementPolicyを満たす署名が集まったら、Ordererに対して署名とともにトランザクションを送信する。

※Endorsement Policy: あるChaincodeで台帳の更新を行う場合、どのようなEndosementを集めてこなければならないかを定める条件です。Chaincode×チャネル単位で設定できます。ここでEndorsementはPeer単位ではなく、組織を表すOrganization(Org)単位でカウントされることに注意してください。Org A,B,Cで構成されるコンソーシアムネットワークでそれぞれがふたつのPeerを持っている場合、Endorsement Policyは例えば「3つのOrgのうち、任意の2つのOrg配下のPeerからEndorsmentの取得」といったような条件になります。
このEndorsement Policyがすなわち「どうしたらコンセンサスが取れたことにして台帳に追記できるか」の条件になります。上記のような単純なOrg数(1~n)による条件から、スコアリングでの重みづけ評決など、かなり柔軟に条件を設定することができます。詳細は公式ドキュメントを参照しましょう。
https://gakumura.hatenablog.com/entry/2018/11/25/011810

【Proposal】
image.png

【Proposal Response】
image.png

【Transaction Submit】
image.png

Orderingフェーズ

  1. Ordererはクライアントアプリケーションから受け取ったトランザクションをもとに、ブロックを作成する
  2. 作成したブロックをPeer(Commiting)に送付する

image.png

image.png

Validationフェーズ

  1. Transaction Validation:ブロックを受け取ったPeer(Commiting)は、ブロック内のトランザクションがEndorsementPolicyを満たしているか、Chaincode実行時からstateDBの値が変わっていないかをチェックする
  2. Commit:Vallidationが問題なければ、ブロックを台帳に書き込み、stateDBへの書き込みをコミットする。(ここでChaincodeを再実行しているわけではなく、Write-Set※を書き込んでいる)

※EndorsementフェーズのChaincode実行時に作成される、台帳に書き込む予定の値セット

【Transaction Validation】
image.png

【Commit】
image.png

おわりに

以上が、トランザクションが発行されてからのHLF内の処理になります。
本記事では掘り下げてませんが、チャネルだったりEndorsementPolicyはコンセンサスに大きく関わってくるので、あわせて確認することをお勧めします。

間違いあればご指摘ください!!🙏

参考

https://gakumura.hatenablog.com/entry/2018/11/18/020843
https://hyperledger-fabric.readthedocs.io/en/latest/txflow.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?