exe #2: quorumサンプル実装から理解するエンタープライズ ethereum...
TRANSCRIPT
Quorumサンプル実装から理解するエンタープライズ Ethereum のポイント
Copyright(C)2017 trident-arts All Rights Reserved.
with advanced technology
trident-arts
Enterprise Ethereum の サンプル実装 : Quorumとは
2Copyright(C)2017 trident-arts All Rights Reserved.
Transaction
②Processing
パブリック(=共通)
&プライベート
Consensus Chain Consensus投票&
ランダムタイムアウトコンセンサス所要時間の短縮化
パブリック/プライベートの二刀流
JPモルガンが Go Ethereum ベースのOSSを開発
トランザクションの方式やコンセンサスアルゴリズムをエンタープライズ用途に耐えられるように改良
Quorumの機能的な主な特徴
①Security
許可型ネットワーク&
暗号化安全性の確立
Quorum Transaction Processing の特徴① Security
3Copyright(C)2017 trident-arts All Rights Reserved.
ネットワークを許可型にすることと、暗号化によってQuorumネットワーク内の安全性が確保されている
QuorumNode
TransactionManager
Enclave
QuorumNode
TransactionManager
Enclave
QuorumNode
TransactionManager
Enclave
Public
Public
Public
Private
Private
Private
A
B
C
Ethereum Network Constellation Network
HashPayload
HashPayload
HashPayload
• permissioned-nodes.jsonに接続を許可するノードを記載
"enode://remoteky1@ip1:port1“(static-nodes.jsonと似ている)
許可制ネットワーク
• ファイルやメールの暗号化に使用されるPGPをベースにしている
• ペイロードは、セッション鍵と呼ばれる乱数の値を鍵として,対称暗号※により暗号化される。
• そのセッション鍵は,公開鍵で暗号化される(復号には秘密鍵)
• トランザクションマネージャ間の通信はHTTPSにより暗号化
暗号化方式
※暗号化と復号の鍵が同一
HTTPS
Constellation ・・・星座、集まりEnclave ・・・包領、少数集団
Quorum Transaction Processing の特徴② Processing
4Copyright(C)2017 trident-arts All Rights Reserved.
DAppTransactionX
QuorumNode
TransactionManager
Enclave
QuorumNode
TransactionManager
Enclave
QuorumNode
TransactionManager
Enclave
1 2
3
45
6
7
Block N8
9
10
11
12
11
12
9
7
10
Block N
Block N
8
8
# プロセス① A及びBの公開鍵を設定して、
Node AにトランザクションXを送信② トランザクションマネージャにトランザクションXを送付
③ エンクレーブをコール
④ 1. セッション鍵とナンスを生成2. ペイロード/ナンスをセッション鍵で暗号化3. ペイロードのハッシュを計算4. A/Bの公開鍵でA/Bのセッション鍵を暗号化5. トランザクションマネージャに2,3,4のデータを送信
⑤ • 暗号化されたペイロード/ハッシュ/セッション鍵(A)を保存し、HTTPSでBのトランザクションマネージャにペイロード/ハッシュ/セッション鍵(B)を送信
• Bは受信結果(ACK/NACK)を返す⑥ Bの受信成功後に、Aのトランザクションマネージャがノー
ドにハッシュを送信、元のペイロードと置換⑦ Ethereumの標準P2Pプロトコルを使用して他の
ノードにトランザクションXを伝播⑧ トランザクションXを含むブロックNが生成され、全ノード
に配布される⑨ 各ノードは、ローカルのトランザクションマネージャをコールし、ト
ランザクションを保持しているか確認する(ハッシュをインデックスとして使用)
⑩ C:トランザクションスキップ AB:エンクレーブをコール⑪ 秘密鍵でセッション鍵を復号し、セッション鍵でペイロード
を復号。トランザクションマネージャにペイロードを返す⑫ • コントラクト実行のために解読されたペイロードをノー
ドのEVMに送信• プライベートステートDBが更新される
Public
Public
Public
Private
Private
Private
A
B
C
9
10
パブリック・トランザクションフローは標準的なEthereumのトランザクションと同じ 下記は、Node A と Node B向けのプライベート・トランザクションフロー
Ethereum Network Constellation NetworkPrivate For A/B
HashPayload
HashPayload
HashPayload
Ethereum Network
Quorum Chain Consensus の特徴 1/2
5Copyright(C)2017 trident-arts All Rights Reserved.
Maker(Quorum Node)
Voter(Quorum Node)
Non-Voter(Quorum Node)
BlockVoting
BlockVoting
Block NTx List Vote ListTx 10 Vote1 Tx 11 Vote2Tx 12 Vote3
1
22
# プロセス① 最初にMakerノードがブロックを生成し、それに署名す
る。ブロックには、前の期間にキャストされた親ブロックの投票が含まれる
② ブロックは、標準のEthereum P2Pプロトコルを使用してネットワークに配布される。ロールに関係なく、すべてのノードがブロックを受信する。
③ 投票者ノードはブロックを検証する• BlockVotingコントラクトをコールし、Makerがブロックを作成できるかどうかを確認する
• BlockVotingコントラクトを呼び出して、ブロックの親ブロックが十分な票を受け取ったかどうかをチェックする
• (トランザクションマネージャからペイロードを取得した後に)ブロック内の処理可能な全てのパブリックトランザクションとプライベートトランザクションを実行する
• パブリックステートのルートハッシュをブロック内のステートルートと比較することによって、パブリックステートを検証する
• ブロック内の全てのトランザクションをハッシュ化し(パブリックとプライベートの両方)、そのハッシュをブロック上のトランザクションハッシュと比較するこれはステートチェックではないが、全ての投票者ノードがブロック内のトランザクションリストで一致することを保証する
④ 首尾よく検証されると、投票者ノードは、すべてのノードに配布される標準のEthereumTransactionを使用して、BlockVotingコントラクトに投票を送信する
⑤ Makerノードはタイムアウトに達し、前のブロックの最小投票数が受信されたかどうかを判定し、ブロック作成以降、検証 → 投票処理が繰り返される
PoW ではない新たなコンセンサスアルゴリズムで スピードの向上を目指す
3
Block NTx List Vote ListTx 10 Vote1 Tx 11 Vote2Tx 12 Vote3
5
ブロック配布
ブロック生成
検証投票
CallCall Transaction4
<ブロック生成開始のトリガー>• 同時に2つ以上のMakerがブロックを作成する可能性を減らすために、Makerはランダムな期
間(タイムアウト)を生成してからブロックの作成を開始する• Makerが他のMakerより前にタイムアウトに達すると、ブロックの作成を開始することができる• Makerがブロック作成プロセスを開始すると、他のMakerノードは現在のタイムアウトをリセット
し、新しいランダムタイムアウトを生成し、ブロックが作成されるまで待つ
<Block Data>• A Global Transaction Hash• The Public State root hash• Block Maker's signature
Quorum Chain Consensus の特徴 2/2
6Copyright(C)2017 trident-arts All Rights Reserved.
Quorum Node
Smart Contract
BlockVoting
nodeInfo
blockMakerAccount
min/max blocktime
canCreateBlocks
canVote
voteAccount
ブロック生成
投票
Quorum Nodeの設定値
コントラクト機能
ブロック生成できるノードを追加する
最低投票数を設定する
ブロック生成できるノードのアドレス
ブロック生成待ち時間(最大/最小)
ブロック生成可否
投票できるノードのアドレス
投票可否
setVoteThreshold
vote
addBlockMaker
addVoter
投票の実行
投票できるノードを追加する
genesis.json
(Initial)Maker Node
Quorum Nodeの初期値
ネットワーク起動時にブロック生成ができるノードのアドレス
• Quorumの投票型コンセンサスは、スマートコントラクトの機能で実行
• コンセンサスに参加するノードの追加/削除もスマートコントラクトの機能で実行
• コンセンサスに参加するノードに関する情報はQuorum Nodeのデータベースに書き込まれる
• 最初にブロックを生成するノードのアドレスはgenesis.jsonに書き込む
主なポイント
コンセンサスアルゴリズムに関連するシステム構造
Quorum の 課題(ロードマップ提示済みのもの)
7Copyright(C)2017 trident-arts All Rights Reserved.
Network Management• Network Permissioning to be managed via Smart Contracts as opposed to node-
specific config• Dynamic Node removal• Network Admin Dapp
Privacy• Support for private key rotation• Ability to extend the list of participants that can access private transactions post
transaction creation Consensus
• Safer 'deadlock management' when Vote Threshold is not met (currently Maker Node can break deadlock by re-voting)
• Limitations on the number of votes a Voter or Organisation can make• Dynamic Voting Threshold adjustment
Performance• Parallel Transaction processing
Short Term
Medium Term
Consensus• Pluggable consensus