オプティミスティック・ロールアップ
オプティミスティック・ロールアップは、イーサリアムのベースレイヤーのスループットを拡張するために設計されたレイヤー2 (L2) プロトコルです。トランザクションをオフチェーンで処理することで、メインのイーサリアム・チェーンでの計算を減らし、処理速度を大幅に向上させます。サイドチェーンのような他のスケーリングソリューションとは異なり、オプティミスティック・ロールアップはトランザクション結果をオンチェーンで公開することでメインネットからセキュリティを引き継ぎます。また、イーサリアム上で不正証明を用いてトランザクションを検証するもののトランザクションデータを別の場所に保存するプラズマ・チェーンとも異なります。
イーサリアムを使用する上で計算は遅く高価な部分であるため、オプティミスティック・ロールアップはスケーラビリティを最大10〜100倍向上させることができます。また、オプティミスティック・ロールアップはトランザクションをcalldataとして、またはブロブ内にイーサリアムに書き込むため、ユーザーのガス代を削減します。
前提条件
イーサリアムのスケーリングとレイヤー2に関するページを読み、理解しておく必要があります。
オプティミスティック・ロールアップとは?
オプティミスティック・ロールアップは、計算と状態の保存をオフチェーンに移行することを含む、イーサリアムをスケーリングするためのアプローチです。オプティミスティック・ロールアップはイーサリアムの外部でトランザクションを実行しますが、トランザクションデータをcalldataとして、またはブロブ内にメインネットに投稿します。
オプティミスティック・ロールアップのオペレーターは、イーサリアムに送信する前に、複数のオフチェーン・トランザクションを大きなバッチにまとめます。このアプローチにより、各バッチ内の複数のトランザクションに固定コストを分散させることができ、エンドユーザーのガス代を削減できます。また、オプティミスティック・ロールアップは圧縮技術を使用して、イーサリアムに投稿されるデータ量を削減します。
オプティミスティック・ロールアップは、オフチェーン・トランザクションが有効であると想定し、オンチェーンに投稿されたトランザクションバッチの有効性の証明を公開しないため、「オプティミスティック (楽観的)」と見なされます。この点が、オフチェーン・トランザクションの暗号化されたを公開するゼロ知識ロールアップとオプティミスティック・ロールアップを区別する要素です。
代わりに、オプティミスティック・ロールアップは不正証明スキームに依存して、トランザクションが正しく計算されていないケースを検出します。ロールアップのバッチがイーサリアムに送信された後、誰でもを計算することでロールアップ・トランザクションの結果に異議を唱えることができる期間 (チャレンジ期間と呼ばれます) があります。
不正証明が成功した場合、ロールアップ・プロトコルはトランザクションを再実行し、それに応じてロールアップの状態を更新します。不正証明が成功したことによるもう1つの影響は、誤って実行されたトランザクションをブロックに含めた責任があるシーケンサーがペナルティを受けることです。
チャレンジ期間が経過した後もロールアップのバッチに異議が唱えられない場合 (つまり、すべてのトランザクションが正しく実行された場合)、そのバッチは有効と見なされ、イーサリアム上で受け入れられます。他のユーザーは未確認のロールアップ・ブロックの上に構築を続けることができますが、注意点があります。以前に公開された誤って実行されたトランザクションに基づいている場合、トランザクション結果は取り消されます。
オプティミスティック・ロールアップはイーサリアムとどのように相互作用するのか?
オプティミスティック・ロールアップは、イーサリアム上で動作するように構築されたオフチェーン・スケーリングソリューションです。各オプティミスティック・ロールアップは、イーサリアム・ネットワークにデプロイされた一連のスマート・コントラクトによって管理されます。オプティミスティック・ロールアップはメインのイーサリアム・チェーンの外部でトランザクションを処理しますが、オフチェーン・トランザクションを (バッチで) オンチェーンのロールアップ・コントラクトに投稿します。イーサリアムのブロックチェーンと同様に、このトランザクション記録はイミュータブルであり、「オプティミスティック・ロールアップ・チェーン」を形成します。
オプティミスティック・ロールアップのアーキテクチャは、以下の部分で構成されています。
オンチェーン・コントラクト: オプティミスティック・ロールアップの動作は、イーサリアム上で実行されるスマート・コントラクトによって制御されます。これには、ロールアップ・ブロックを保存し、ロールアップ上の状態の更新を監視し、ユーザーの預金を追跡するコントラクトが含まれます。この意味で、イーサリアムはオプティミスティック・ロールアップのベースレイヤー、つまり「レイヤー1 (L1)」として機能します。
オフチェーン仮想マシン (VM): オプティミスティック・ロールアップ・プロトコルを管理するコントラクトはイーサリアム上で実行されますが、ロールアップ・プロトコルはイーサリアム仮想マシン (EVM)とは別の仮想マシンで計算と状態の保存を実行します。オフチェーンVMは、アプリケーションが存在し、状態の変更が実行される場所です。これは、オプティミスティック・ロールアップの上位レイヤー、つまり「レイヤー2 (L2)」として機能します。
オプティミスティック・ロールアップは、EVM用に記述またはコンパイルされたプログラムを実行するように設計されているため、オフチェーンVMには多くのEVM設計仕様が組み込まれています。さらに、オンチェーンで計算された不正証明により、イーサリアム・ネットワークはオフチェーンVMで計算された状態変更の有効性を強制することができます。
オプティミスティック・ロールアップは、独立したプロトコルとして存在する一方で、そのセキュリティ特性はイーサリアムから引き継がれているため、「ハイブリッド・スケーリングソリューション」と呼ばれます。とりわけ、イーサリアムはロールアップのオフチェーン計算の正確性と、計算の背後にあるデータの可用性を保証します。これにより、オプティミスティック・ロールアップは、セキュリティをイーサリアムに依存しない純粋なオフチェーン・スケーリングプロトコル (例: サイドチェーン) よりも安全になります。
オプティミスティック・ロールアップは、以下の点でメインのイーサリアム・プロトコルに依存しています。
データ可用性 (DA)
前述のように、オプティミスティック・ロールアップはトランザクションデータをcalldataまたはブロブとしてイーサリアムに投稿します。ロールアップ・チェーンの実行は送信されたトランザクションに基づいているため、誰でもイーサリアムのベースレイヤーにアンカーされたこの情報を使用して、ロールアップの状態を実行し、状態遷移の正確性を検証できます。
状態データにアクセスできなければ、チャレンジャーは無効なロールアップ操作に異議を唱えるための不正証明を構築できないため、データ可用性は非常に重要です。イーサリアムがデータ可用性を提供することで、ロールアップのオペレーターが悪意のある行為 (無効なブロックの送信など) を逃れるリスクが軽減されます。
検閲耐性
オプティミスティック・ロールアップは、検閲耐性についてもイーサリアムに依存しています。オプティミスティック・ロールアップでは、中央集権的なエンティティ (オペレーター) がトランザクションを処理し、ロールアップ・ブロックをイーサリアムに送信する責任を負います。これにはいくつかの影響があります。
-
ロールアップのオペレーターは、完全にオフラインになるか、特定のトランザクションを含むブロックの生成を拒否することで、ユーザーを検閲できます。
-
ロールアップのオペレーターは、所有権のマークル証明に必要な状態データを保留することで、ユーザーがロールアップ・コントラクトに預けた資金を引き出すのを防ぐことができます。状態データを保留することで、ロールアップの状態をユーザーから隠し、ユーザーがロールアップと対話するのを防ぐこともできます。
オプティミスティック・ロールアップは、オペレーターに状態の更新に関連するデータをイーサリアム上で公開させることで、この問題を解決します。ロールアップのデータをオンチェーンで公開することには、以下の利点があります。
-
オプティミスティック・ロールアップのオペレーターがオフラインになったり、トランザクションバッチの生成を停止したりした場合、別のノードが利用可能なデータを使用してロールアップの最後の状態を再現し、ブロックの生成を継続できます。
-
ユーザーはトランザクションデータを使用して資金の所有権を証明するマークル証明を作成し、ロールアップから資産を引き出すことができます。
-
ユーザーはシーケンサーの代わりにL1でトランザクションを送信することもできます。この場合、シーケンサーは有効なブロックを生成し続けるために、一定の制限時間内にトランザクションを含める必要があります。
セトルメント
オプティミスティック・ロールアップのコンテキストにおいてイーサリアムが果たすもう1つの役割は、セトルメントレイヤーとしての役割です。セトルメントレイヤーは、ブロックチェーン・エコシステム全体をアンカーし、セキュリティを確立し、仲裁を必要とする別のチェーン (この場合はオプティミスティック・ロールアップ) で紛争が発生した場合に客観的なファイナリティを提供します。
イーサリアム・メインネットは、オプティミスティック・ロールアップが不正証明を検証し、紛争を解決するためのハブを提供します。さらに、ロールアップで行われたトランザクションは、ロールアップ・ブロックがイーサリアム上で受け入れられた_後_にのみファイナリティを持ちます。ロールアップ・トランザクションがイーサリアムのベースレイヤーにコミットされると、(チェーンのリオーグという極めてまれなケースを除き) ロールバックすることはできません。
オプティミスティック・ロールアップはどのように機能するのか?
トランザクションの実行と集約
ユーザーは、オプティミスティック・ロールアップ上でトランザクションを処理する責任を持つノードである「オペレーター」にトランザクションを送信します。「バリデータ」または「アグリゲーター」とも呼ばれるオペレーターは、トランザクションを集約し、基盤となるデータを圧縮して、イーサリアム上でブロックを公開します。
誰でもバリデータになることができますが、オプティミスティック・ロールアップのバリデータは、プルーフ・オブ・ステーク (PoS) システムと同様に、ブロックを生成する前に保証金を提供する必要があります。バリデータが無効なブロックを投稿したり、古くて無効なブロックの上に構築したりした場合 (自身のブロックが有効であっても)、この保証金はスラッシングされる可能性があります。このようにして、オプティミスティック・ロールアップは暗号経済的なインセンティブを利用して、バリデータが誠実に行動することを保証します。
オプティミスティック・ロールアップ・チェーン上の他のバリデータは、ロールアップの状態のコピーを使用して、送信されたトランザクションを実行することが期待されています。バリデータの最終状態がオペレーターの提案した状態と異なる場合、チャレンジを開始して不正証明を計算することができます。
一部のオプティミスティック・ロールアップは、パーミッションレスなバリデータシステムを放棄し、単一の「シーケンサー」を使用してチェーンを実行する場合があります。バリデータと同様に、シーケンサーはトランザクションを処理し、ロールアップ・ブロックを生成し、ロールアップ・トランザクションをL1チェーン (イーサリアム) に送信します。
シーケンサーは、トランザクションの順序付けに対してより大きな制御権を持つため、通常のロールアップのオペレーターとは異なります。また、シーケンサーはロールアップ・チェーンへの優先アクセス権を持ち、オンチェーン・コントラクトにトランザクションを送信することを許可された唯一のエンティティです。シーケンサー以外のノードや一般ユーザーからのトランザクションは、シーケンサーが新しいバッチに含めるまで、別のインボックスにキューイングされるだけです。
イーサリアムへのロールアップ・ブロックの送信
前述のように、オプティミスティック・ロールアップのオペレーターは、オフチェーン・トランザクションをバッチにまとめ、公証のためにイーサリアムに送信します。このプロセスには、トランザクション関連のデータを圧縮し、calldataとして、またはブロブ内にイーサリアム上で公開することが含まれます。
calldataは、スマート・コントラクト内の変更不可能で非永続的な領域であり、ほとんどメモリのように動作します。calldataはブロックチェーンの履歴ログ (opens in a new tab)の一部としてオンチェーンに保持されますが、イーサリアムの状態の一部としては保存されません。calldataはイーサリアムの状態のどの部分にも触れないため、オンチェーンにデータを保存するための状態よりも安価です。
calldataキーワードは、Solidityで実行時にスマート・コントラクト関数に引数を渡すためにも使用されます。calldataは、トランザクション中に呼び出される関数を識別し、任意のバイトシーケンスの形式で関数への入力を保持します。
オプティミスティック・ロールアップのコンテキストでは、calldataは圧縮されたトランザクションデータをオンチェーン・コントラクトに送信するために使用されます。ロールアップのオペレーターは、ロールアップ・コントラクト内の必要な関数を呼び出し、圧縮されたデータを関数の引数として渡すことで、新しいバッチを追加します。ロールアップで発生するコストの大部分はオンチェーンへのデータ保存によるものであるため、calldataを使用することでユーザーのガス代が削減されます。
この概念がどのように機能するかを示す、ロールアップのバッチ送信の例 (opens in a new tab)を次に示します。シーケンサーはappendSequencerBatch()メソッドを呼び出し、calldataを使用して圧縮されたトランザクションデータを入力として渡しました。
一部のロールアップでは現在、トランザクションのバッチをイーサリアムに投稿するためにブロブを使用しています。
ブロブは (calldataと同様に) 変更不可能で非永続的ですが、約18日後に履歴からプルーニングされます。ブロブの詳細については、ダンクシャーディングを参照してください。
状態コミットメント
常に、オプティミスティック・ロールアップの状態 (アカウント、残高、コントラクトコードなど) は、「状態ツリー」と呼ばれるマークル・ツリーとして編成されます。ロールアップの最新の状態を参照するこのマークル・ツリーのルート (状態ルート) は、ハッシュ化されてロールアップ・コントラクトに保存されます。チェーン上のすべての状態遷移は新しいロールアップ状態を生成し、オペレーターは新しい状態ルートを計算することでそれにコミットします。
オペレーターは、バッチを投稿する際に、古い状態ルートと新しい状態ルートの両方を送信する必要があります。古い状態ルートがオンチェーン・コントラクト内の既存の状態ルートと一致する場合、後者は破棄され、新しい状態ルートに置き換えられます。
ロールアップのオペレーターは、トランザクションバッチ自体のマークル・ルートをコミットすることも求められます。これにより、誰でもマークル証明を提示することで、バッチ内 (L1上) にトランザクションが含まれていることを証明できます。
状態コミットメント、特に状態ルートは、オプティミスティック・ロールアップにおける状態変更の正確性を証明するために必要です。ロールアップ・コントラクトは、投稿された直後にオペレーターから新しい状態ルートを受け入れますが、後で無効な状態ルートを削除して、ロールアップを正しい状態に復元することができます。
不正証明
説明したように、オプティミスティック・ロールアップでは、有効性の証明を提供することなく、誰でもブロックを公開できます。ただし、チェーンの安全性を確保するために、オプティミスティック・ロールアップは誰でも状態遷移に異議を唱えることができる期間を指定しています。したがって、誰でもその有効性に異議を唱えることができるため、ロールアップ・ブロックは「アサーション (主張)」と呼ばれます。
誰かがアサーションに異議を唱えた場合、ロールアップ・プロトコルは不正証明の計算を開始します。すべてのタイプの不正証明はインタラクティブです。つまり、誰かがアサーションを投稿しなければ、別の人がそれにチャレンジすることはできません。違いは、不正証明を計算するために何回のインタラクションが必要かという点にあります。
シングルラウンドのインタラクティブ証明スキームは、L1上で異議を唱えられたトランザクションをリプレイして、無効なアサーションを検出します。ロールアップ・プロトコルは、検証者コントラクトを使用してL1 (イーサリアム) 上で異議を唱えられたトランザクションの再実行をエミュレートし、計算された状態ルートによって誰がチャレンジに勝つかが決定されます。ロールアップの正しい状態に関するチャレンジャーの主張が正しい場合、オペレーターは保証金をスラッシングされるというペナルティを受けます。
ただし、不正を検出するためにL1でトランザクションを再実行するには、個々のトランザクションの状態コミットメントを公開する必要があり、ロールアップがオンチェーンで公開しなければならないデータが増加します。トランザクションのリプレイには、多額のガス代もかかります。これらの理由から、オプティミスティック・ロールアップは、同じ目的 (つまり、無効なロールアップ操作の検出) をより効率的に達成するマルチラウンドのインタラクティブ証明に切り替えています。
マルチラウンドのインタラクティブ証明
マルチラウンドのインタラクティブ証明には、L1検証者コントラクトによって監視されるアサーター (主張者) とチャレンジャー間のやり取りのプロトコルが含まれ、最終的に嘘をついている当事者を決定します。L2ノードがアサーションにチャレンジした後、アサーターは異議を唱えられたアサーションを2つの等しい半分に分割する必要があります。この場合の個々のアサーションは、もう一方と同じ数の計算ステップを含みます。
次に、チャレンジャーはチャレンジしたいアサーションを選択します。分割プロセス (「バイセクション・プロトコル」と呼ばれます) は、両当事者が_単一_の実行ステップに関するアサーションについて争うようになるまで続きます。この時点で、L1コントラクトは命令 (およびその結果) を評価して不正な当事者を捕まえることで、紛争を解決します。
アサーターは、異議を唱えられた単一ステップの計算の有効性を検証する「ワンステップ証明」を提供する必要があります。アサーターがワンステップ証明を提供できない場合、またはL1検証者が証明を無効と見なした場合、アサーターはチャレンジに負けます。
このタイプの不正証明に関するいくつかの注意事項:
-
マルチラウンドのインタラクティブな不正証明は、紛争仲裁においてL1チェーンが行わなければならない作業を最小限に抑えるため、効率的であると考えられています。トランザクション全体をリプレイする代わりに、L1チェーンはロールアップの実行における1つのステップを再実行するだけで済みます。
-
バイセクション・プロトコルは、オンチェーンに投稿されるデータ量を削減します (すべてのトランザクションの状態コミットメントを公開する必要はありません)。また、オプティミスティック・ロールアップのトランザクションは、イーサリアムのガス・リミットに制約されません。逆に、トランザクションを再実行するオプティミスティック・ロールアップは、単一のイーサリアム・トランザクション内での実行をエミュレートするために、L2トランザクションのガス・リミットが低いことを確認する必要があります。
-
悪意のあるアサーターの保証金の一部はチャレンジャーに与えられ、残りの部分はバーンされます。バーンにより、バリデータ間の共謀が防止されます。2人のバリデータが共謀して偽のチャレンジを開始した場合でも、ステーク全体の大部分を没収されることになります。
-
マルチラウンドのインタラクティブ証明では、両当事者 (アサーターとチャレンジャー) が指定された期間内に行動を起こす必要があります。期限が切れる前に行動しなかった場合、不履行の当事者はチャレンジを放棄することになります。
オプティミスティック・ロールアップにおいて不正証明が重要な理由
不正証明は、オプティミスティック・ロールアップにおける_トラストレスなファイナリティ_を促進するため重要です。トラストレスなファイナリティとは、トランザクションが有効である限り、最終的に確認されることを保証するオプティミスティック・ロールアップの特性です。
悪意のあるノードは、偽のチャレンジを開始することで、有効なロールアップ・ブロックの確認を遅らせようとする可能性があります。しかし、不正証明は最終的にロールアップ・ブロックの有効性を証明し、それが確認されるようにします。
これは、オプティミスティック・ロールアップのもう1つのセキュリティ特性にも関連しています。チェーンの有効性は、_1つ_の誠実なノードの存在に依存しています。誠実なノードは、有効なアサーションを投稿するか、無効なアサーションに異議を唱えることで、チェーンを正しく進めることができます。いずれにせよ、誠実なノードと紛争を起こした悪意のあるノードは、不正証明プロセスの間にステークを失うことになります。
L1/L2のインターオペラビリティ
オプティミスティック・ロールアップは、イーサリアム・メインネットとのインターオペラビリティを考慮して設計されており、ユーザーはL1とL2の間でメッセージや任意のデータを渡すことができます。また、EVMと互換性があるため、既存の分散型アプリケーション (dapp)をオプティミスティック・ロールアップに移植したり、イーサリアムの開発ツールを使用して新しいdappを作成したりできます。
1. 資産の移動
ロールアップへの参加
オプティミスティック・ロールアップを使用するには、ユーザーはETH、ERC-20トークン、およびその他の受け入れ可能な資産をL1上のロールアップのブリッジ・コントラクトに預け入れます。ブリッジ・コントラクトはトランザクションをL2に中継し、そこで同額の資産がミントされ、オプティミスティック・ロールアップ上のユーザーが選択したアドレスに送信されます。
ユーザーが生成したトランザクション (L1からL2への預け入れなど) は通常、シーケンサーがロールアップ・コントラクトに再送信するまでキューに入れられます。ただし、検閲耐性を維持するために、オプティミスティック・ロールアップでは、許容される最大時間を超えて遅延した場合、ユーザーがオンチェーンのロールアップ・コントラクトに直接トランザクションを送信できるようになっています。
一部のオプティミスティック・ロールアップは、シーケンサーがユーザーを検閲するのを防ぐために、より直接的なアプローチを採用しています。ここでは、ブロックは、ロールアップ・チェーンで処理されたトランザクションに加えて、前のブロック以降にL1コントラクトに送信されたすべてのトランザクション (預け入れなど) によって定義されます。シーケンサーがL1トランザクションを無視した場合、(証明可能な) 誤った状態ルートを公開することになります。したがって、シーケンサーはL1に投稿されたユーザー生成メッセージを遅延させることはできません。
ロールアップからのエグジット
オプティミスティック・ロールアップからイーサリアムへの引き出しは、不正証明スキームのためにより困難です。ユーザーがL1にエスクローされた資金を引き出すためにL2からL1へのトランザクションを開始した場合、約7日間続くチャレンジ期間が経過するまで待つ必要があります。それでも、引き出しプロセス自体は非常に簡単です。
L2ロールアップで引き出しリクエストが開始された後、トランザクションは次のバッチに含まれ、ロールアップ上のユーザーの資産はバーンされます。バッチがイーサリアム上で公開されると、ユーザーはブロックにエグジット・トランザクションが含まれていることを検証するマークル証明を計算できます。その後は、遅延期間が経過するのを待ってL1でトランザクションをファイナライズし、メインネットに資金を引き出すだけです。
イーサリアムに資金を引き出す前に1週間待つことを避けるために、オプティミスティック・ロールアップのユーザーは流動性プロバイダー (LP) を利用できます。流動性プロバイダーは、保留中のL2引き出しの所有権を引き受け、(手数料と引き換えに) L1でユーザーに支払います。
流動性プロバイダーは、資金を解放する前に (チェーンを自分で実行することにより) ユーザーの引き出しリクエストの有効性を確認できます。このようにして、トランザクションが最終的に確認されるという保証 (つまり、トラストレスなファイナリティ) を得ることができます。
2. EVMの互換性
開発者にとって、オプティミスティック・ロールアップの利点は、イーサリアム仮想マシン (EVM)との互換性、あるいはさらに言えば等価性です。EVM互換のロールアップは、イーサリアムのイエロー・ペーパー (opens in a new tab)の仕様に準拠しており、バイトコードレベルでEVMをサポートしています。
オプティミスティック・ロールアップにおけるEVMの互換性には、以下の利点があります。
i. 開発者は、コードベースを大幅に変更することなく、イーサリアム上の既存のスマート・コントラクトをオプティミスティック・ロールアップ・チェーンに移行できます。これにより、開発チームがL2にイーサリアムのスマート・コントラクトをデプロイする際の時間を節約できます。
ii. オプティミスティック・ロールアップを使用する開発者やプロジェクトチームは、イーサリアムのインフラストラクチャを活用できます。これには、プログラミング言語、コードライブラリ、テストツール、クライアントソフトウェア、デプロイインフラストラクチャなどが含まれます。
既存のツールを使用することは重要です。なぜなら、これらのツールは長年にわたって広範に監査、デバッグ、および改善されてきたからです。また、イーサリアムの開発者がまったく新しい開発スタックでの構築方法を学ぶ必要もなくなります。
3. クロスチェーンのコントラクト呼び出し
ユーザー (外部所有アカウント) は、ロールアップ・コントラクトにトランザクションを送信するか、シーケンサーまたはバリデータに代行させることで、L2コントラクトと対話します。また、オプティミスティック・ロールアップでは、イーサリアム上のコントラクトアカウントが、L1とL2の間でメッセージを中継しデータを渡すブリッジング・コントラクトを使用して、L2コントラクトと対話することもできます。つまり、イーサリアム・メインネット上のL1コントラクトをプログラムして、L2オプティミスティック・ロールアップ上のコントラクトに属する関数を呼び出すことができます。
クロスチェーンのコントラクト呼び出しは非同期に行われます。つまり、呼び出しが最初に開始され、後で実行されます。これは、呼び出しがすぐに結果を生成するイーサリアム上の2つのコントラクト間の呼び出しとは異なります。
クロスチェーンのコントラクト呼び出しの例として、前述のトークンの預け入れがあります。L1上のコントラクトはユーザーのトークンをエスクローし、ペアになっているL2コントラクトにメッセージを送信して、ロールアップ上で同額のトークンをミントします。
クロスチェーンのメッセージ呼び出しはコントラクトの実行をもたらすため、送信者は通常、計算のためのガス代を負担する必要があります。ターゲットチェーンでトランザクションが失敗するのを防ぐために、高いガス・リミットを設定することをお勧めします。トークンのブリッジングのシナリオは良い例です。トランザクションのL1側 (トークンの預け入れ) は機能しても、L2側 (新しいトークンのミント) がガス不足で失敗した場合、預け入れは回復不能になります。
最後に、コントラクト間のL2からL1へのメッセージ呼び出しは遅延を考慮する必要があることに注意してください (L1からL2への呼び出しは通常、数分後に実行されます)。これは、オプティミスティック・ロールアップからメインネットに送信されたメッセージは、チャレンジ期間が終了するまで実行できないためです。
オプティミスティック・ロールアップのガス代はどのように機能するのか?
オプティミスティック・ロールアップは、イーサリアムと同様にガス代スキームを使用して、ユーザーがトランザクションごとに支払う金額を示します。オプティミスティック・ロールアップで請求される手数料は、以下の要素に依存します。
-
状態の書き込み: オプティミスティック・ロールアップは、トランザクションデータとブロック・ヘッダー (前のブロック・ヘッダーのハッシュ、状態ルート、バッチルートで構成される) を
blob、つまり「バイナリ・ラージ・オブジェクト (ブロブ)」としてイーサリアムに公開します。EIP-4844 (opens in a new tab)は、データをオンチェーンに含めるための費用対効果の高いソリューションを導入しました。blobは、ロールアップが圧縮された状態遷移データをイーサリアムL1に投稿できるようにする新しいトランザクションフィールドです。オンチェーンに永続的に残るcalldataとは異なり、ブロブは短命であり、4096エポック (opens in a new tab) (約18日) 後にクライアントからプルーニングできます。圧縮されたトランザクションのバッチを投稿するためにブロブを使用することで、オプティミスティック・ロールアップはL1へのトランザクション書き込みコストを大幅に削減できます。 -
使用されたブロブガス: ブロブを運ぶトランザクションは、EIP-1559 (opens in a new tab)で導入されたものと同様の動的料金メカニズムを採用しています。タイプ3トランザクションのガス代は、ブロブの基本料金を考慮に入れます。これは、ブロブスペースの需要と送信されるトランザクションのブロブスペースの使用量に基づいてネットワークによって決定されます。
-
L2オペレーター手数料: これは、イーサリアムのガス代と同様に、トランザクションの処理で発生する計算コストの補償としてロールアップノードに支払われる金額です。L2は処理能力が高く、イーサリアムのバリデータに高い手数料のトランザクションを優先させるようなネットワークの混雑に直面しないため、ロールアップノードはより低いトランザクション手数料を請求します。
オプティミスティック・ロールアップは、トランザクションのバッチ処理やcalldataの圧縮など、ユーザーの手数料を削減するためのいくつかのメカニズムを適用して、データ公開コストを削減します。イーサリアムベースのオプティミスティック・ロールアップを使用するのにかかるコストのリアルタイムの概要については、L2手数料トラッカー (opens in a new tab)を確認できます。
オプティミスティック・ロールアップはイーサリアムをどのようにスケーリングするのか?
説明したように、オプティミスティック・ロールアップは圧縮されたトランザクションデータをイーサリアム上で公開して、データ可用性を保証します。オンチェーンで公開されるデータを圧縮する機能は、オプティミスティック・ロールアップを使用してイーサリアムのスループットをスケーリングするために不可欠です。
メインのイーサリアム・チェーンは、ブロックが保持できるデータ量に制限を設けており、ガス単位で表されます (平均ブロックサイズは1500万ガスです)。これにより各トランザクションが使用できるガス量が制限されますが、トランザクション関連のデータを減らすことでブロックごとに処理されるトランザクションを増やすことができることも意味し、スケーラビリティを直接向上させます。
オプティミスティック・ロールアップは、トランザクションデータの圧縮を実現し、TPSレートを向上させるためにいくつかの手法を使用します。たとえば、この記事 (opens in a new tab)では、基本的なユーザー・トランザクション (イーサの送信) がメインネットで生成するデータと、同じトランザクションがロールアップで生成するデータ量を比較しています。
| パラメータ | イーサリアム (L1) | ロールアップ (L2) |
|---|---|---|
| ナンス | ~3 | 0 |
| ガス価格 | ~8 | 0-0.5 |
| ガス | 3 | 0-0.5 |
| 宛先 (To) | 21 | 4 |
| 値 (Value) | 9 | ~3 |
| 署名 | ~68 (2 + 33 + 33) | ~0.5 |
| 送信元 (From) | 0 (署名から復元) | 4 |
| 合計 | ~112バイト | ~12バイト |
これらの数値を大まかに計算すると、オプティミスティック・ロールアップによってもたらされるスケーラビリティの向上を示すのに役立ちます。
- すべてのブロックのターゲットサイズは1500万ガスであり、1バイトのデータを検証するには16ガスかかります。平均ブロックサイズを16ガスで割る (15,000,000/16) と、平均的なブロックは937,500バイトのデータを保持できることがわかります。
- 基本的なロールアップ・トランザクションが12バイトを使用する場合、平均的なイーサリアム・ブロックは78,125件のロールアップ・トランザクション (937,500/12) または39個のロールアップバッチ (各バッチが平均2,000件のトランザクションを保持する場合) を処理できます。
- イーサリアムで15秒ごとに新しいブロックが生成される場合、ロールアップの処理速度は約5,208トランザクション/秒になります。これは、イーサリアム・ブロックが保持できる基本的なロールアップ・トランザクションの数 (78,125) を平均ブロックタイム (15秒) で割ることで計算されます。
オプティミスティック・ロールアップのトランザクションがイーサリアムのブロック全体を占めることはあり得ないことを考えると、これはかなり楽観的な見積もりです。しかし、オプティミスティック・ロールアップがイーサリアムユーザーにどれだけのスケーラビリティの向上をもたらすことができるかについての大まかなアイデアを提供できます (現在の実装では最大2,000 TPSを提供します)。
イーサリアムへのデータ・シャーディングの導入により、オプティミスティック・ロールアップのスケーラビリティが向上することが期待されています。ロールアップ・トランザクションは他の非ロールアップ・トランザクションとブロックスペースを共有する必要があるため、その処理能力はメインのイーサリアム・チェーンのデータ・スループットによって制限されます。ダンクシャーディングは、高価で永続的なCALLDATAの代わりに、より安価で非永続的な「ブロブ」ストレージを使用することで、L2チェーンがブロックごとにデータを公開するために利用できるスペースを増やします。
オプティミスティック・ロールアップの長所と短所
| 長所 | 短所 |
|---|---|
| セキュリティやトラストレス性を犠牲にすることなく、スケーラビリティを大幅に向上させます。 | 潜在的な不正チャレンジによるトランザクションのファイナリティの遅延。 |
| トランザクションデータはレイヤー1チェーンに保存されるため、透明性、セキュリティ、検閲耐性、および分散化が向上します。 | 中央集権的なロールアップのオペレーター (シーケンサー) がトランザクションの順序付けに影響を与える可能性があります。 |
| 不正証明はトラストレスなファイナリティを保証し、誠実な少数派がチェーンを保護できるようにします。 | 誠実なノードが存在しない場合、悪意のあるオペレーターが無効なブロックと状態コミットメントを投稿して資金を盗む可能性があります。 |
| 不正証明の計算は、特別なハードウェアを必要とする有効性の証明 (ZKロールアップで使用) とは異なり、通常のL2ノードに開かれています。 | セキュリティモデルは、少なくとも1つの誠実なノードがロールアップ・トランザクションを実行し、無効な状態遷移にチャレンジするために不正証明を送信することに依存しています。 |
| ロールアップは「トラストレスなライブネス」の恩恵を受けます (誰でもトランザクションを実行し、アサーションを投稿することでチェーンを強制的に進めることができます)。 | ユーザーは、イーサリアムに資金を引き出す前に、1週間のチャレンジ期間が終了するのを待つ必要があります。 |
| オプティミスティック・ロールアップは、チェーン上のセキュリティを高めるために、適切に設計された暗号経済的インセンティブに依存しています。 | ロールアップはすべてのトランザクションデータをオンチェーンに投稿する必要があり、コストが増加する可能性があります。 |
| EVMおよびSolidityとの互換性により、開発者はイーサリアムネイティブのスマート・コントラクトをロールアップに移植したり、既存のツールを使用して新しいdappを作成したりできます。 |
オプティミスティック・ロールアップの視覚的な説明
視覚的に学ぶ方が好きですか?Finematicsによるオプティミスティック・ロールアップの説明をご覧ください。
オプティミスティック・ロールアップに関する参考文献
- オプティミスティック・ロールアップはどのように機能するのか (完全ガイド) (opens in a new tab)
- アービトラム必須ガイド (opens in a new tab)
- イーサリアムのロールアップ実践ガイド (opens in a new tab)
- イーサリアムL2における不正証明の現状 (opens in a new tab)
- オプティミズムのロールアップは実際にはどのように機能するのか? (opens in a new tab)
- OVMの詳細な解説 (opens in a new tab)
- オプティミスティック仮想マシンとは? (opens in a new tab)
チュートリアル: イーサリアム上のオプティミスティック・ロールアップとブリッジ
- オプティミズム標準ブリッジ・コントラクトのウォークスルー – L1とL2の間で資産を移動するためのオプティミズム標準ブリッジの注釈付きコードウォークスルー。