Aptosのノードについて理解しよう!
Aptosのノードについてドキュメントをもとに理解をしていきましょう。
初めまして。
CryptoGamesというブロックチェーンゲーム企業でエンジニアをしている cardene(かるでね) です!
ERCについてひたすらまとめたり、スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。
以下でも情報発信しているので、興味ある記事があればぜひ読んでみてください!
https://twitter.com/cardene777
https://chaldene.net/
https://qiita.com/cardene
https://zenn.dev/heku
https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58
https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
また、これからも情報を見逃したくないという方はぜひ以下の購読ボタンを教えてください。
更新があった時、登録しているメールアドレス宛に通知が飛ぶようになります。
今回はAptosブロックチェーンの「ノード」についてまとめていきます。
以下のドキュメントをベースにまとめていきます。
https://aptos.dev/concepts/blockchain
以下の記事を先に読むと理解度が深まります。
バリデータノード
概要
バリデータノードはトランザクションをどの順番でブロックチェーンに追加するかを決定します。
トランザクションがバリデータノードに送られてくると、トランザクションを実行しコンセンサスプロコル(別記事で取り上げます)で合意を得られた後、実行結果をブロックチェーン上に保存します。
他のバリデータノードは、確定したトランザクションを処理した後自身のローカルににコピーを保存します。
これにより、最新の状態のコピーを保持し続けることができます。
また、バリデータノードは、プライベートネットワークを通じて他のバリデータノードと直接通信します。
フルノードはピアからトランザクションを受け取り、ローカルで再実行し、結果をローカルストレージに保存します。
これにより、バリデータの不正行為の証拠をもとに異議を唱えることができます。
バリデータノードのコンポーネント
それぞれのコンポーネント(構成要素)について説明します。
Mempool
Mempoolには、まだ合意・実行されていないトランザクションのメモリ内バッファ(キャッシュ)保持しています。
このバッファはバリデータノードとフルノード間で複製されます。
フルノードのJSON-RPCサービス(Dappsなどとブロックチェーンを接続するサービス)は、トランザクションをバリデータノードのMempoolに送信します。
Mempoolはトランザクションの検証を行い、検証が成功するとネットワーク内の他のバリデータノードのMempoolに共有されます。
特定のバリデータノードがコンセンサスプロトコルのリーダーになると、Mempoolからトランザクションを取得して新たなブロックを提案します。
このブロックは他のバリデータに共有され、ブロック内のトランザクションの順序が確定します。
その後、各バリデータはブロックを実行して新たなブロック提案を受け入れるかの投票を送信します。
コンセンサス
ブロック内のトランザクションを順序付けし、実行結果に合意して投票するコンポーネントです。
Execution
ブロック内のトランザクションを実行して、一時状態を保持するコンポーネントです。
VM
仮想マシン(VM)は、各トランザクション内でMoveプログラムを実行し、実行結果を決定します。
ノードのMempoolは、VMを使用してトランザクションを検証し、ExecutionがVMを使用してトランザクションを実行します。
ストレージ
合意されたブロック内のトランザクションとその実行結果をローカルDBに保存します。
フルノード
概要
フルノードは、Aptosブロックチェーンに存在する全てのトランザクションを誰でも実行・検証できます。
また、他のフルノードやバリデータノードと同期し、ブロックチェーン全体のステート(状態)を複製します。
検証には、バリデータによって署名されたトランザクションのセットとAccumulatorハッシュルートを受け取ります。
Merkle Accumulatorとは、追記のみ可能なMerkleツリー構造のことでmトランザクションがチェーンに含まれたことの証明を提供できます。
Merkleツリーについては以下の記事を参考にしてください。
https://chaldene.net/markle-tree
Merkle Accumulatorについてのより詳しくは以下の記事を参考にしてください。
また、フルノードはAotosクライアント(アプリケーションなど)から送信されたトランザクションを受け入れ、バリデータノードに転送します。
コンセンサスには参加せずバリデータのみが参加します。
ローカルフルノードに接続することで以下のことができます。
ブロックチェーンとのやりとりにRESTサービスを使用。
Aptosブロックチェーンからデータを取得。
データ読み取り時のレート制限の回避。
データに対してカスタムした分析を実行可能。
特定のオンチェーンイベントに関する通知を受け取る。
ノードネットワークと同期
ノードには以下の種類があります。
バリデータノード
コンセンサスに参加してトランザクションを処理する
初めてオンラインになった時、再起動したときに同期。
バリデータフルノード
ブロックチェーンの状態を取得して最新の状態を保つ。
バリデータはバリデータノードに接続し、フルノードからのリクエストに対応可能で、それ以外はフルノードにように動作。
パブリックフルノード
バリデータイアガイのユーザーによって実行。
バリデータノードに直接接続できず、同期にはバリデータフルノードに依存。
アーカイブノード
Aptosブロックチェーンのこれまでの全てのデータを含むフルノード。
最後に
今回はAptosの「ノード」にまとめました。
これからも他のブロックチェーンやサービスについてもまとめていきます。
情報を見逃したくないという方はぜひ以下の購読ボタンを教えてください。
更新があった時、登録しているメールアドレス宛に通知が飛ぶようになります。
また、拡散もしてくれると嬉しいです🙇♂️






