EIP-7702:EOAへのコード委任とリスク
EIP-7702がEOAからデプロイ済みコードを参照する仕組み、type-4認可が署名する内容、確認すべき権限とリスクを解説します。
このガイドの内容EIP-7702は鍵ではなく、実行経路を変える
短い要約
EIP-7702では、既存の外部所有アカウント(EOA)がデプロイ済みコードを指すマーカーを設定できます。アドレスと秘密鍵は変わりませんが、アカウントへの呼び出しで、その権限を使ってコードが実行されることがあります。制限された権限や安全性が標準で保証されるわけではありません。署名前に対象コードと管理者を確認してください。
EIP-7702は鍵ではなく、実行経路を変える
通常のEOAは秘密鍵でトランザクションに署名し、自分のアドレスに実行コードを持ちません。EIP-7702では、別のアドレスにデプロイ済みのコードを参照し、アカウントの実行コンテキストで動かせます。コードは別の場所にありますが、使われるアドレス、残高、ストレージは委任元アカウントのものです。新しいコントラクトアドレスへの移行や鍵の交換ではありません。
EIP-7702仕様はtype-4 set-codeトランザクションとauthorization listを定義します。Ethereum.orgのPectraガイドも、デプロイ済みコードへのポインターとして説明しています。ウォレットの「スマートアカウント」表示だけでは、実際の検証ルール、復旧手段、委任先コードは分かりません。誰がコードを変更できるか、資産やストレージに何ができるかを確認しましょう。
type-4には別途署名されたauthorization listが含まれる
set-codeトランザクションはtype byte 0x04で識別されます。各認可タプルにはchain ID、コードアドレス、認可元アカウントのnonce、タプルを承認する署名が入ります。認可元がauthorizationに署名し、送信者は外側のトランザクションに別途署名します。両者は異なるアカウントでも構いません。
chain IDは通常、認可を1つのチェーンに限定します。値0はEIP-7702対応チェーンでの広い適用範囲を許しますが、どこでも成功する保証ではありません。nonceとアカウント状態も一致する必要があります。署名画面のネットワーク、アカウント、完全な対象アドレスを信頼できるブロックエクスプローラーと照合してください。nonceなどの検証に失敗したタプルは処理されないことがあります。
Ethereum.orgのトランザクション資料はtype-4の認可リストを説明しています。外側の取引には引き続きgas条件と手数料負担者があります。type-4はスマートアカウントガイドのERC-4337 UserOperationやpaymasterとは別の仕組みです。
委任マーカーはコードを含まず、コードを指す
EOAのコードには0xef0100の接頭辞と対象アドレスからなるマーカーが設定されます。クライアントはこれを認識し、呼び出し時に対象アドレスのコードを読み込みます。アカウントのアドレスと実行コードのアドレスは異なるので、両方確認してください。
コードは委任を使う現在のチェーンから読み込まれます。同じ20バイトのアドレスでも、チェーンごとに異なるコード、またはコードなしの場合があります。委任コードはアカウントの実行コンテキストで動き、ストレージを使えます。実装次第でETHやトークンの送付、外部コントラクトの呼び出し、保存値の変更も可能です。EIP-7702自体は「このトークンだけ」といった制限を加えません。proxyなら管理者と更新権限も調べます。
委任コードはアカウントに広い権限を持ち得る
検証の欠陥は資産移動、トークン承認、任意の外部呼び出し、ストレージ変更につながり得ます。EIPのセキュリティ考慮事項は、リプレイ対策、対象、calldata、ETH value、gas条件を署名に結び付ける必要性を説明しています。これらが欠けると、スポンサーなどが意図と異なる呼び出しを送ったり、失敗を起こしたりする可能性があります。
アカウントが呼べるコントラクト、署名検証方法、緊急停止やアップグレード権限の保有者、デプロイ済みコードと検証済みソースの一致を確認します。監査済みという表示は、依頼画面の正確なアドレスや版が監査対象だった証明ではありません。トークン承認とスワップをまとめる場合は両方の呼び出しを読み、承認額を必要な量に制限します。
外側の実行が失敗しても委任が残ることがある
EIP-7702は外側のトランザクション実行前にauthorization listを処理します。仕様では、その後に実行が失敗またはrevertしても、処理済みの委任マーカーはロールバックされません。失敗のreceiptだけでアカウント状態が元に戻ったと思わず、receiptと現在のアカウントコードを別々に確認してください。
認可は適用された一方で、後続の初期化呼び出しが失敗することがあります。この場合、設定が完了しなくても委任は有効なままかもしれません。再送信の前にトランザクションハッシュ、認可元、nonce、コードの参照先を照合してください。nonceが変わると以前の署名は使えなくなる場合があります。
委任を消しても他の状態は消えない
新しいauthorizationで別のコードを指定できます。null addressへの認可はマーカーを削除してアカウントコードを空にしますが、ストレージ、ERC-20コントラクトのallowance、完了済み送金、外部コントラクトの変更は消しません。トークン承認は別途確認して取り消してください。
新しいコードが古いストレージを異なる意味で読むこともあります。変更前にストレージ配置と移行計画を確認しましょう。allowanceについてはトークン承認ガイド、鍵やシードが漏れた場合はウォレット復旧ガイドを参照してください。コードを消しても秘密鍵は復旧しません。
署名前にチェーン、対象、失敗後の状態を確認する
選択したネットワークでウォレットがEIP-7702をサポートするか公式資料で確認します。chain ID、アカウント、対象アドレス、検証済みコード、proxy管理者を照合します。authorizationの署名と、外側取引の送信者・手数料負担者を区別してください。スポンサーがいることはコードの安全性を意味しません。
委任が既に有効なら、取引状態だけでなく現行マーカーとコードアドレスを調べます。想定と違えば追加の呼び出しや承認を止めます。手数料はEthereum gasガイド、nonceや保留取引は保留取引ガイドで確認できます。
プロトコルの機能とウォレットの約束を分ける
EIP-7702はEOAをデプロイ済みコードにつなぐトランザクション形式を標準化します。呼び出しの一括化、手数料スポンサー、セッション権限、復旧は個別のコードやサービスに依存します。Ethereum FoundationのPectraメインネット告知はauthorizationの置き換えや取り消しを説明します。ERC-4337のUserOperationやpaymasterは別の仕組みです。
「スマートアカウント」という表示だけでは、鍵の保有者、コード更新者、復旧方法の管理者は分かりません。実装、設定、チェーン対応を確認してから資産のあるアカウントを変更してください。このガイドは仕組みを説明するもので、特定のウォレットや委任先は推奨しません。
よくある質問
Q1EIP-7702はEOAを一般的なスマートコントラクトウォレットに変えますか?
EOAからデプロイ済みコードへ呼び出せますが、特定のウォレット方針、復旧、権限設定は自動で追加されません。
Q2authorization署名とtype-4取引の署名は同じですか?
いいえ。認可元は対象、chain ID、nonceに署名し、送信者は外側の取引を別に署名します。
Q3委任を消すとトークン承認も取り消されますか?
いいえ。allowanceはトークンコントラクト側に別途記録されています。個別に確認して取り消してください。
Q4委任先で何を確認しますか?
現在のチェーン上の正確なアドレスとコード、検証済みソース、更新管理者、資産とストレージへの権限を確認します。
出典
問題を報告
この記事のリンクを含むメールを準備します。送信すると Mark に報告が届きます
クイックチェック
記事を読み終えたら、3問で確認しましょう
問題 01
有効なauthorizationを処理した後、外側の実行がrevertすると何が起こり得ますか?
答えを選ぶと解説を確認できます