こんにちは、ブロックチェーンチームでソフトウェアエンジニアをしている id:odan3240 です。 来月に予定されている Ethereum Berlin Upgrade の調査を行う中で発見した EIP-2718: Typed Transaction Envelope が、Ethereum の未来を感じさせる提案だったので紹介します。
EIP-2718 の提案内容
EIP-2718 は新しいトランザクションタイプを定義する提案(以下「この提案」と呼びます)です。
この提案での有効なトランザクション (Transaction
) とトランザクションのレシート (Receipt
) の定義は次の通りです。||
はバイト列の結合演算子です。
Transaction
:TransactionType || TransactionPayload
とLegacyTransaction
のどちらかReceipt
:TransactionType || ReceiptPayload
とLegacyReceipt
のどちらか
LegacyTransaction
/LegacyReceipt
はどちらも従来の Ethereum のトランザクションとトランザクションのレシートの定義です。
TransactionType
はトランザクションのタイプを識別するための 0 から 127 までの128通りの数字です。
TransactionPayload
/ReceiptPayload
はそのトランザクションタイプの payload です。
EIP-2718 のモチベーション
この提案以前ではトランザクションを拡張する場合は後方互換性を保つ必要がありました。例えば EIP-155: Simple replay attack protection では secp256k1 の署名の v の値に chainId を考慮した値を加算することで、要件を満たしつつ後方互換性を実現しました。この提案では TransactionType
の値でトランザクションを判別するため、後方互換性を気にする必要がなくなります。
そのため以前では、トランザクションの data の構造を自由に設定できることを活かして EIP-712: Ethereum typed structured data hashing and signing や EIP-1613: Gas stations network などが提案されてきました。今回の提案によりトランザクションの構造についても自由に設定することができるようになり、トランザクションレベルでのマルチシグトランザクションの実装などが可能になります。
EIP-2718 を応用する提案
この提案を使って新しいトランザクションタイプを定義している提案を紹介します。
EIP-1559: Fee market change for ETH 1.0 chain
ガスの支払いを変更する提案です。maxInclusionFeePerGas
や maxFeePerGas
などのパラメータがトランザクションに追加されています。
EIP-2711: Sponsored, expiring and batch transactions.
以下の3つのトランザクションタイプを提案しています。
- Sponsored Transactions: トランザクションの送信者とガスを支払う人を分離可能
- Batch Transactions: 複数のトランザクションをまとめて実行可能
- Expiring Transactions: トランザクションに有効期限を設定可能
EIP-2733: Transaction Package
トランザクションの success や gas_used などの実行情報を次のトランザクションに渡せるようにする提案です。
EIP-2930: Optional access lists
トランザクションがアクセスする予定のあるアドレスとストレージを事前に渡せるようにする提案です。事前申告されたアドレス以外にアクセスするとコストが増加します。
EIP-2938: Account Abstraction
コントラクトが EOA と同様に料金の支払いやトランザクションの実行ができるようにする提案です。
EIP-2972: Wrapped Legacy Transactions
従来のトランザクションタイプをこの提案の形式で定義し直す提案です。chainId が明示的にトランザクションのパラメータに含まれています。
EIP-2976: Typed Transactions over Gossip
devp2p が新しいトランザクションタイプを受け入れるようにする提案です。
終わりに
EIP-2718 はこれまで固定だったトランザクションの構造を可変にする提案で、その紹介をしました。トランザクションの構造が柔軟になることによってこれまでなかった提案がされ Ethereum の自由度は更に高まっています。特に EIP-1559 からは目が離せないですね。