✅オフチェーンデータBLOB可用性
そもそもBLOBとはBinary Large Object(バイナリラージオブジェクト)の略で「大きなサイズのデータ」を意味します。
従来のオンチェーンDAの場合、BLOBをオンチェーンで保管していた為、勿論データが大きくなるとブロックチェーンの肥大化やスケーラビリティの低下に繋がります。
そこでSunriseはオフチェーンのBLOBデータ可用性を提供します。BLOBデータをオフチェーンで保存します。
イレイジャーコーディングという仕組みも併用し、データを複数の断片(シャード)に分割し、IPFSやArweaveのような分散型ストレージに保管します。
仮にシャードの一部が失われてもデータが復活できる凄い仕組み!
そしてデータの場所を示すメタデータだけをブロックチェーンに刻み込み、オンチェーンデータを削減することができます。
はい、読み方は「ふごうか」で合っています。
符号化(encoding)とは、ある形式のデータや情報を別の形式に変換する処理のことです。元のデータや情報を「符号化前」、変換後のデータや情報を「符号化後」と呼びます。
普段の生活でも、様々な場面で符号化が行われています。
文字の符号化: コンピュータは文字を数字として扱います。例えば、「A」という文字はASCIIコードでは「65」という数字に対応しています。これが文字の符号化です。日本語では、UTF-8やShift-JISなど、様々な文字コードが使われています。
画像の符号化: デジタルカメラで撮影した画像は、JPEGやPNGなどの形式で保存されます。これも画像データの符号化です。
音声の符号化: 音楽をMP3などの形式で保存するのも、音声データの符号化です。
動画の符号化: YouTubeなどの動画サイトで使われているMPEG-4なども、動画データの符号化方式です。
EigenDA の文脈では、イレイジャーコーディングという符号化技術が使われています。これは、データを複数の断片に分割し、さらに冗長性を持たせることで、一部の断片が失われても元のデータを復元できるようにする技術です。
例えば、元のデータを4つの断片に分割し、さらに2つの冗長断片を生成すると、合計6つの断片ができます。このうち任意の4つの断片があれば、元のデータを復元できます。つまり、最大2つの断片が失われても大丈夫なのです。
イレイジャーコーディングは、分散ストレージシステムでよく使われる技術で、データの可用性と耐障害性を高めるために有効です。EigenDA でも、この技術を使ってデータを符号化することで、一部のノードがオフラインになってもデータが失われないようにしています。
EigenDA はデータの可用性を証明するレイヤーであり、その証明の一部はブロックチェーン(Ethereum)に書き込まれます。ただし、データそのものは EigenDA のノードオペレーターによってオフチェーンで保管されます。
具体的には、以下の情報が Ethereum のスマートコントラクトに記録されます。
データのコミットメント (KZG commitment): これは、データの内容を要約する暗号学的コミットメントです。データが変更されるとコミットメントも変化するため、データの整合性を検証できます。
データ断片の保管証明 (署名): EigenDA のノードオペレーターは、割り当てられたデータ断片を保管していることを証明する署名を生成します。これらの署名は集約され、Ethereum に提出されます。
その他のメタデータ: データのサイズ、フォーマット、アクセス権限などのメタデータも記録される場合があります。
これらの情報は、データが EigenDA ネットワークに正しく保管されていることを証明するために使用されます。ただし、データそのものはチェーンに書き込まれないため、スケーラビリティを維持することができます。
ユーザーがデータにアクセスしたい場合は、Ethereum 上の記録を参照して、どのノードがどのデータ断片を保管しているかを確認し、直接ノードからデータをダウンロードします。
つまり、EigenDA は、データの可用性に関する最小限の情報だけをオンチェーンに記録することで、セキュリティとスケーラビリティの両立を実現しています。これは、EigenDA が「データ可用性レイヤー」と呼ばれる所以です。
EigenDA オペレーターは、有効なストレージ リクエストに関連付けられた BLOB を保存する責任があります。有効なストレージ リクエストとは、料金が支払われ、提供された BLOB チャンクが提供された KZG コミットメントと証明に対して検証されるリクエストです。検証が成功した場合、オペレーターは BLOB を保存し、保持している KZG コミットメントとチャンク インデックスを使用してメッセージに署名し、それを分散者に送り返します。EigenDA オペレーターは集合的に信頼されています。EigenDA に BLOB を書き込む場合、クライアントは BLOB を保存するステークの正確なしきい値を選択する必要があります。
Читать полностью…保管の証明(Proof of Custody): 倉庫番は、料理をきちんと保管していることを証明する書類を作成します。これにより、レストランは安心して料理を預けることができます。
Читать полностью…DA (Data Availability) は、ブロックチェーンにおいて、データが実際に利用可能であることを保証する仕組みです。
例え話:図書館の本
図書館で本を借りたいとします。
タイトルだけある場合: 図書館のシステムには本のタイトルが登録されていますが、実際の本はどこにもありません。これでは、本を借りることはできません。
本はあるが、貸出禁止: 本は図書館にありますが、貸出禁止になっています。これも、本を読むことはできません。
本があり、借りられる: 本が図書館にあり、貸出も可能です。これで、やっと本を読むことができます。
ブロックチェーンのデータもこれと同じです。データの存在を主張するだけでは不十分です。そのデータが実際にアクセス可能で、検証できる状態でなければならないのです。これが「Data Availability」の概念です。
なぜDAが重要なのか?
特に、ロールアップのようなスケーリングソリューションでは、DAが非常に重要になります。ロールアップは、トランザクションをオフチェーンで処理し、その結果だけをメインチェーンに記録することで、処理能力を向上させます。
しかし、もしロールアップが不正を行い、トランザクションデータを公開しなかった場合、ユーザーはそれを検証できません。そのため、ロールアップはトランザクションデータが誰でもアクセスできる状態にあることを証明する必要があります。これがDAの役割です。
DAを保証する方法:
様々な方法がありますが、代表的なものをいくつか紹介します。
完全なデータ公開: トランザクションデータ全体をメインチェーンに記録する方法。最も安全ですが、容量が大きくなり、スケーラビリティが低下します。
データの断片公開 + イレイジャーコーディング: データを断片化し、一部の断片だけをメインチェーンに記録します。イレイジャーコーディングという技術を使うことで、一部の断片が失われても元のデータを復元できます。
詐欺証明 (Fraud Proofs): ロールアップが不正を行った場合、誰でもそれを証明できる仕組み。不正が証明されれば、不正を行ったロールアップはペナルティを受けます。
有効性証明 (Validity Proofs): ロールアップが行った処理が正しいことを証明する仕組み。これにより、データ全体を公開しなくても、処理の正当性を検証できます。
EigenDAのような専門的なDAレイヤーの必要性:
ロールアップが普及するにつれて、DAに必要なデータ量も増大します。イーサリアムメインチェーンにすべてのデータを記録するのは現実的ではありません。そこで、EigenDAのような専用のDAレイヤーが重要になります。これらのレイヤーは、ロールアップからデータを受け取り、安全かつ効率的に保管し、必要に応じてアクセスできるようにします。
このように、DAはブロックチェーン、特にロールアップの信頼性とスケーラビリティを確保するために不可欠な要素です。
ブロックチェーンにおけるマークルツリーの具体的な使い方を、Bitcoinを例に説明します。
1. トランザクションのハッシュ化:
まず、ブロックに含まれる各トランザクションがハッシュ化されます。ハッシュ化とは、トランザクションデータを入力として、SHA-256のようなハッシュ関数を使って固定長のハッシュ値を生成するプロセスです。このハッシュ値は、トランザクションデータの「デジタル指紋」のような役割を果たします。データが少しでも変更されると、ハッシュ値は大きく変化します。
2. マークルツリーの構築:
次に、生成されたトランザクションのハッシュ値をペアにして、それぞれのペアのハッシュ値を計算します。つまり、2つのハッシュ値を連結し、再びハッシュ関数にかけます。このプロセスを繰り返すことで、ツリー構造が構築されていきます。葉(リーフ)ノードにはトランザクションのハッシュ値が、枝(ブランチ)ノードにはペアのハッシュ値が格納されます。最終的に、ツリーの最上位にあるルートノードには、マークルルートハッシュ と呼ばれる単一のハッシュ値が格納されます。
3. ブロックヘッダーへの格納:
計算されたマークルルートハッシュは、ブロックヘッダーに格納されます。ブロックヘッダーは、ブロックチェーンの各ブロックに関する要約情報を含む部分です。
4. トランザクションの検証:
あるノードが特定のトランザクションがブロックチェーンに含まれていることを検証したい場合、以下の手順を実行します。
マークルパス (Merkle Path) の取得: 検証したいトランザクションのハッシュ値からマークルルートハッシュまでの経路上にあるハッシュ値の集合を、フルノードから取得します。これは「マークルパス」または「マークルブランチ」と呼ばれます。
ハッシュの再計算: 取得したマークルパスと検証したいトランザクションのハッシュ値を使って、マークルルートハッシュを再計算します。
ルートハッシュの比較: 再計算したマークルルートハッシュと、ブロックヘッダーに格納されているマークルルートハッシュを比較します。一致すれば、トランザクションがブロックに含まれていることが証明されます。
メリット:
効率的な検証: ブロック全体のデータを取得することなく、特定のトランザクションの存在を検証できます。これは、特にストレージ容量や帯域幅が限られている軽量クライアントにとって重要です。
データの整合性の保証: もしトランザクションデータが改ざんされると、ハッシュ値が変化し、マークルルートハッシュも変化します。そのため、マークルツリーはデータの改ざんを検知するのに役立ちます。
簡易なデータ同期: ブロックチェーンの同期処理において、マークルツリーを使うことで、データの不一致を効率的に特定し、修正できます。
このように、マークルツリーはブロックチェーンにおいて、トランザクションの検証を効率化し、データの整合性を保証するための重要な役割を果たしています。
より理解を深めるために、図解を用いた説明や、具体的なトランザクションデータを用いた例なども有効です。もし必要であれば、お気軽にお申し付けください。
https://sunriselayer.medium.com/data-availability-layers-a-comparison-5188da1a97b8
Читать полностью…そこで、データを別の場所(オフチェーン)に保管し、そのデータが正しくて利用可能であることをDA(データ可用性)という仕組みで保証するのが、モジュラーブロックチェーンにおけるDAの役割です。
Читать полностью…一般に情報を本来の形態から伝送,処理,蓄積などの目的のために別の形態に変換することをいう。 広義には情報をもとの形からどのような形でも別の形態に変換することが符号化であるが,狭義にはディジタルの形態,とくに二元系列に変換することを符号化という
Читать полностью…その理解はほぼ正しいです。
DA(Data Availability)とは、データがアクセス可能で検証可能な状態にあることを保証する仕組み全体を指します。つまり、EigenDA の文脈では、以下の要素が DA を構成します。
データの断片化と符号化: データを冗長化し、一部のノードがオフラインになってもデータ全体を復元できるようにする仕組み。
ノードオペレーターによるデータの保管: ノードオペレーターが実際にデータを保管する行為。
可用性の証明: データが実際に利用可能であることを証明する仕組み(KZGコミットメント、ノードの署名など)。
データの取得メカニズム: ユーザーが必要なデータ断片をノードからダウンロードする仕組み。
したがって、ノードオペレーターのストレージは DA の一部です。DA は、単にデータを保管するだけでなく、そのデータが確実に利用可能であることを保証するすべてのプロセスを含みます。
「ノードオペレーターのストレージに関しては DA として言わない」という表現は少し語弊があります。ノードオペレーターのストレージは DA を実現するための重要な構成要素であり、DA を語る上で欠かせない要素です。ただし、DA レイヤー(EigenDA)は、ストレージそのものだけでなく、可用性を証明する仕組みやデータ取得メカニズムなど、包括的なサービスを提供している点を理解することが重要です。
EigenDA のデータは、EigenLayer ネットワークに参加するノードオペレーターのマシンに分散して保存されます。これらのノードは、EigenLayer 上で ETH をステークすることでデータの保管と提供を行うインセンティブを得ており、そのステーク量に応じて、より多くのデータ断片の保管責任を負います。
データの保管場所に関する重要なポイント:
分散型ストレージ: EigenDA は特定のデータセンターに依存せず、多数のノードオペレーターのストレージをネットワーク化して使用します。これは、単一障害点のリスクを減らし、耐障害性を高めるための設計です。
ステークベースの責任: ノードオペレーターは、ステークしている ETH の量に応じて、より多くのデータの保管責任を負います。これにより、ネットワークのリソースが効率的に利用され、データの可用性が保証されます。
動的なリソース割り当て: ノードのステーク量に応じて必要なストレージ容量やネットワーク帯域幅が変わるため、ノードオペレーターは必要に応じてシステムをアップグレードする必要があります。
IPアドレスの安定性: データの取得を円滑に行うため、ノードオペレーターは安定したIPアドレスを維持することが推奨されています。IPアドレスの変更は、Ethereum L1へのトランザクションを必要とするためガス代が発生します。
データ保管の流れ:
ロールアップからのデータ受信: ロールアップはトランザクションデータを EigenDA の disperser に送信します。
断片化と符号化: disperser はデータの断片化と符号化を行い、冗長性を持たせます。
ノードへの割り当て: EigenLayer のアサインメントモジュールが、ステーク量に基づいて、符号化されたデータ断片を各ノードに割り当てます。
ノードによる保管と証明: ノードオペレーターは割り当てられたデータ断片を保管し、Proof of Custody を生成することで、データが正しく保管されていることを証明します。
データの取得: 必要に応じて、ロールアップやその他のユーザーは、EigenDA ネットワークからデータをダウンロードできます。
提供されたドキュメントは、EigenDA の仕組みや要件を詳細に説明しており、私の以前の説明もこの内容と一致しています。特に、ノードのシステム要件、ストレージ要件、IPアドレスの安定性など、重要な情報がドキュメントに記載されています。これらの情報を理解することは、EigenDA ノードオペレーターとして参加する上で重要です。
EigenDA のデータは、EigenLayer に参加しているノードオペレーターによって分散して保管されます。これらのノードは、EigenLayer 上で ETH をステーク(預け入れる)することで、データの保管と提供を行うインセンティブを得ています。
もう少し詳しく説明すると、以下のようになります。
データの断片化と符号化: ロールアップから受け取ったデータは、イレイジャーコーディングという技術を使って断片化され、冗長性を持たせた形で符号化されます。これにより、一部のノードがオフラインになっても、データ全体を復元できます。
ノードへのデータ割り当て: 符号化されたデータ断片は、EigenLayer のアサインメントモジュールによって、参加しているノードオペレーターに割り当てられます。どのノードにどの断片を割り当てるかは、ノードがステークしている ETH の量に基づいて決定されます。より多くの ETH をステークしているノードには、より多くのデータ断片が割り当てられます。
ノードによるデータ保管: データ断片を受け取ったノードオペレーターは、指定された期間、そのデータを保管する義務を負います。データを適切に保管していることを証明するために、ノードは定期的に「Proof of Custody」と呼ばれる証明を生成します。
データの取得: ロールアップやその他のユーザーがデータにアクセスする必要がある場合は、EigenDA ネットワークから必要なデータ断片をダウンロードできます。データは複数のノードに分散して保管されているため、一部のノードがオフラインになっても、データ全体を復元可能です。
つまり、EigenDA は特定の場所に巨大なデータセンターを持つのではなく、多くのノードオペレーターのストレージ容量を借り上げて、分散型ストレージネットワークを形成しているのです。これにより、単一の障害点が生じるリスクを軽減し、データの可用性と安全性を高めています。
EigenLayer に参加するノードオペレーターは、データの保管と提供を行うことで報酬を得ます。この報酬は、EigenLayer にステークされている ETH から支払われます。このインセンティブメカニズムにより、ノードオペレーターは誠実にデータを提供することが促され、ネットワーク全体の安定性が維持されます。
EigenDAは、イーサリアムのロールアップ(トランザクション処理能力を向上させる技術)が大量のデータを安全かつ安価に保管できるようにするサービスです。
例え話:レストランの厨房と倉庫
レストラン(イーサリアム): イーサリアムは人気レストランで、たくさんの人が料理(トランザクション)を注文しに来ます。
厨房(ロールアップ): ロールアップは効率的な厨房で、一度にたくさんの料理を作ることができます。しかし、作った料理を置く場所が必要です。
倉庫(EigenDA): EigenDAは広くて安全な倉庫です。ロールアップは作った料理(トランザクションデータ)をここに保管します。
倉庫番(ノードオペレーター): 倉庫番は、料理をきちんと保管し、必要なときにレストランに届けます。報酬としてチップ(手数料)をもらいます。
レストランオーナー(Restaker): レストランオーナーは、倉庫番に倉庫の管理を任せて、その見返りに家賃(報酬の一部)を受け取ります。
従来、レストランは小さな冷蔵庫(イーサリアム本体)にしか料理を保管できず、すぐにいっぱいになっていました。そのため、料理の提供が遅くなり、価格も高騰していました。
EigenDAという大きな倉庫ができたことで、ロールアップはたくさんの料理を保管できるようになり、レストランの処理能力が大幅に向上しました。しかも、倉庫番が効率的に働いてくれるので、保管コストも安く抑えられます。
EigenDAの仕組みをもう少し詳しく説明すると…
料理の分割と整理(データのシャーディングとエンコーディング): 料理を一口サイズに切り分け、種類ごとに整理して、倉庫に効率的に保管できるようにします。
倉庫への保管(データの分散): 分割された料理を、複数の倉庫番が管理する棚に分散して保管します。一部の倉庫番がサボっても、他の倉庫番から料理を取り出すことができます。
保管の証明(Proof of Custody): 倉庫番は、料理をきちんと保管していることを証明する書類を作成します。これにより、レストランは安心して料理を預けることができます。
料理の注文(データの取得): レストランが必要な料理を注文すると、倉庫番は指定された料理をすぐに届けます。
EigenDAを使うことで、イーサリアムはより多くのトランザクションを処理できるようになり、手数料も安くなります。また、データの安全性も高まり、より信頼性の高いシステムになります。
この例え話でEigenDAの仕組みが少しでも理解しやすくなれば幸いです。
ステートルートとマークルツリーはどちらもハッシュベースのデータ構造で、データの整合性を検証するために使われますが、その用途と構造が異なります。
マークルツリー (Merkle Tree):
用途: 特定のトランザクションがブロックに含まれているか検証する。ブロック内のトランザクションの集合の整合性を保証する。
構造: 木構造。葉(リーフ)ノードには個々のトランザクションのハッシュ値、枝(ブランチ)ノードには子ノードのハッシュ値のハッシュ値が格納され、最終的にルートノードにマークルルートハッシュが格納される。
例: Bitcoin, Ethereum (トランザクションデータの検証)
ステートルート (State Root):
用途: ブロックチェーンの現在の状態を表す。アカウントの残高、スマートコントラクトのコードやストレージなど、ブロックチェーン上のすべてのデータの整合性を保証する。
構造: 通常はマークルツリー(または類似のハッシュベースのデータ構造)が用いられる。葉(リーフ)ノードには、各アカウントの状態(残高、nonceなど)のハッシュ値が格納される。
例: Ethereum (アカウントの状態の検証)
違いを分かりやすく説明する例え:
図書館を想像してみてください。
マークルツリー: 図書館の貸出記録のようなもの。ある特定の本が貸し出されているかどうかを、貸出記録全体を見なくても、マークルツリーを使って効率的に確認できます。
ステートルート: 図書館の蔵書目録のようなもの。図書館に現在どのような本がどれだけあるかを表します。ステートルートを使うことで、図書館の蔵書全体の整合性を確認できます。
Ethereumにおける両者の関係:
Ethereumでは、ブロックヘッダーにトランザクションルートハッシュ(マークルツリー)とステートルートハッシュの両方が含まれています。
トランザクションルートハッシュ: そのブロックに含まれるトランザクションの整合性を保証します。
ステートルートハッシュ: そのブロック適用後のブロックチェーンの状態の整合性を保証します。
このように、マークルツリーとステートルートはどちらもブロックチェーンのデータ整合性を保証するために重要な役割を果たしていますが、対象とするデータと用途が異なります。マークルツリーはトランザクションの検証に、ステートルートはブロックチェーンの状態の検証に使われます。 特にEthereumのようなアカウントベースのブロックチェーンでは、ステートルートはシステムの根幹を支える重要な要素となります。