[EIP3651] COINBASEアドレスアクセスの最適化の提案を理解しよう！

# はじめに

初めまして。
**CryptoGames**というブロックチェーンゲーム企業でエンジニアをしている **cardene（かるでね）** です！
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームは**クリプトスペルズ**というブロックチェーンゲームです。

https://cryptospells.jp/

今回は、トランザクションの実行開始時にCOINBASEアドレスを予め読み込み、トランザクションのキャンセルや実行の効率化を図る提案をしている**EIP3651**についてまとめていきます！

:::note info
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://eips.ethereum.org/EIPS/eip-3651

他にも様々なEIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

# 概要

ブロックチェーンやスマートコントラクトに関連するトランザクションの実行コンテキストを指しています。
簡単に説明すると、「`COINBASE`アドレスは、そのアカウントを読み込む実際のコストに応じて、トランザクション実行の開始時に**warm**（準備が整っている状態）でなければならない」と述べています。

ブロックチェーンでは、「`COINBASE`アドレス」とは、新しいブロックを生成したマイナーに報酬を支払うためのアドレスを指します。
この報酬は新しいトークンの形であり、ネットワークに貢献するインセンティブを提供します。

「**トランザクションの実行**」とは、スマートコントラクトの関数を呼び出すか、あるアドレスから別のアドレスへトークンを送るなどの操作を指します。
トランザクションはブロックに含まれ、マイナーによってブロックチェーンに追加されます。

「**warm**である」という表現は、準備が整っている状態を意味します。
`COINBASE`アドレスがトランザクションの実行開始時に使用可能で、関連するコスト（例えば、ガス代）を支払う準備ができている状態を指しています。

:::note info
「**warm**」と「**cold**」という用語は、主に暗号資産（仮想通貨）の保管方法に関連しています。
これらの用語は、資産のセキュリティレベルとアクセシビリティのバランスを示すために使われます。

### ウォームアドレス（Warm Address）
ウォームアドレスは、オンラインとオフラインの中間に位置する保管方法です。
これらのアドレスはインターネットに接続されているデバイスに保管されることが多いですが、日常的な取引には使用されず、セキュリティ対策が施されていることが一般的です。
ウォームアドレスは、比較的高いセキュリティを保ちつつも、必要に応じて資産にアクセスできるようにするための妥協点として機能します。

### コールドアドレス（Cold Address）
コールドアドレスは、インターネットから切り離された状態で暗号資産を保管する方法を指します。
これは、ハードウェアウォレットや紙のウォレットなど、物理的なデバイスに保管することを意味します。
コールドアドレスは最高レベルのセキュリティを提供しますが、資産にアクセスするためには追加の手順が必要になるため、利便性は低下します。
この方法は、大量の資産を長期間保管する場合や、高いセキュリティが要求される状況に適しています。

### 比較
- **セキュリティ**
    - コールドアドレスはウォームアドレスよりもセキュリティが高いです。
    - インターネットに接続されていないため、ハッキングのリスクが非常に低くなります。
- **アクセシビリティ**
    - ウォームアドレスはコールドアドレスよりもアクセスしやすいです。
    - インターネットに接続されているため、迅速に取引や資産の確認が可能です。
- **使用シナリオ**
    - コールドアドレスは、大量の資産を安全に保管したい場合や、長期投資に適しています。
    - 一方、ウォームアドレスは、比較的少額の資産を保管し、時々アクセスする必要がある場合に適しています。

総じて、ウォームアドレスとコールドアドレスの選択は、セキュリティと利便性のバランス、および個々のニーズに基づいて行われます。
:::

「**実際のコストに応じて**」とは、ブロックチェーン上での操作には通常、「**ガス**」と呼ばれる手数料がかかり、このガス代はトランザクションの複雑さやネットワークの混雑状況によって変動します。
したがって、`COINBASE`アドレスは、これらのコストをカバーできるだけの資金を持っている必要があります。

:::note info
トランザクションを実行する時には、報酬を受け取るアドレスがトランザクションのコストを支払う準備ができている必要があると言っています。
これは、スムーズなトランザクションの実行とネットワークの効率的な運用を保証するために重要です。
:::

# 動機

### Direct COINBASE Payments
「**Direct COINBASE payments**」は、マイナー（ブロックを生成するノード）への直接支払いを指します。
これにより、「**条件付き支払い**」が可能になり、トランザクションが失敗した場合に自動的に取り消されるなどのメリットがあります。
これは、不要なトランザクションをネットワークに送信しないことで、効率を高めることができます。

### Access List Framework & EIP-2929
**EIP2929**（Ethereum Improvement Proposal 2929）は、イーサリアムのガスコストを再構成する提案です。
この提案により、「**アクセスリストフレームワーク**」が導入され、スマートコントラクトやアカウントへのアクセス時に初回のガスコストが増加しました。
これは、特定のアドレスやストレージキーがトランザクションの一部として「**warm**」（すでに読み込まれている状態）か「**cold**」（まだ読み込まれていない状態）かを区別するためです。

:::note info
**EIP2929**については以下の記事を参考にしてください。
:::

https://qiita.com/cardene/items/ca94d8fd0159bb3cc9fb

### Gas Cost Mismatch & Overpricing COINBASE Access
「`COINBASE`アドレスへのアクセスが過大評価されている」とは、このアドレスへのアクセスに必要なガスコストが、実際の利用価値に比べて高すぎるという意味です。
アクセスリストフレームワークにより、`COINBASE`アドレスは初期状態で「**cold**」と見なされ、アクセスには高いガスコストがかかります。

### Incentivizing Alternative Payments
ガスコストの不一致は、ETH以外の支払い方法（例えば**ERC20**トークンなど）を促進する可能性があります。
しかし、イーサリアム上でのトランザクションの主要な支払い手段としてETHが使われるべきだという主張があります。
これは、ネットワークの標準化と簡素化を促進し、イーサリアムの基本的な価値提案を支持するためです。

:::note info
イーサリアム上でのトランザクションの効率とコストに関する問題を指摘しています。
**Direct COINBASE payments**は効率的なトランザクション実行を可能にしますが、**EIP2929**によるアクセスリストフレームワークは`COINBASE`アドレスへのアクセスコストを不当に高くしています
これにより、ETH以外の支払い手段が促進される可能性がありますが、イーサリアムの基本的な使用法としてはETHがトランザクションの主要な支払い手段であるべきです。
:::

# 仕様

トランザクション実行の開始時における特定のプロトコルの動作に関する説明です。
具体的には、イーサリアムのようなブロックチェーン技術におけるトランザクション処理の初期段階について言及しています。

### トランザクション実行の開始
ブロックチェーンネットワーク上でトランザクション（つまり、あるアドレスから別のアドレスへの送金、スマートコントラクトの呼び出しなど）が処理され始める瞬間を指します。
このプロセスには、トランザクションデータの検証、ガスコストの計算、スマートコントラクトの実行などが含まれます。

### accessed_addressesの初期化
ブロックチェーンの処理過程で特定のアドレスセット（この場合は「`accessed_addresses`」と呼ばれる）が準備され、特定の値で始まることを意味します。
このセットは、トランザクションの実行中にアクセスされるアドレスのリストを追跡するために使用されます。
これは、トランザクションの処理に関連するセキュリティや効率性を高めるために重要です。

### COINBASEアドレス
「`COINBASE`」とは、ブロックチェーンネットワークで新しいブロックを採掘（マイニング）した際に、そのブロックを生成したマイナーに報酬を与えるための特別なトランザクションを指します。
`COINBASE`アドレスは、その報酬が送られるアドレスです。
このアドレスは、ネットワークのマイニングプロセスの一部として自動的に生成されます。

### 0x41
「`0x41`」とは、特定のアドレスまたは値を指す16進数表記です。
`COINBASE`アドレスを指しています。

# 補足

トランザクションの検証と実行の過程で、特定のアドレスが予め「**warm**」（すなわち、事前に読み込まれている状態）として初期化されるべきであると説明しています。
ここで言及されているアドレスには特定の役割があり、トランザクションの処理において重要です。

### ORIGINアドレス
トランザクションを生成した元のアカウントのアドレスを指します。
トランザクションの検証開始時には、このアドレスが既に読み込まれている必要があります。
これは、トランザクションを開始するアカウントが必要なガス料金を支払うための十分な残高を持っているかどうかを確認するためです。
ガス料金は、トランザクションの実行に必要な計算リソースの量に応じて算出されるため、この確認はトランザクションが実行される前に必須です。

### tx.toアドレス
トランザクションの宛先アドレス、つまりトランザクションによってETHが送られる先や、スマートコントラクトの関数が呼び出されるアドレスを指します。
このアドレスもトランザクションの実行を開始するためには初期段階で読み込まれている必要があります。

### COINBASEアドレス
ブロックのマイニング報酬やトランザクション手数料が支払われるアドレスです。
マイナーが新しいブロックをブロックチェーンに追加する時に受け取る報酬がこのアドレスに送られます。
このアドレスはトランザクションの処理においても重要であり、トランザクションの検証開始時には既に読み込まれているべきです。

:::note info
トランザクションの処理において、特定のアドレスはトランザクションの検証開始時点で予め読み込まれている（**warm**状態である）必要があります。
これにより、トランザクションの効率的な検証と実行が可能となります。
`ORIGIN`アドレスはガス料金の支払い能力を確認するため、`tx.to`アドレスはトランザクションの宛先として、そして`COINBASE`アドレスは報酬と手数料の受取先として、それぞれ事前に読み込まれている必要があります。
:::

# 互換性

この変更による互換性の問題は知られていません。

# セキュリティ

この変更によって生じるセキュリティ上の問題はありません。

# 引用

William Morriss (@wjmelements), "EIP-3651: Warm COINBASE," Ethereum Improvement Proposals, no. 3651, July 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3651.

# 最後に

今回は「トランザクションの実行開始時にCOINBASEアドレスを予め読み込み、トランザクションのキャンセルや実行の効率化を図る提案をしている**EIP3651**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4