見出し画像

Quorum(エンタープライズ向けブロックチェーン)とは?

Quorum概要

Quorumとは
QuorumはEthereumをベースにJPモルガンが開発したオープンソフトウェアで、エンタープライズ向けの許可制プライベートブロックチェーンです。Ethereumに比べてプライバシーやパフォーマンスの観点で優れており、秘匿性を持った情報や取引を迅速に行うことができます。一方でパブリックなEthereumとは異なり、チェーンには許可されたノードのみが参加することができる許可制のプライベートチェーンとなっており、金融、サプライチェーン、不動産等での活用が期待されています。

Quorumの特徴
通常のスマートコントラクトはトランザクションの中身やコントラクトのステートは外から誰でも確認することができるため、どのアドレスがどのアドレスにいくらだけ送金したかなどが見られてしまいます。Quorumはこのトランザクション情報の秘匿化を行うことで、トランザクション情報を会社間の重要な情報のやりとりや金銭の取引などに外からアクセスできない様にします。

さらに、コンセンサスアルゴリズムにはRaftコンセンサスアルゴリズムとIstanbul BFTコンセンサスを採用しており、PoWに比べて処理速度が高速です(100TPS以上)。

Go Ethereumをソフトフォークしたものを元に開発されており、プライバシー機能のロジックの多くはEthereumのプロトコルレイヤー上に構成されています。Ethereumに対して互換性を保つために、既存の技術をできる限り使い、将来的なEthereumのアップデートに対して速やかに対応できる様開発が行われています。

画像1

図1の中でQuorumの主な機能は下記の4つです。

Transaction Manager
プライベートトランザクションに対してアクセス許可し、暗号化されたデータを保存したり、他のノードのTransaction Managerにその暗号化されたデータを送ったりしますが、秘密鍵等は保持していません。

Crypto Enclave
秘密鍵の管理と、プライベートトランザクションの暗号化と復号化を行います。Transaction Managerからは独立しています。

Consensus
Raft-BasedとIstanbul BFTが採用されており、デフォルトではRaft-Basedが使用されます。

Network Manager
ネットワークへのアクセス管理に使用され、許可されたノードの生成等を行います。

Quorumの仕組み

Privacyの確保
Quorumは下記の2つの方法でPrivacyを確保しています。

暗号学的処理
プライベートな情報を暗号化することにより、外からはその情報が何を表しているのか秘匿化します。
セグメンテーション
ステートをパブリック(ネットワーク中全員が見られる)とプライベート(許可された人だけが見られる)に分けて、ノードパーティに参加しているノードだけがプライベートコントラクトを実行できる環境を提供しています。
パブリックなステートは全員で共有し、のパトリシアマークルツリーのルートハッシュを比較することで、同じブロックを持っていることを証明し、プライベートなステートに関しては各ノードがパブリックとは別のパトリシアマークルツリーを持ちます。

QuorumのTransaction
Quorumのトランザクションは以下を含んでいます。
- 受領者
- 送信者の署名
- Etherの量
- 追加のprivateFor(プライベートしてトランザクションを識別子、そのトランザクションに通ずるパーティのリストを生成)
- 追加のデータフィールド(プライベートトランザクション用の256bitハッシュ)

Private Transactionとは
データフィールドに256ビットのハッシュしか持っていないトランザクションのことです。
署名のパラメータ”v”によってもprivateかどうか判断されます。37か38が使われます(ethereumの署名だと27か28になっている)

Private Transactionの実行概要

画像2

1. DappからNode AがPrivateのトランザクション(Tx)を受け取る。
2. Transaction Manager AがTxを受け取る。
3. Enclave AにてTxを対称鍵(S)で暗号化を行う(S(Tx))。Private Partyの公開鍵で対称鍵を暗号化する(Pub(S))。
4. S(Tx)とPub(S)を返し、Transaction ManagerはS(Tx)とPub(S)を保存する。
5. Private PartyでS(Tx)とPub(S)を共有し、正常に共有できたらハッシュ化を行う(H(S(Tx)))。
6. H(S(Tx))をNode Aが受け取る。
7. 通常のEthereumプロトコルでH(S(Tx))が伝播される。
8. H(S(Tx))を含むブロックを各ノードが受け取る。
9. 各ノードが各Transaction ManagerにH(S(Tx))を送る。
10. そのトランザクションがPrivate Partyに属するものであれば、各Transaction Managerは各EnclaveにS(Tx)とPub(S)を渡す。上の例ではParty CはPrivate Partyに属していないので、当該トランザクションは見つからずこのトランザクションの処理をスキップする。
11. Enclaveは署名を確認し、問題なければTxを返す。
12. Transaction Manager AとBは各ノードにTxを渡して、各ノードがTxをEVMで実行する。このTxで更新されるのはNode AとBのPrivate State DBだけ。実行されたTxは直ちに破棄されて外からは見られない。

※最新版だと対称鍵ではなく別の暗号化を使っていますが、全体の流れは同じです。

ちょっと分かりづらいので、スライド作りました。


コンセンサスアルゴリズム
Quorumは2つのコンセンサスアルゴリズムを使っている。デフォルトはRaftで他のはIstanbul BFT。ノードクライアントが立ち上がった時にフラグを通じてどちらかになります。

Raft
- BFTが要求されないメンバーシップ、コンソーシアム系で使える
- リーダー、フォロワーモデルで、フォークはトランザクションのファイナルティを確保するために許可されない
- 全てのログ入力をもつリーダーがいる
- RaftとEthereumノードの間では一対一の通信があり(RaftノードはEthereumのノードでもある)、リーダー(Minter)は新しいブロックを生成する唯一のノードである。
- リーダーは選挙によって決められ、その間全てのノードは候補者になる。選挙で選ばれたノードはリーダーになり、その他はフォロワーとなる
- リーダーがブロックを生成した時、Raftノードの大多数に承認されたものだけがチェーンに追加される。
- 全てのノードがチェーンを一緒に更新する(フォークがないため)。
- ブロックがデータベースに書き込まれ、すぐにチェーンの新しい先頭となるのがEthereumと違うところ(Ethereumではフォークが起きるため)
Istanbul BFT
- Istanbul BFTコンセンサスは3つのフェーズをもつコンセンサス(PRE-PREPARE、PREPARE、COMMIT)
- このコンセンサスでは1/3のvalidatorノードのfaultyを許容し、トランザクションのファイナルティを確保する
- 提案者はPRE-PREPAREメッセージとともに新しいブロックの提案をブロードキャストする
- PRE-PREPAREメッセージを受け取るまで、validatorはPRE-PREPAREDのステートを入力し、PREPAREメッセージをブロードキャストします。このステップで全てのvalidatorが同じシーケンス、同じラウンドを辿っていることを確認する
- 2/3のノードからPREPAREメッセージメッセージを受け取ったら、validatorはPREPAREDステートに入り、COMMITメッセージをブロードキャストする。
- このステップで提案されたブロックを受け入れ、チェーンに追加することをネットワークに伝達している。
- 最後に、validatorは2/3のCOMMITメッセージを待った上、COMMITTEDステートに入り、ブロックをチェーンに追加する。
このコンセンサスでコミットされたブロックは最終版、つまりフォークしない。
- 悪意のあるノードが異なったチェーンを生成するのを防ぐために、全てのvalidatorはブロックヘッダのextradataフィールドに受け取ったコミットの署名を追加する。これで全てのブロックをself-verifiableにする。

これらのアルゴリズムの仕様についてはここでは深掘りしませんが、目立った違いについては、Istanbul-BFTは名前の通りBFTが適用されており、1/3までのノードのfaultyつまり、悪意のあるノード(別に悪意がある必要はないのですが、一般的な話として)が嘘のトランザクション情報をブロードキャストしてもそれが全体の1/3までであれば承認されません。

また、こちらの文献によるとインプットするトランザクション量が少ないとIstanbul-BFTの方がTPSが多く、トランザクション量が多いとRaftの方が若干早いようですが、あまり差は無いようです。

その他

Transaction ManagerはConstellationが使われていたっぽいですが、Tesseraに移行していくようです(Constellationの開発自体が止まっているようですね)。Crypto EnclaveにもTesseraが使われてます。

2019.10.05 追記

2019.10.04 blockchain TokyoのイベントでQuorumに関して新しく知った情報があるので追記します。

主にコンセンサスアルゴリズムのところで、LayerXの高際さん(@shun_tak)が解説されていました。資料や、当日の発表もYouTubeに公開されていますので、参考文献のリンクからご確認ください。(もちろんコンセンサスアルゴリズム以外の部分でも非常にわかりやすい説明でしたので、一度目を通すことをオススメいたします。)

画像3

細かい説明はYouTubeでの発表からご覧頂ければと思いますが、

マスターノードを立てる時にコンセンサスアルゴリズムを決定し、そのあとは変更できません。変更するとすると、新しくチェーンを作って、そこにデータを順次データを移行させるか、古いデータは古いチェーンに残しておくしかないようです。(この辺知りたかったので、イベント参加してよかった!)

参考文献

https://docs.google.com/presentation/d/1GH_1B-3A-FSdiE8A8dfsWy2qs8nwUqjOPC5regI6Tds/edit#slide=id.g6484cc8f3e_0_1436


この記事が気に入ったらサポートをしてみませんか?