ニュース解説
イーサリアムのライトクライアントとは?
フルノードの機能限定版として軽量・高速同期を実現
2019年4月10日 13:00
ライトクライアント(またはライトノード)は、簡単に言うとフルノードの機能制限版で、データの検証や完全な同期、情報の中継といった役割を取り除いたもの。ブロックヘッダーと自身に関係のあるデータのみをフルノードから取得し、自身に関係のあるトランザクションだけを検証し、迅速に同期することができる。エンドユーザー向けのEthereumのノードの新しい形態である。
Ethereumの主要なノード運用ソフトウェアであるGeth、Parityは、オプションとしてライトクライアントモードでノードを立ち上げる機能を備えている。本稿は、Parity社が開発するライトクライアントをベースとしたウォレット「Parity Fether」に関連するものとなる。
以下ではEthereumのライトクライアントについて、Parity社が2018年7月に発行した文書「What is a light client and why you should care?」をベースに説明する。
ノードの役割と問題点
ブロックチェーンは、専用のクライアントを運用するノード同士をP2Pで接続したネットワークだ。Ethereumでは、メインネット上にある全データを同期するフルノードがブロックの検証と中継を担い、それぞれがすべてのトランザクションを検証している。
Ethereumでフルノードを運用するクライアントはGethとParityが主流だ。稼働させるには、いずれもミドルスペック以上の性能を持つPCと、ブロックチェーン全体を同期するための時間、ストレージ容量が必要となる。さらにストレージは、現行のハードディスクドライブでは書き込み速度の問題で、SSDの使用が推奨される。
稼働させるだけでもリソースを要求されるフルノードだが、基本的には24時間稼働させなかればならず、一般ユーザーにとっては大きな負担である。加えて、フルノードを運用することで報酬が得られるなどのインセンティブもない。
ライトクライアントとは?
フルノードのワークロードを軽減したものとして考案されたのが「ライトクライアント」である。ライトクライアントは、フルノードを経由してブロックチェーンにアクセスする。フルノードが数百GBの容量と多大なCPU負荷を生じるのに対し、ライトクライアントはわずか100MB程度の容量とモバイルデバイスの動作を妨げないレベルのCPU負荷しか発生しない。
ライトクライアントは、最初にトランザクションの検証に用いる、各ブロックのブロックヘッダーのみをダウンロードする。ブロックヘッダーを使用して、自身と関係のあるトランザクションだけを検証することができ、トランザクション情報など必要なリソースは、都度フルノードから取得するという形態を取る。フルノードと比較して、使用するネットワーク帯域が大きくなる場合はあるものの、CPUとストレージの負荷は数桁単位で大幅に軽量化される。
ライトクライアントは、エンドユーザー視点で非常に使い勝手がいいものの、フルノードの運用者にとっては負荷が増大するだけで、依然として何のメリットもないという課題もある。ライトクライアントがフルノードに対して利用料を支払うなど、持続可能な仕組みも検討されているという。また、将来Ethereumに実装が予定されているシャーディングにおいて、ライトクライアントは要素の検証という重要な役割を担う。
ライトクライアントをベースとしたウォレット
ここからはウォレットの話となる。従来、大半のソフトウェアウォレットは特定のフルノードに依存する。接続したフルノードからの情報を検証する手段を内蔵しないため、利用者は第三者のフルノードへの「信用」を前提としてウォレットを利用することとなる。
一方、ライトクライアントは、ブロックヘッダーを最初にダウンロードする。そこに含まれるMerkle Tree Rootのハッシュ値を照合することで、フルノードから得たデータの正しさを自身で検証することができる。そのため、ライトクライアントをベースとしたウォレットは、特定のフルノードに依存することなくブロックチェーンにアクセスすることができる。