EIP3074ってなに?
- EOAへの追加機能という、長年の夢
- EOAがコントラクトをデプロイすることなく、コントラクトウォレットのような機能を利用できるようになる
- まだレビューレベル。夢だけがある
具体的には?
- 1つのトランザクションで複数のトランザクションを扱うことができる
- ガスなしでEOAからERC20やNFTをtransferすることができる
- AAみたいなことがEOAから可能、わざわざコントラクトをデプロイする必要なし
- コントラクトが_msgSender()を使ってなくてもOK、古いERC20でも問題なし
どうやって?
新しいオペコードが2つ追加される。
この2つのオペコードを利用し、ユーザはEOAの制御権をインボーカーと呼ばれるコントラクトに委任することができる。
なお、ガス代はインボーカーが支払うことになる。
AUTH
ECDSA署名に基づいてauthorizedコンテキスト変数を設定する。
AUTHCALL
authorizedアカウントとしてコントラクトをコールする。ユーザに変わってコントラクト操作を実行できる。
インボーカーコントラクトをもう少し詳しく
ユーザが信頼するインボーカーにEOAを使って署名することにより、インボーカーはEOA署名ずみメッセージやAUTHオペコードを使ってEOAを制御し、AUTHCALLでEOAに変わってコントラクト操作を行う。
多分みた感じ、EOAが署名をすることによって、コントラクトのmsg.senderを擬似的にEOAのアドレスにすることができる状態でコントラクトの関数を実行できる的な感じかなぁとおもう。
当たり前だが、インボーカーコントラクトは信用を得るため、アップグレード可能であってはならない。
懸念点は?
- インボーカーコントラクトにEOAの制御権を委任することで、悪意のあるコントラクトによる資金の盗難などのリスクが高まる
- 「require(msg.sender == tx.origin)」のようなチェックがコントラクト側になされている場合、AUTHCALLの仕様と相性が悪い
その他
- 将来的には、EOAだけではなく、コントラクトからも同様のことができるように設計されている
- AUTHのメッセージフォーマットにcommitと呼ばれる領域があり、ここにはユーザのトランザクション呼び出し値のハッシュが格納される
- 複数のトランザクションの呼び出し値のハッシュを格納することも可能
- インボーカーとEOAの関係を成り立たせるために、二つの手法が存在する
- 新しいトランザクションタイプを導入する
- つい先日もblob用のトランザクションタイプが作成されたのは、記憶に新しい
- この方法はクライアントに大きな変更を要する
- AAと互換性がない
- インボーカーのアカウントを使った署名が必要になるが、AAはコントラクトがsender扱いになるため、不可能。
- EVMにアカウントなりすまし機能を導入する
- AAと互換性ができてよき
- 新しいトランザクションタイプを作るより、大きな変更が伴わない
所感
最初の導入はEthereum mainnetだけだろうか、他のL2とかでも早く導入されると色々プロダクトの幅が広がるかなと思う。
参考リンク
EIP-3074: AUTH and AUTHCALL opcodes
Allow externally owned accounts to delegate control to a contract.
https://eips.ethereum.org/EIPS/eip-3074
Komy | Kyuzan on Twitter / X
📰EIP3074が承認され、次回のアップデートPectraに含まれる予定 🗣EIP3074見てみたけど、一言でいうと「EOAをスマートコントラクトウォレットのように扱える」という感じ。(EOAは秘密鍵に紐づいたウォレット)… pic.twitter.com/Jv4wcEBAQc— Komy | Kyuzan (@ryoheikomy) April 13, 2024
https://twitter.com/ryoheikomy/status/1779065074214412635
twitter.com
https://twitter.com/i/bookmarks/all?post_id=1778553572059136215