L2でかかるガス代の実態

## 目次
1. はじめに
1.1. ガス代とは
1.2. L2とは
1.3. 今回の調査対象
2. L2のガス代
2.1. L2でのガス代の種類
2.2. 調査対象のネットワークで実際にかかるガス代
3. まとめ

## 1. はじめに
ブロックチェーンにはガス代と呼ばれるものが存在します。このガス代に関する技術としてレイヤー2（以下「L2」と表記）と呼ばれるブロックチェーンのスケーリング技術の1つが存在し、L2を使うことでガス代を1/10程度に削減できると言われていますが、その実態はどうなのかを調査した結果をまとめます。

### 1.1. ガス代とは
ブロックチェーン上で取引を実行する際の手数料のことをガス代と言います。
ブロックチェーンでは取引内容を記録する際に、取引内容が正しいことをネットワークの参加者に検証してもらう仕組みになっており、ガス代はその検証作業を行う人たちへの報酬として支払われるために必要なものとなっています。このような取引内容の検証やガス代の仕組みがあることによって、第三者による不正行為やネットワークへの攻撃を防ぐことができるため、ガス代はセキュリティ面でもブロックチェーン運用の一助となっています。

### 1.2.  L2とは
ブロックチェーンはトランザクションを処理することで取引内容を記録しますが、ブロックチェーンが1秒間に処理できるトランザクション数には限りがあります。そのため、ユーザ数や使用量が急増すると処理の待機時間が長くなり、また手数料も高くなります。これをスケーラビリティ問題と言います。
L2はこの問題を解決するために作られた追加層で、分散性やセキュリティを犠牲にすることなく、トランザクションのスループットを高めることが目的とされています。L2のネットワークには様々な種類が存在しますが、基本的にはオフチェーンでトランザクションを処理し、複数のトランザクションを1つのブロックにまとめてL1（レイヤー1：Ethereumなどのブロックチェーン）に送信します。L2のネットワークごとに、L1に送信する情報や取引内容の検証方法が異なります。

### 1.3. 今回の調査対象
L2でかかるガス代について、価格の実態とネットワークごとに違いがあるかを併せて調査します。L2BEAT ([https://l2beat.com/](https://l2beat.com/)) という、EthereumのL2スケーリングに関する分析と研究を行っているサイトがあり、ここで公開されているL2ネットワークは現時点（2024年8月末）で73種類存在します。今回は中でも特に資産が多く、開発も進んでいるものとして、**OP Mainnet**と**Arbitrum One**を調査対象とします。
![L2BEAT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/7485cd75-65ff-43b5-4924-030b5572fd8e.png)

## 2. L2のガス代
### 2.1. L2でのガス代の種類
L2でかかるガス代には以下の3種類があり、それぞれ支払者、支払先が異なります。

| ガス代の種類 | 支払者 | 支払先 |
|:------------|:------|:------|
| L2でのトランザクション実行 | L2ユーザ | L2 |
| L1へのロールアップ | L2のシーケンサなど | L1 |
| ブリッジの実行  | Deposit: L1ユーザ <br> Withdraw: L2ユーザ | L1, L2 |

### 2.2. 調査対象のネットワークで実際にかかるガス代
OP MainnetとArbitrum Oneで、それぞれ各ガス代がどれぐらいかかるのか実際のトランザクション履歴をもとに調査しました。

#### OP Mainnet
- L2でのトランザクション実行
OP Mainnetでのトランザクション実行にかかるガス代は、OP Mainnet Explorer ([https://optimistic.etherscan.io/](https://optimistic.etherscan.io/)) のトランザクション履歴を参考にしました。下図の「L2 Fees Paid」部分に記載されている価格が対象となります。
![OP Mainnet_transaction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/5a3da67d-5859-7d03-1a0f-ec9d5a491d1f.png)
  <br>
- L1へのロールアップ
L1へのロールアップにかかるガス代は、上図の「L1 fees Paid」部分に記載されている価格が対象となります。L2でのトランザクション履歴に記載されていることから分かるように、L1へのロールアップにかかるガス代は、L2でのトランザクション実行時に徴収されます。
OP MainnetではL1へのロールアップが実行される際に、Stateを更新するバッチとデータを送信するバッチの2種類のバッチが実行されています。このうち、Stateを更新するバッチは、複数のトランザクションを1つのブロックにまとめて実行されるため、1回のState更新バッチの実行に必要なガス代は、「トランザクション履歴に記載されている1件ごとのガス代」を「1つのブロックにまとめられているトランザクション数」分だけ合計した総額になります。「1つのブロックにまとめられているトランザクション数」は多く、算出が困難になるため、今回は以下のように算出することにします。
    ```
    （1回のState更新バッチの実行に必要なガス代）=
    （トランザクション履歴に記載されている1件分のガス代の平均価格）×（1つのブロックにまとめられているトランザクション数
    ```
    このように算出するガス代で、ロールアップにかかるガス代が賄えているのかどうかもトランザクション履歴をもとに調査しました。
    
    **State更新バッチ**
    Stateを更新するバッチに含まれるトランザクションの履歴をもとに、徴収されるガス代の総額を算出します。L2で処理された1つのBlockを対象として、Blockに含まれるトランザクションの履歴から平均を算出し、比較対象としたバッチのL1でのトランザクション履歴に含まれるトランザクションの件数が32,579件だったため、この件数を掛けて総額を算出しました。総額は「0.002730297742282310(ETH)」（※1）となっています。
    ![OP Mainnet_gas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/6d5acc39-c99b-f688-6bb2-7923f1199b40.png)
    比較対象としたStateを更新するバッチのL1でのトランザクション履歴は下図の通りで、かかったガス代は「0.001144833042135084(ETH)」（※2）となっています。L1でのトランザクション履歴は、Etherscan ([https://etherscan.io/](https://etherscan.io/)) を参考にしました。
    ![Etherscan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/8388d271-f724-a8b1-2483-1211152c522c.png)
    
    **データ送信バッチ**
    データを送信するバッチにかかるガス代は、Stateを更新するバッチと紐づくデータを送信するバッチがどれに当たるかを判断する方法がないため、L1でのトランザクション履歴をもとに概算で算出します。データを送信するバッチは、1時間あたり7~10件のトランザクションが処理されているため、5件分のガス代を元に平均を算出し、「ガス代が賄えているのか」を調査するため、多めの10件を掛けた値を総額として使用します。総額は「0.001431418645744320(ETH)」（※3）となっています。
    ![OP Mainnet_dataGas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/af07e03e-cc97-c910-7741-207a473f67e1.png)<br>

    **比較**
    上記で算出したL2のトランザクション実行時に徴収されるL1のガス代（①）と、L1のトランザクション実行にかかるガス代（②）を比較します。①のガス代（※1）は「0.002730297742282310(ETH)」であるのに対して、②のガス代はState更新バッチの実行にかかるガス代（※2）とデータ送信バッチの実行にかかるガス代（※3）を合計したものであり、「0.002576251687879400(ETH)」となりました。
①>②となっていることから、ロールアップにかかるガス代はL2のトランザクション実行時に徴収するL1のガス代で賄えると言えそうです。
  <br>
- ブリッジの実行
OP Mainnet Explorerのトランザクション履歴から、DepositとWithdrawを実行した履歴を調査し、平均値を求めると以下のようになりました。L1へのロールアップに必要なState更新バッチやデータ送信バッチにかかるガス代ほど高くはないものの、件数が増えればもちろん金額は大きくなります。基本的には、L2での取引を開始するときと終了するときに必要となるものだと思いますが、ガス代を抑えることを検討する上では、DepositとWithdrawの処理が極力少なくなるように考える必要がありそうです。
![OP Mainnet_bridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/8746083e-888f-5756-ee96-ddef74a5b318.png)

#### Arbitrum One
- L2でのトランザクション実行
Arbitrum Oneでのトランザクション実行にかかるガス代は、Arbitrum One Explorer ([https://arbiscan.io/](https://arbiscan.io/)) のトランザクション履歴を参考にしました。下図の「Network Fee」部分に記載されている価格が対象となります。
![Arbitrum One_transaction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/afee191c-a4f7-b873-b1bb-9214abc51c94.png)
  <br>
- L1へのロールアップ
L1へのロールアップにかかるガス代は、上図の「Poster Fee」部分に記載されている価格が対象となります。L2でのトランザクション履歴に記載されていることから分かるように、Arbitrum OneでもL1へのロールアップにかかるガス代は、L2でのトランザクション実行時に徴収されます。
Arbitrum Oneでは、Stateの更新とデータの送信でバッチを分けていないため、ロールアップで実行されるバッチは1種類です。このバッチも、OP Mainnetと同様に複数のトランザクションを1つのブロックにまとめて実行されるため、OP Mainnetと同様にガス代を算出し、ロールアップにかかるガス代が賄えているのかどうかをトランザクション履歴をもとに調査しました。<br>
    **L2**
    OP Mainnetと同様にトラザクションの履歴からガス代の平均値を算出し、比較対象としたバッチのL1でのトランザクション履歴に含まれるトランザクションの件数が6,078件だったため、この件数を掛けて総額を算出しました。総額は「0.000963346792000000(ETH)」（※4）となっています。
    ![Arbitrum One_gas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/1b98f72d-9eb5-833c-7525-ef71a5b125ac.png)

    **L1**
    比較対象としたバッチのL1でのトランザクション履歴は下図の通りで、かかったガス代は「0.000860481309508725(ETH)」（※5）となっています。
    ![Etherscan2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/4a846a21-f71e-023e-f9c1-2527bd0041e6.png)

    **比較**
上記で算出したL2のトランザクション実行時に徴収されるL1のガス代（③）と、L1のトランザクション実行にかかるガス代（④）を比較します。③のガス代（※4）は「0.000963346792000000(ETH)」であるのに対して、④のガス代（※5）は「0.000860481309508725(ETH)」となりました。
③>④となっていることから、Arbitrum Oneにおいてもロールアップにかかるガス代はL2のトランザクション実行時に徴収するL1のガス代で賄えると言えそうです。
  <br>
- ブリッジの実行
Arbitrum One Explorerのトランザクション履歴から、DepositとWithdrawを実行した履歴を調査し、平均値を求めると以下のようになりました。OP Mainnetと同様に、L1へのロールアップにかかるガス代ほど高くはありませんが、OP MainnetよりもArbitrum Oneの方が少し高くなっています。ガス代を抑えることを検討する上では、DepositとWithdrawの処理が少なくなるように考えることはもちろん、どのL2を使うのが良いのか検討する必要がありそうです。
![Arbitrum One_bridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872090/0e26fe35-ed2d-95ab-243b-81087774ae65.png)

## 3. まとめ
L2でかかるガス代について、OP MainnetとArbitrum Oneでの実際のトランザクション履歴をもとに具体的な価格を調査しました。
L2でかかるガス代のうち、ブリッジの実行にかかるガス代はトランザクションごとに必要となるものではないため、その他2種類のガス代を合計したものをL2でかかるガス代として、L1のガス代と比較してみます。
L2ガス代：
　OP Mainnet：0.000009957479199482(ETH) =「State更新バッチ」の表にある「total(ETH)」の平均（※★）
　Arbitrum One：0.000001569170666667(ETH) =「L2」の表にある「total(ETH)」の平均（※☆）
L1ガス代：
　0.000049251862344128(ETH) = L1でのトランザクションの実行にかかるガス代は、もちろん処理の内容によって異なるが、2024/09/06 11:02に実行されたトランザクション10件分の平均値を算出
この結果を見ると、OP MainnetではL1の1/10までは削減できないものの2/10程度に削減できていることが分かります。一方、Arbitrum Oneでは1/10以上で3/100程度に削減できていることが分かります。
OP MainnetとArbitrum Oneのどちらも開発中のL2ネットワークであり、不正行為を証明するチャレンジ期間がまだ完全には導入されていないため、開発が進むにつれて追加でかかるガス代が出てくるかもしれませんが、今の段階ではL2のネットワークを利用することでガス代を削減できると言えそうです。