EIP-225 : Clique Proof-of-authority

Kazuki Kyakuno
Axell Corporation
Published in
5 min readJun 4, 2021

テストネットの信頼性向上のために実装されたClique Proof-of-authorityについて解説します。

EIP-225の概要

EIP-225はPrpof-of-authorityによるコンセンサスアルゴリズムです。Cliqueと命名されています。Proof-of-authorityはコンソーシアムチェーンと同様のアーキテクチャであり、テストネットの信頼性向上のために使用されています。

EIP-225の背景

イーサリアムの最初の公式のテストネットはMordenで、2015年7月から2016年11月頃まで運営されました。しかし、コンセンサスの問題があったため、Ropstenが誕生し、2017年2月末までは順調に稼働しました。しかし、一部のユーザが、低いPoWのDifficultyを悪用し、ブロックガスの上限を膨らませ、巨大な取引を送り込み、ネットワーク全体を麻痺させました。また、攻撃者が非常に長いreorgsを試みネットワークを分裂させました。

EIP-225の効果

PoAのコンセンサスアルゴリズムを導入することで、信頼されたマイナーのみがブロックを追加することができるため、悪意のある攻撃を防ぐことが可能です。PoAは実装が非常に簡単で、既存のイーサリアムクライアントに組み込むことができ、ソフトウェアにカスタムロジックを追加することなく、既存の同期技術(fast, light, warp)を使用することが可能です。

EIP-225の実装

PoAスキームは、信頼できる署名者によってのみブロックを追加できるという考え方に基づいています。そのため、全てのブロックについて、信頼できる署名者のリストと照合します。

署名には、ブロック・ヘッダの32バイトのエキストラ・データ・セクションを使用します。このフィールドを65バイトに拡張し、secp256k1の楕円曲線暗号によるマイナー署名を導入します。また、ブロックヘッダのマイナーセクションは廃止されます。

PoAの課題として、時間の経過とともに変化する可能性のある公認署名者のリストをどのように保持するかという点です。そのために、投票プロトコルを実装します。投票プロトコルには、廃止されたマイナーセクションとnonceフィールドを再利用します。署名者がリストに変更を加えたい場合、nonceに0または0xff..ffを設定して、追加または退出の拒否を投票します。

EIP-225の実装状況

EIP-225は2017年5月に提案され、Rinkeby PoA testnetが稼働しました。

Apr 4, 2017:
Mention the cascading proposal-execution corner case and its avoidance.
Mar 14, 2017:
Expanded the Clique block authorization section, added a strategy proposal.
Expanded the Clique signer voting section, added a strategy proposal.
Mar 13, 2017:
Polished up the constants in the Clique consensus protocol spec.
Added the two difficulty values and described in-turn/out-of-turn signing.
Mar 11, 2017:
Added initial technical specs for the Clique PoA consensus protocol.
Added checkpointing to reset votes and embed the list of signers into epoch headers.
Reintroduced authorized signer vanity extra-data as a fixed 32 byte allowance.
Mar 6, 2017
First proposal of the Rinkeby testnet and its PoA implementation ideas.

現在、稼働しているテストネットのネットワークIDです。4のRinkeby以降からPoAになっています。

https://ethereum.stackexchange.com/questions/17051/how-to-select-a-network-id-or-is-there-a-list-of-network-ids

--

--