ブロックチェーン・データ・ストレージ戦略
最終編集者: @milkywebboy(opens in a new tab), 2024年6月18日
情報を保存する方法には、ブロックチェーン上に直接保存する方法や、ブロックチェーンによってセキュリティが保たれる形で保存する方法など、いくつかの選択肢があります。
- EIP-4844ブロブ
- コールデータ
- L1メカニズムを用いたオフチェーン
- コントラクト・コード
- イベント
- EVMストレージ
どの方法を使用するかは、いくつかの基準に基づいて決まります。
- 情報のソース。 コールデータに含まれる情報は、ブロックチェーンそのものから直接取得することはできません。
- 情報の行き先。 コールデータは、それが開始するトランザクション内でのみ利用可能です。 イベントはオンチェーンでアクセスすることはできません。
- 許容できる手間の量。 フルノードを実行するコンピュータは、ブラウザで動作するライトクライアントよりも多くの処理を行うことができます。
- 全てのノードからの情報への容易なアクセスが必要かどうか。
- セキュリティ要件。
セキュリティ要件
一般的に、情報セキュリティは以下の3つの属性で構成されます。
機密性 :許可されていない者が情報を読むことができないこと。 これは多くの場合重要ですが、ここではあまり関係ありません。 ブロックチェーンには秘密はありません。 ブロックチェーンは誰でも状態遷移を検証できるため、秘密の情報をそのまま保存することは不可能です。 ブロックチェーン上に機密情報を保存する方法はありますが、それらはすべて、少なくとも鍵をオフチェーンで保存する何らかのコンポーネントに依存しています。
完全性 :情報が正確であり、許可されていない者によって、あるいは許可されていない方法で変更されないこと(例えば、Transferイベントなしで ERC-20トークン(opens in a new tab) を送信するなど)。 ブロックチェーンでは、すべてのノードがすべての状態変更を検証するため、完全性が確保されます。
可用性 :許可された者なら誰でも情報にアクセスできること。 ブロックチェーンでは、通常、すべての フルノード(opens in a new tab) で情報を利用できるようにすることで可用性が確保されます。
ここでの異なるソリューションはすべて、L1にハッシュが投稿されるため、優れた完全性を持っています。 しかし、可用性に関しては異なる保証があります。
前提条件
ブロックチェーンの基礎 を十分に理解していることが前提です。 また、このページでは、読者が ブロック 、 トランザクション 、その他関連するトピックに精通していることを前提としています。
EIP-4844ブロブ
Dencunハードフォーク(opens in a new tab) から、イーサリアムブロックチェーンには EIP-4844(opens in a new tab) が導入され、限られた有効期間(初期は約 18日間(opens in a new tab) )のデータブロブが追加されました。 これらのブロブは、実行ガス と同様のメカニズムを使用していますが、価格は別に設定されています。 これらは一時的なデータを安価に投稿する手段となっています。
EIP-4844ブロブの主な利用ケースは、ロールアップによるトランザクションの公開です。 オプティミスティック・ロールアップ は、ブロックチェーン上にトランザクションを公開する必要があります。 これらのトランザクションは、 チャレンジ期間中(opens in a new tab) に誰でも利用できる状態にしておく必要があり、ロールアップの シーケンサー(opens in a new tab) が誤った状態ルートを投稿した場合に バリデーター(opens in a new tab) がそのミスを修正できるようにします。
しかし、チャレンジ期間が終了し、状態ルートが確定されると、これらのトランザクションを知る必要があるのはチェーンの現在の状態を再現するためだけになります。 この状態はチェーンノードからも利用可能で、処理負荷がはるかに少なくなります。 そのため、トランザクション情報は ブロックエクスプローラー などのいくつかの場所に保存されるべきですが、イーサリアムが提供するレベルの検閲耐性を維持するためにコストを支払う必要はありません。
ゼロ知識ロールアップ もまた、他のノードが既存の状態を複製し、有効性証明を確認するためにトランザクションデータを投稿しますが、これも短期的な要件です。
執筆時点では、EIP-4844への投稿は1バイトあたり1wei(10-18 ETH)で、トランザクションにかかる21,000の実行ガス(ブロブを投稿する場合も含む)(opens in a new tab) に比べて無視できるほどのコストです。 現在のEIP-4844の価格は blobscan.com(opens in a new tab) で確認できます。
以下に、有名なロールアップによって投稿されたブロブを確認できるアドレスを示します。
コールデータ
コールデータは、トランザクションの一部として送信されるバイトデータを指します。 そのトランザクションを含むブロックにおいて 、ブロックチェーンの永続的な記録の一部として保存されます。
これは、ブロックチェーンにデータを永続的に保存する最も安価な方法です。 1バイトあたりのコストは、バイトがゼロの場合は4ガス、それ以外の値の場合は16ガスです。 データが圧縮されると(これは一般的な手法です)、すべてのバイト値が等しく出現する可能性があるため、平均コストは1バイトあたり約15.95ガスとなります。
執筆時点では、ガス価格が12 gwei/gas、ETHの価格が2,300ドル/ETHであるため、1キロバイトあたりのコストは約45セントです。 EIP-4844以前はこれが最も安価な方法であったため、ロールアップはトランザクション情報を保存するためにこの方法を使用していました。これらの情報は フォールトチャレンジ(opens in a new tab) のために利用可能である必要がありますが、直接オンチェーンでアクセス可能である必要はありません。
以下は、有名なロールアップによって投稿されたトランザクションを確認できるアドレスです。
L1メカニズムを用いたオフチェーン
セキュリティのトレードオフ次第では、情報を別の場所に置き、必要なときにデータが利用できるようにする仕組みを使ってもよい場合があります。 これを機能させるためには、次の2つの要件が必要です。
データの ハッシュ(opens in a new tab) をブロックチェーン上に投稿すること(これを 入力コミットメント と呼びます)。 これは32バイトの単一のワードとして投稿できるため、コストは高くありません。 入力コミットメントが利用可能であれば、同じハッシュ値を持つ他のデータを見つけることは現実的に不可能なため、データの完全性が保証されます。 したがって、不正確なデータが提供された場合、それを検出することができます。
可用性を保証するメカニズムを持つこと。 たとえば、Redstone(opens in a new tab) では、どのノードでも可用性チャレンジを提出することができます。 シーケンサーが期限までにオンチェーンで応答しなければ、入力コミットメントは破棄され、その情報は投稿されていなかったと見なされます。
これはオプティミスティックロールアップにとって許容可能です。というのも、私たちはすでに、状態ルートに対して少なくとも1人の誠実な検証者がいることに依存しているからです。 そのような誠実な検証者は、ブロックを処理するためのデータを確保し、情報がオフチェーンで利用できない場合は可用性チャレンジを発行します。 このタイプのオプティミスティックロールアップは、プラズマ と呼ばれます。
コントラクトコード
一度だけ書き込まれ、その後は上書きされず、オンチェーンで利用可能である必要がある情報は、コントラクトコードとして保存することができます。 これは、データを含む「スマートコントラクト」を作成し、その情報を EXTCODECOPY
(opens in a new tab) を使って読み取るという方法です。 この方法の利点は、コードのコピーが比較的安価であることです。
EXTCODECOPY
のコストは、メモリ拡張コストのほかに、コントラクトへの最初のアクセス時に2,600ガス(「コールド」状態の場合)、同じコントラクトからの後続のコピーには100ガスに加えて32バイトごとに3ガスがかかります。 これに対し、コールデータは1バイトあたり約15.95ガスかかるため、200バイト以上の場合、コントラクトコードを使用する方が安価になります。 メモリ拡張コストの計算式(opens in a new tab)に基づくと、必要なメモリが4MB以内であれば、メモリ拡張コストはコールデータを追加するコストよりも小さくなります。
ただし、これはあくまでデータを 読み取る ためのコストです。 コントラクトを作成するには、約32,000ガスに加えて1バイトあたり200ガスがかかります。 この方法は、同じ情報を異なるトランザクションで何度も読み取る必要がある場合にのみ経済的です。
コントラクトコードは、 0xEF
で始まらない限り、無意味なものであっても構いません。 0xEF
で始まるコントラクトは イーサリアムオブジェクトフォーマット(opens in a new tab) として解釈され、はるかに厳しい要件が課されます。
イベント
イベント(opens in a new tab) はスマートコントラクトによって発行され、オフチェーンのソフトウェアによって読み取られます。 その利点は、オフチェーンのコードがイベントを検知できることです。 コストは ガス代(opens in a new tab) で、375ガスに加えてデータ1バイトあたり8ガスがかかります。 ガス価格が12 gwei/gas、ETH価格が2,300ドル/ETHの場合、1セント+1キロバイトあたり22セントのコストになります。
EVMストレージ
スマートコントラクトは 永続的なストレージ(opens in a new tab) にアクセスできます。 しかし、そのコストは非常に高いです。 空のストレージスロットに32バイトのデータを書き込むには、 22,100ガスが必要(opens in a new tab) です。 ガス価格が12 gwei/gas、ETH価格が2,300ドル/ETHの場合、1回の書き込み操作に約61セント、1キロバイトあたり約19.5ドルのコストがかかります。
これはイーサリアムで最も高価なストレージ形式です。
まとめ
以下の表は、異なるオプションの概要と、それぞれの利点と欠点をまとめたものです。
ストレージタイプ | データソース | 可用性の保証 | オンチェーンでの可用性 | その他の制限事項 |
---|---|---|---|---|
EIP-4844ブロブ | オフチェーン | イーサリアムによる約18日間(opens in a new tab)の保証 | ハッシュのみ利用可能 | |
コールデータ | オフチェーン | イーサリアムによる永続的な保証(ブロックチェーンの一部) | コントラクトに書き込まれた場合のみ、かつそのトランザクションにおいてのみ利用可能 | |
L1メカニズムを用いたオフチェーン | オフチェーン | チャレンジ期間中の「1人の誠実な検証者」による保証 | ハッシュのみ | チャレンジメカニズムによって保証されるが、チャレンジ期間中のみ |
コントラクト・コード | オンチェーンまたはオフチェーン | イーサリアムによる永続的な保証(ブロックチェーンの一部) | はい | 「ランダム」なアドレスに書き込まれ、 0xEF で始めることができない |
イベント | オンチェーン | イーサリアムによる永続的な保証(ブロックチェーンの一部) | いいえ | |
ストレージ | オンチェーン | イーサリアムによる永続的な保証(ブロックチェーンおよび現在の状態の一部として、上書きされるまで保持) | はい |