Parity PoAで使われるコンセンサスアルゴリズムであるAura(Authority Round)とは何か
はじめに
こんにちは.株式会社AcompanyでCTOを務めている近藤(Takeharu.K)です.今回は,ParityのPoAコンセンサスアルゴリズムである,Aura(Authority Round)について紹介します.
AuraはAuthority Roundとも呼ばれ,テストネットのKovanネットワークで使用されています.現在は4ノードで4 秒毎にブロック生成を行っており,外部からネットワーク内にブロックプロデューサーとして参加することはできません.使用するには,EthereumのクライアントソフトウェアであるParityを用います.
ParityでPoAプライベートネットを構築する方法は以前書いたので,そちらを参考に構築することができます.
一般的に,PoAは信頼できるノードで構成された閉じたネットワークであり,不特定多数のノードがブロックを生成することが出来ません.一方で,特定ノードで高速にブロックを生成することができるため,PoWと比較してTPSを大きくすることが出来ます.
蛇足:GethのPoAはCliqueというアルゴリズムを用いています.
Aura (Authority Round)
Auraは信頼されたNノードから構成され,ノードはAuthoritiesと呼ばれます.そして,最低でもN/2+1ノードが正直である必要があります.1ステップ毎に新規ブロックが生成されます.
ブロック生成とファイナライズ処理の流れは以下のようになります.
- 各ステップ毎にブロックプロデューサー(BP)を決定
- BPは他の全てのAuthoritiesに1ブロックをブロードキャスト(block proposal round)
- ブロックを受け取ったAuthoritiesは他の全てのAuthoritiesにブロックを送信(block acceptance round)
- Authoritiesが送信した全てのブロックが一致した場合,ブロックはペンディングされる
- ペンディングされたブロックの生成者が,Authoritiesの過半数に達した場合に先頭のペンディングブロックがコミットされる
⚠️ : BPによって生成されたブロックを拒否したい場合は,block acceptance roundでBPの罷免投票をスマートコントラクト上で行うことができる.投票により,過半数を獲得した場合,BPはAuthoritiesから除外され,ペンディングされたブロック内に,罷免されたBPが生成したブロックがあれば破棄される.
例
言葉だけでは理解し難いので,イメージを掴むために実例を示します.
今,4ノードからなるAuthoritiesを構成し,node 0がBPであるステップとします.この時,BPであるnode 0は他のAuthoritiesに生成したブロックをブロードキャストします(block proposal round).
その後,ブロックを受け取ったnode 1, 2, 3は他の全てのnodeにブロックを送信します(block acceptance round).
全てのブロックが同一であった場合にそのブロックは受理され,ペンディングされます.
その後,ステップが進みnode 1とnode 2が生成したブロックがペンディングされた時に,初めてnode 0が生成したブロックがブロックチェーンにコミットされます(ペンディングブロック内の生成者数が3となり過半数を超えたため).
BPの決定方法
BPは,任意のステップ間隔(sec)でUNIX時間に基づいて決定されます.
例えばステップ間隔を4秒に設定した場合は,4秒毎に異なるBPが順番に新規ブロックを生成します.
つまり,UNIX時間によってノード間の同期を取っているため,ノード間の物理的な距離や,ネットワークの状況により厳密な同期は保証できません.そのため,各ノードで時間的な猶予を持って同期を取っています.
まとめ
Auraは信用されたノードで用いられるParity PoAのアルゴリズムです.そのうち過半数が正直である場合に合意を取ることができます.
ブロック生成は任意のステップ時間によって決定されます.BPの罷免は全ノードの投票により過半数を得ることで実現されます.
今後も,Acompanyからブロックチェーンに関する記事を投稿していきますので,ぜひfollowしていただけると嬉しいです.
Happy Hacking 😎!
参考
Parity Aura Authority Round — Wiki
PBFT vs Proof-of-Authority: Applying the CAP Theorem to Permissioned Blockchain