【完全解説】イーサリアムノードとは?
0 はじめに
当記事は、こちらの記事を翻訳・編集したものです。
現在のブロックチェーンのユースケースのほとんどは、ピア・ツー・ピア(P2P)システムを実現させている、その中核(コア)の強みを中心に生み出されています。P2Pによって、ビットコインは第三者なしで金融取引ができ、イーサリアムはプログラマブル(プログラム可能な)コントラクトを使って第三者の監視なしに、コードのみを使用して当事者のみでコントラクトを締結させています。
このP2Pネットワークによって、イーサリアムは分散性、透明性、セキュリティという3要素を同時に成立させることができるのです。
そして、その中心を支えているのはイーサリアムノードです。
イーサリアムノードは、ブロックチェーンの世界に強力に関与する集合体で、イーサリアムネットワーク内のすべてのトランザクションの検証と維持をしています。ノードは分散型アクター(立役者)として、ネットワークのセキュリティ向上、スマートコントラクトの実行を支えます。
この記事の執筆時点で、イーサリアムネットワークで稼働しているノードは[10,000]以上です。nodewatch→(https://nodewatch.io/?ref=blog.thirdweb.com)
ですが、具体的にイーサリアムノードとはどういったものでしょう?
そして、なぜノードはイーサリアムネットワークを稼働させる上で重要な存在となるのでしょう?
この記事では、イーサリアムノードとは何か、どのように機能しているか、イーサリアムノードの種類、およびノードの実行方法について解説します。
イーサリアムノードとは?
イーサリアムノードとは、イーサリアム上で行われるすべてのトランザクションの記録を保持し、他のピアノード(他の同列なコンピュータ)にブロードキャストする(伝える)コンピュータです。 ノード間で情報を伝達し合い、すべてのノードは最新のイーサリアム情報にアップデートされます。このプロセスをsynchronization=シンクロニゼーション(同期) と呼びます。
ノードをひと言でいえば、他のコンピューターと繋がってネットワークを形成し、相互作用するコンピューターのことです。今から、イーサリアムネットワークを例に解説していきます。
ノードは、マイナーがブロックチェーンにブロックを追加する前に、トランザクションの検証とブロックの承認を行っています。
ノードとイーサリアムネットワーク間でこうしたやりとりを実現させるには、ノードでclient software=クライアント・ソフトウェアを実行する必要があります。イーサリアムを語る際によく'クライアント'と'ノード'が混同されることがあります。それは、クライアントとノードが互いに密接に機能しているからです。ですが、これらには明確な違いがあります。
イーサリアム: クライアントvsノード
イーサリアムクライアントとは、ノードがイーサリアムの'言語'を理解し、ブロックチェーン上のデータを読み取って、相互通信を可能にしているソフトウェアのことを指します。コンピュータがイーサリアムにアクセスするためのゲートウェイとしてクライアントは機能しています。
一方、イーサリアムノードは、他のコンピュータ(ノード)とやりとりしてトランザクションを保存・処理・実行するコンピュータのことです。ただし、ノードがこれらの操作を行い、ネットワーク間でやりとりするためにはイーサリアムクライアントの実行が必要です。
では、次にノードの種類について解説します。
異なるノードタイプ? フル vs ライト vs アーカイブ・ノード
ここまで、各ノードが分散台帳、つまりイーサリアムのトランザクション履歴、アカウントの残高などを保存しているという解説を説明してきました。そして、ノードタイプによって保存される情報は異なり、それぞれ得意とするアプリケーションも異なります。
一般的にイーサリアムには3種類のノードが存在します:
フルノード(Full nodes)
フル・イーサリアムノードは、ジェネシスブロックから最新のブロックまで、イーサリアムブロックチェーンのすべてのデータを保有します。つまり、トランザクション履歴、スマートコントラクトコード、口座の残高など全データの保存です。これによりフルノードは、独立してブロックチェーン全体の検証と有効性のチェックができます。 また、必要に応じてスマートコントラクトの命令を実行できます。
ライトノード(light node)
ライトノードは、タイムスタンプと前のブロックのハッシュを含むブロックのヘッダー情報のみを保存するためだけに機能します。ライトノードは、スマートフォンのような低メモリやローエンドのデバイスに適しています。ただし、機能には限界があります。
ライトノードは主にブロックチェーンデータの有効性の検証に使われます。しかし、ブロックの検証やスマートコントラクトの実行には参加できません。ライトノードのもう一つの欠点は、特定のデータが欠落した場合に他のノードに依存しなくてはならず、確率的な結果を含んでしまうことです。
アーカイブノード(Archive nodes)
アーカイブノードは、フルノードと同じようにイーサリアムブロックチェーンのフルデータを保存します。かつ、ネットワーク上の最初のブロックからすべての状態変化を保存しています。 技術的には、アーカイブノードはノードのタイプではなく、ブロックチェーン上のすべての履歴を収集するスクレイピング・モードのことです。 フルノードはアーカイブモードで動作し、直近の128ブロックのあらゆるデータにアクセスします。
アーカイブノードは、ブロックエクスプローラーやウォレットプロバイダー、オンチェーン分析、調査など特に具体的なチェックをする際に無くてはならないものです。
ご想像のとおり、アーカイブノードの維持にはかなりのコストがかかります。また、アーカイブノードの同期プロセスは数か月に及ぶこともあり、定期的なメンテナンスも必要です。
では、次にイーサリアムノードの動作について詳しく掘り下げていきましょう。これによって、イーサリアムのベース部分でのやり取りにおけるノードの役割の理解を深めることができます。
イーサリアムノードはどう機能している?
「ノードはブロックチェーンの中心的存在(workhorses=働き馬)」と言われていますが、大げさにも聞こえます。実際、どういう意味なのでしょう?さっそく、ブロックチェーンとイーサリアムノードの相互連携について詳しく見てみましょう。
簡単にいうと、ブロックチェーンは複数のお互いに現実的に接点のない参加者たちが特定のトランザクションやデータの有効性に合意したり、コンセンサスを形成する仕組みのことです。これは、トランザクションがイーサリアムネットワークによって定められたルールに適しているかを確認して、ノードが正確な最終記録について合意することで実行されます。
ノードは世界中どこにでも存在できて、これらのルール、いわゆるコンセンサスアルゴリズムを用いて、次のブロックチェーンが有効かどうかの合意を行います。イーサリアムでは、少なくとも66%のノードがネットワークの特定の状態をtrue(真) として合意する必要があります。もしfalse(偽)と判断された場合は、ノードはブロックを無効として拒否します。また、イーサリアムネットワークのルールに反するトランザクションも拒否します。
例:Aが自分のウォレットに9 ETHしか持っていない状態で、Bに10 ETHを送ろうとする場合、ノードはこのトランザクションを拒否します。
これまでイーサリアムノードの役割を解説してきましたが、これは今から記す3つのキーファンクションよって実現されています:
コミュニケーション
ノード同士の接続とピア・ツー・ピアのコミュニケーションは、イーサリアムのライフラインといえます。これらはイーサリアムのネットワーキングレイヤーで行われます。ネットワーキングレイヤーは、ノードが通信する時に守らなくてはいけない一連のプロトコルやルール・セットです。
ノードは2つの方法でコミュニケーションを実行しています:
1. ゴシッピング(ゴシップ通信):
ゴシッピングとは、あるノードが他のノードに情報をブロードキャスト(一斉送信)して情報共有する一対多の通信プロセスです。ノードの合意形成にゴシッピングは必要です。
2. スワッピング:
スワッピングは、特定のノード間でリクエストとレスポンスを含む一対一の通信のことです。例えば、分散型アプリケーション(dApps)は、特定のリモートプロシージャコール(RPC)ノードを使用してイーサリアム・ブロックチェーンとのやり取りを行います。
シンクロニゼーション(同期化)
正しい一つの情報源に全ノードが同期することで、イーサリアム・ブロックチェーンの信頼性は担保されます。つまり、ノードはシンクロニゼーションによってブロックチェーンの最新情報を取得しています。イーサリアム・ワイヤープロトコルEthereum Wire Protocolは、ノードがブロックチェーンデータを共有し、同期するためのプロトコルです。
イーサリアム・ノードの同期は以下の3つの方法で行われます:
1. 完全同期(フルシンク/Full sync): ノードはブロックチェーンの全データを複製します。ジェネシスブロックから全トランザクションをダウンロードし、各ブロックを計算し検証します。
2. 高速同期(ファストシンク/Fast sync): ノードはピアノードからブロックチェーンの状態をスナップショットして取得します。ただし、ここではノードはトランザクション処理はせず、ピアを信頼してデータの検証は行いません。
3. 軽同期(ライトシンク/Light sync): ノードは現在のイーサリアムデータの状態だけを保存します。そして、必要に応じて、アーカイブノードからデータを取得します。
ここまでで、ノード同士がどのようにコミュニケーションし、相互に同期するか解説してきました。これら2つの機能は、イーサリアム・ブロックチェーンのセキュリティと一貫性を維持するうえで重要な役割を果たし、また分散性にも貢献しています。
ブロック検証(Block verification)
以前のイーサリアムはプルーフ・オブ・ワーク(PoW)コンセンサスメカニズムを採用しており、マイナーノードは複雑な数学的計算を実行してブロックを作成し、ブロックチェーンに追加していました。ですが、ザ・マージ後は、イーサリアムはプルーフ・オブ・ステーク(PoS)コンセンサスを採用し、マイナーはバリデータへと変化しました。
イーサリアムは、彼らのステーク量(ロックアップされたETH)をベースに、新しいブロックを提案し、追加するバリデータを選びます。提案後、ノードは受け取ったブロックの正しさを検証し、改ざんや不正操作の痕跡がないかをチェックし、ブロックがコンセンサスルールとプロトコルに適合しているかを確認します。
ブロック検証時のイーサリアムノードの役割を記します:
・トランザクション・リクエストの有効性確認、有効と確認できれば、それをメンプール(実行待ちのトランザクションリクエストのプール)に追加します。
・トランザクションを再実行してバリデータの正確性の検証を行います。
・トランザクションがガス制限を超えたり、アドレスが無効だったり、残高が足りないなど、無効な時にはトランザクションを拒否します。
・有効なトランザクションをバリデータに渡してブロックを追加します。
補足: 検証が誤った場合のペナルティとして、バリデータがステークした一部はスラッシュ(没収)されます。
イーサリアムノードの仕組みを学ぶことは、ネットワーク上でのノードの重要性を理解し、ノードを運営するチャンスを探る上で不可欠です。
では、これからはどのようしてイーサリアムノードを運用できるかを見ていきましょう。
イーサリアムノードを運用するための5つのステップ
イーサリアムノードを運用することで、いくつかの貴重なメリットが得られます:
・プライベートで安全なイーサリアムトランザクションの実行ができる。
・イーサリアム改善提案(EIPS)に投票できる。
・中央集権的な障害点を減少させ、ネットワークの強化に協力できる。
・検閲を拒否し、秘密鍵を自分で完全管理できる。
では、これから簡単にイーサリアムノードを運用する方法を解説します:
前提条件を決める
ノードオペレーターにはたくさんの選択肢が存在します。まず、実行クライアントとコンセンサスクライアントの両方のクライアントを実行する必要があります。
同じ様に、ノードはオール・クラウドでのセットアップも、ハードウェア(ローカルコンピュータ)での導入もできます。このステップで、ノードをどのように稼働させるかのアプローチを選びましょう。
クラウドやハードウェアの要件を満たす:
イーサリアムノードは、Amazon Web Services(AWS)やGoogle Cloud Platform(GCP)などのクラウドプロバイダを使って運用できます。事実、50%以上のイーサリアムノードがAWS上でホスティングされています。
一方のハードウェア要件ですが、イーサリアムノードは一般的に販売されているグレードのコンピュータでも運用できます。もちろん、最低限の要件は満たさなくてはいけません。また、ベンダーが販売している既に設定済のプラグ&プレイのオプションのマシンもありますので、こちらを購入すれば簡単に接続・実行をスタートすることもできます。
クライアントソフトウェアのダウンロードと実行
ご自身のノードに適した実行クライアントとコンセンサスクライアントのソフトウェアを選び、ダウンロードしましょう。クライアントのリリースページにある公開鍵を検証して、ソフトウェアの信頼性をチェックします。
この後、実行クライアントの動作確認をテストネットで行い、本番ネットワークにデプロイする前の正常動作をチェックします。コンセンサスクライアントと同様に、操作前にRPC接続を確立させることが最優先です。
クライアントソフトウェアの設定
最初は、実行クライアントとコンセンサスクライアントのすべての構成はデフォルトに設定されています。これらは、バリデータノードの実行やモニタリングなどアプリケーションの用途に応じてカスタマイズできます。このステップには、メインネットorテストネットのネットワーク選択、ローカルRPC接続の有効化などが含まれます。
バリデータを加え、ノードを実行する
イーサリアムノードのセットアップ最終ステップは、バリデータを加えることです。最も理想的なのは32ETHをステーキングし、自分自身でバリデータノードを運用することですが、すべての方が出来るわけではありません。
ですので、LidoやRocketPoolなどのステーキングプールサービスがあります。これらは分散型のノード・オペレータプールを提供し、ユーザーはわずか$100相当のETHからステーキングを始められます。
ノードの運用はもちろん重要です。ですが、もっと重要なのは定期的にモニタリングしてメンテナンスを行い、ノードの稼働を維持し続けることです。これは定期的なクライアント更新や、新しいクライアントサービスの作成、開発者ツールやウォレットインフラなどの追加サービスの実行を通じて可能となります。
イーサリアムノードの実行、ハードウェアの仕様、クライアントソフトウェアのオプションなど詳細な情報やニュアンスがを知りたい方は、このガイドをお読みください。
イーサリアムノードとdApps(分散型アプリケーション)
dAppsは、ロジックの解釈からデータ提供まで、ほとんどすべてをノードに頼ります。
また、シームレスにdAppsが動作するために無くてはならないRPCノードと呼ばれる特別なノードもあります。RPCノードは、dAppsとイーサリアムブロックチェーン間の通信ブリッジとして機能しています。
RPCノードが実際にdApps内でどのように機能するか説明しましょう。
・イーサリアムノードは、スマートコントラクトの実行を担います。ノードはスマートコントラクト内のコードを読み取って処理し、コントラクトを実行します。
・dAppsは、イーサリアムノードに接続して、ユーザーにとって非常に重要なブロックチェーンに保存されているリアルタイムおよび過去のデータにアクセスします。
・スマートコントラクトによって、dAppsのアクションがブロックチェーンイベントととしてトリガーされます。dAppsは、ノードに接続してイベントを読み取って適切な応答を返し、リアルタイムなやりとり、および更新をしています。
・イーサリアムノードは今までの中央集権型サーバーに置き換わって、分散型インフラとしてdAppsの成長を支えています。
RPCノードについてもっと詳しく知りたいなら、このブログをご覧ください:『RPCノードとは何か?』」
※日本語訳の記事もありますので合わせてご覧ください。
イーサリアムノード=ブロックチェーンの中核(Backborn)
まとめると、イーサリアムノードはすべてのトランザクションのコピーを保存し、極めて重要なイーサリアム・ブロックチェーンのパートを担っています。ノードによって、トランザクションの検証、分散型システムによるセキュリティ提供、スマートコントラクト機能が実現されています。ノードを理解することは、堅牢かつ複雑なインフラを持つイーサリアムが、なぜブロックチェーン・エコシステムの主要なプラットフォームになり得ているかを考える上で役立ちます。
このブログが、イーサリアムノードとは何なのか、どう機能し、なぜブロックチェーンにとって重要かをより理解することに少しでもお役に立てれば幸いです。
もし質問があれば、ぜひ40000人以上のビルダーが在籍するDiscordコミュニティに参加してください!また、スマートアカウントの始め方の詳細については直接チームまでお問い合わせください。
そして、イーサリアム上でWeb3アプリを構築したいと思った際には、ぜひthirdwebのWeb3ツールとSDKをご利用ください。これらは無料です!
よくある質問(FAQs)
1. イーサリアムノードとイーサリアムクライアントの違いは?
イーサリアムノードとは、トランザクションを記録し検証し、ネットワークのコンセンサスに参加している、イーサリアム上のコンピューターそのものです。一方、イーサリアムクライアントは、ノードがイーサリアムネットワークとやり取りするのに使われるソフトウェア実装のことを指します。
端的にいえば、ノードはネットワークに実際に参加しているエンティティ(物理的に実体があるもの:PCなど)で、クライアントはノードがイーサリアムブロックチェーンとコミュニケーションし、操作を可能しているソフトウェアになります。
2. なぜ自分でイーサリアムノードを運用すべきでしょう?
ご自身でイーサリアムノードを運用することは、あなたとイーサリアムネットワークの双方にとって利益があります。あなたは、独立してトランザクションを検証し、ブロックチェーンデータへ直接アクセスができて、プライバシーとセキュリティを向上させ、ネットワークガバナンスに参加する自由を得られます。ネットワークにとっては、あなたのノードがさらなる分散性と耐久性に貢献してくれるという利点があります。
3. スマートフォンでイーサリアムノードを運用できますか?
はい。スマートフォンでは、ストレージとリソースの容量が小さいライトノードの運用が可能です。ライトノードはモバイルデバイスに適していて、ユーザーはモバイルアプリを使って、イーサリアムネットワークとやり取りし、トランザクションを送信し、ブロックチェーンデータにアクセスすることができます。ただし、ライトノードの機能には制限があって、ブロックチェーンデータの検証のみとなっています。
Discussion