実験を通して理解するOP Stackのトランザクション料金の特徴

実験を通して理解するOP Stackのトランザクション料金の特徴

Published
English Version
準備中
Tags

先日、EthereumのDencunアップグレードによって、EIP-4844という提案が実装されました。この提案は、新しいトランザクションタイプを導入することでrollupのトランザクション料金を安くすること、ひいては、Ethereumのスケーリングを促進することを目的としたものです。

ちょうどいい機会ですので、今回のブログでは、OP Stackのトランザクション料金の特徴について取り上げたいと思います。もちろん、OP Mainnetはrollupですので、Dencunアップグレードの恩恵を受けています。詳細な解説をする前に、まずは簡単な実験から始めてみましょう。

実験

目的

今回の実験では、複数種類のトランザクションの料金を計測することによって、OP Stackのトランザクション料金の特徴を明らかにすることを目的とします。特に、横軸にトランザクションが消費したガス、縦軸にトランザクション料金をとったプロットによって、どんな相関が現れるのかを考察していきます。もし、Ethereumのようにトランザクション料金がガス消費量とガス単価の積で計算されるのであれば、プロットは原点を通る直線を描くはずです。

計測時期は、Dencunアップグレードの前と後の2回です。これにより、EIP-4844がトランザクション料金の特徴にどんな影響を与えたのかも考察することを目的とします。

実験方法

測定するトランザクションは、以下の3種類です。

  1. 自分のアカウントに0 ETHを送金するトランザクション
  2. 1のトランザクションに、「1234567890」という文字列をエンコードしたデータをinput dataとして付与したトランザクション
  3. 1のトランザクションに、「1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890」という文字列をエンコードしたデータをinput dataとして付与したトランザクション
Figure 1: 測定に使用したトランザクションの例.
Figure 1: 測定に使用したトランザクションの例.

トランザクションを発行するときに指定するガス単価は0.1 Gweiとします。付与するinput dataは、Rabby Walletの仕様で人間が判読可能な(エンコード前の)文字列しか指定できませんでした。

また、EthereumメインネットのBase Feeの変動による影響を抑えるために、トランザクションの測定順は「1→2→3→1→2→3→1→2→3」とそれぞれ3回測定し、その平均値をデータとして採用しました。測定回数が少ないため、標準偏差等を用いた検討は実施せず、平均値を算出する前に各測定のばらつきが十分に小さいことを確認しました。

実験結果

まず、2024年2月12日に1回目の測定を実施しました。これはDencunアップグレード前ですね。その結果、Figure 2のようなプロットを描きました。目的で述べたように、Ethereumのトランザクション料金は原点を通る直線を描くので、横軸の範囲は0からとし、原点を確認できるようにしています。

Figure 2: Dencunアップグレード前のトランザクション料金の測定結果.
Figure 2: Dencunアップグレード前のトランザクション料金の測定結果.

Figure 2からは、プロットは原点を通る直線とならずに、2や3のトランザクション料金が急激に高騰していることがわかりました。

次に、2024年3月18日に2回目の測定を実施しました。これはDencunアップグレード後ですね。その結果、Figure 3のようなプロットを描きました。Figure 2と比べて、線形近似したときに何だか原点を通りそうなプロットになりましたね。ちなみに、線形近似をするとFigure 4のようになります。やはり、2や3のトランザクション料金が、消費したガスに比べて高くなる傾向にあります。2や3のトランザクションは文字列がinputされていたので、この傾向はinputされた文字列に起因している可能性があります。

Figure 3: Dencunアップグレード後のトランザクション料金の測定結果.
Figure 3: Dencunアップグレード後のトランザクション料金の測定結果.
Figure 4: Dencunアップグレード後のトランザクション料金の測定結果と線形近似.
Figure 4: Dencunアップグレード後のトランザクション料金の測定結果と線形近似.

考察

以上の結果から、次のようなことがわかりました。

  1. OP Stackのトランザクション料金は、消費したガスに比例しなかった。
  2. 1の原因として、トランザクションにinputされた文字列の長さや有無が示唆された。
  3. 1の傾向は、Dencunアップグレード前では顕著に現れた。

OP Stackのトランザクション料金

はたして、実験からわかったことは正しかったのでしょうか。実際にOP Stackのトランザクション料金の仕組みをなぞっていき、理解を深めていきましょう。

二段階構造をとるトランザクション料金

OP Stackのトランザクション料金は、次の2つを足し合わせたものです。

  • Execution Gas Fee
  • L1 Data Fee

Execution Gas Feeは、L2でトランザクションを実行するためのガス代です。OP StackはEIP-1559に準拠した料金モデルを使用しており、L1と同様、需要が高まるとBase Feeも高騰します。実験で指定した0.1 Gweiという数値は、このExecution Gas Feeのガス単価を指定するものです。

それに対して、L1 Data FeeはOP StackのトランザクションをEthereumに公開するために必要なコストです。OP MainnetはOptimistic Rollupですので、トランザクションのデータがL1に公開されなければなりません。そのための費用がL1 Data Feeです。この料金はトランザクション実行時にネットワークが自動的にアカウントから差し引きます。

OP MainnetがL1に支払う料金

まず、OP Mainnetを維持するために、どんな名目でL1にトランザクションを発行しているのか見てみましょう。OP StackのドキュメントにはTransaction Flowというページがあり、理解の助けになります。このページの図を引用しましょう。

Figure 5: Transaction Flow (OP Stackのドキュメントより引用).
Figure 5: Transaction Flow (OP Stackのドキュメントより引用).

Figure 5からわかるように、op-batcherが圧縮されたトランザクションのバッチを、op-proposerがステートコミットメントをL1に提出しています。当然、両者ともにL1にETHの支払いが発生します。

この様子をエクスプローラで見てみましょう。op-batcherこのアドレスにトランザクションのバッチを提出しています。Ecotone(EIP-4844に対応するためのOptimismのアップグレード)前のトランザクションであれば、calldataにデータが書き込まれているのが確認できます。Ecotone後はblobを使用しているため、データを書き込んでいる様子がblobscanでから確認できます。op-proposerも同様に、ステートルートを提出している様子がこちらから確認できます。現在はfault proofsが有効になっているため、dispute gameコントラクトがデプロイされ続けています。

次に、どのぐらい支払っているのか見てみましょう。このDuneダッシュボードは、OP Mainnetのオンチェーンコストの内訳を表しています。Ecotone前は約98%がL1 Calldata Feesを占めていましたが、Ecotone後はL1 Overhead FeesとL1 State Outputsが全体のほとんどを占めています。つまり、二段階構造のトランザクション料金のうち、Ecotone前ではL1 Data Feeが大きな負担だったのが、Ecotone後はL1 Data Feeがほとんどかからなくなったことを示唆しています。これらのオンチェーンコストは決められた計算式によってユーザに転嫁されていたので、トランザクション料金にもこの特徴が現れていました。

Figure 6: Share of Total Onchain Costs by Contributor (oplabspbcのDune dashboardより引用).
Figure 6: Share of Total Onchain Costs by Contributor (oplabspbcのDune dashboardより引用).

L1 Data Feeの計算式

OP StackのL1 Data Feeは、Ecotoneの前後によって計算方法が異なります。

Ecotone前の場合

最後に、現在のEthereumのBase Feeを乗じることで、最終的なL1 Data Feeが計算されます。

Ecotone後の場合

さらに、base feeとblob base feeに対して、それぞれスカラーが掛け合わされ、重み付けされたガス価格が求められます。

最終的なL1 Data Feeは、圧縮後のサイズと重み付けされたガス価格の積として表されます。

Ecotoneの前後も、OP Stackのトランザクション料金を決定づける主なパラメータは、L1の混雑状況、トランザクションデータのサイズ、あとは任意に設定されるパラメータとなっています。

実験結果と結びつける

実験では、文字列がinputされたトランザクションの料金の高騰が、特に2024年2月12日の測定では顕著に現れました。OP Mainnetはこのトランザクションを圧縮してL1に提出しなければならず、inputした文字列のデータもL1に保存しなければなりませんでした。Ecotone前は、オンチェーンコストのうちほとんどをL1 Calldata Feesが占めていたこと、そして、このコストは決められた計算式によってユーザに転嫁されていたことから、文字列がinputされたトランザクションの料金は高騰しFigure 2のようなプロットを描く結果となりました。

次に、Ecotone後ではこれらのデータの保存としてblobが使用されるようになったので、L1 Data Feeはほとんどかからなくなり、Figure 3のようなプロットを描くようになりました。それでもオンチェーンコストは発生してしまい、ユーザにある程度のコストを転嫁する必要があるため、プロットは原点を通る直線とはなりませんでした。

さいごに

このブログを通して、OP Stackのトランザクション料金の特徴と、EIP-4844やDencunアップグレードがこの特徴にどのように影響を与えたかを明らかにすることができました。実験から得られた結果は、OP Stackのトランザクション料金がEthereumとは異なる動きを示すことを示唆しています。

特に、トランザクションにinputされたデータの量が料金に与える影響は興味深いものでした。Ecotoneアップグレードによって(特に容量の大きな)トランザクションのコストが大幅に削減されたことはユーザにとっても嬉しいですし、Ethereumのスケーリングにも大きく寄与するものです。

次回のブログの更新は未定ですが、本ブログシリーズでは引き続きOptimismについて取り上げていきますので、楽しみにしててくださいね。Stay Optimistic🔴✨️

参考文献

※ Optimismの公式リソースに関しては、著者の記載を省略しています。