イーサリアム DPoS の実践とオープンソース DPoS 分析
BFTF技术社区联盟
2018-08-10 06:09
本文约1433字,阅读全文需要约6分钟
Meitu はイーサリアムに基づいた DPoS コンセンサス アルゴリズムをどのように実装していますか?同時に、他のいくつかのオープンソース DPoS 実装を比較および分析します。

スン・シャオジュン

画像の説明

Meitu クラウド事業部のシステム R&D エンジニア。主に Meitu ブロックチェーンとクラウド ライブ ブロードキャストに取り組んでいます。

編集者注: この記事は BFTF テクノロジー コミュニティ アライアンスからのものであり、著者: BFTF テクノロジー コミュニティ アライアンスが許可を得て公開しています。

この講演は主に 4 つのパートに分かれており、第 1 部ではイーサリアムのインフラストラクチャを簡単に紹介し、第 1 部では現在のコンセンサスアルゴリズムの概要を説明し、第 3 部では Meitu Ethereum での DPoS の実践、最後に EOS での DPoS の比較を行います。

 

外部HTTPインターフェース、コンセンサスアルゴリズムモジュール、EVM、ストレージモジュールなどを含むイーサリアムの基本構造を図に示します。


このうちトランザクション処理モジュールは、ノードがトランザクションを受信した後、トランザクションプールに保存し、パッケージ化処理時にトランザクションプールから条件を満たすトランザクションを取得します。ブロック ロールバックなどの操作が発生すると、パッケージ化されたトランザクションはトランザクション プールに戻されます。


イーサリアムの口座残高データは、Patricia TrieとMerkle Trieで構成される(MPT)ツリー上に保存されており、主にPatricia Trieの特性を利用して口座残高の素早い検索を実現し、Merkle Trieは取引が改ざんされているかどうかを証明します。 。


PoWは、一定のワークロード証明を満たすことでコンセンサスを達成するもので、ビットコインやイーサリアムで長年テストされてきたコンセンサスアルゴリズムですが、多くのコンピューティングリソースを消費する必要があり、トランザクションのQPSが低いです。 PoS は、所有者の権利と利益を導入することによって乱数の検索を完了します。ユーザーが所有する資産が多いほど、正しい乱数を見つける確率が高くなります。 PoS には台帳フォーク、長距離攻撃、通貨年齢攻撃などの問題があります。 DPoS は PoS の改良版と考えられており、DPoS は時々選挙を行い、選出されたノードがブロック生成と相互監視と検証を担当するため、ブロック生成とブロック確認にかかる時間を大幅に短縮できます。


アルゴリズムの実装には主に、ブロック バリデーターの選択とブロック バリデーターのスケジューリングという 2 つのコア部分が含まれています。


イーサリアムにコンセンサスアルゴリズムを追加するには、コンセンサスエンジンで定義されたインターフェースを実装する必要があります。


パッケージ化プロセス: マイナーは、CheckValidator を通じて現在のバリデーターが現在のノードであるかどうかを定期的に確認し、そうである場合は、CreateNewWork を通じて新しいブロック タスクを作成します。


ノードがバリデーターになりたい場合は、まずそのノードが候補者になる必要があり、その後、他の人がこの候補者に投票できるようになります。投票する場合でも、候補者になる場合でも、実際にはノードのトランザクションです。以前のトランザクションは主に転送またはコントラクト コールであったため、さらにいくつかのトランザクション タイプが追加されました。


さらに、選挙ごとにジェネシス ブロックから履歴データが再生されるのを避けるために、DPoS は選挙と投票の状態を記録するためにいくつかのグローバル ステート ツリーを追加し、ツリーに対応するルートをブロック ヘッダーに保存します。


選出:ブロックの周期を判断し、前周期のブロックの状況に応じて、選出されたもののブロック数が要件を満たさなかった候補者を追い出し、最終ブロック時点で上位N位を選出投票数が最も多かったバリデーターとして、バリデーターの順序をシャッフルします。


新しいブロックを受信した場合、最後の不可逆ブロックの情報を更新する必要があり、最後の不可逆ブロックとは、ノードの3分の2によって確認されたブロックである。


高速同期モードでは、ブロードキャストされたブロックは直接破棄され、完全同期に入った後でのみ受信されます。デフォルトの同期方法 (高速同期) で複数のノードを同時に起動すると、ノード間のブロック生成頻度が同じであるため、すべてのノードが完全同期モードに入ることができず、ノード間で同期されたブロックは破棄されます。解決策は、創設ノードを完全同期モードで起動することです。検証者の情報はブロック本体に格納されるため、ブロックヘッダだけではブロックを検証できません。

EOS の DPoS には 21 個の検証ノードがあり、ブロックを構築する時間間隔は 500ms で、各ノードは連続して 12 ブロックを作成します。これにより、ブロックの構築速度が向上し、同時に各ノードがブロックを構築できることが保証されます。他の 20 ノードに伝播されます。 EOS の最新のホワイトペーパーでは、BFT-DPoS の一種について言及しており、ノードがブロックを印刷した後、BFT アルゴリズムを通じて他のノードにブロックを検証することができ、最終的な不可逆ブロックの確認を高速化し、ブロックの確認速度を向上させることができます。トランザクションを削除し、チェーンのフォークを減らす可能性があります。

https://v.qq.com/x/page/o0736irezov.html 


BFTF技术社区联盟
作者文库