什麼是 EIP-7702 委託?EOA 智慧帳戶解析

更新時間 2026-10-30 06:09:35
閱讀時長: 5m
EIP-7702 委派會將 EOA 的程式碼欄位寫入 0xef0100 加上受委派地址,因此帳戶在自身情境中執行受委派者的程式碼時,仍保有原本的地址與私鑰。0x04 類型交易會攜帶授權元組,委派會持續有效,直到被覆寫或撤銷。

EIP-7702 委託可讓外部擁有帳戶(EOA)在不變更地址或交出私鑰的情況下,將其執行邏輯交由另一份合約處理。程式碼欄位會設為 0xef0100 加上受託地址,後續呼叫會在 EOA 自身的上下文中執行該程式碼,而餘額、Nonce 與儲存空間仍屬於該帳戶。

本文適合已了解自託管錢包與 EVM 帳戶模型的讀者。Ethereum 長期以來有兩類帳戶:由私鑰控制的 EOA,以及包含程式碼的合約帳戶;只有後者可以承載自訂驗證邏輯,但代價是必須使用新地址。此功能隨 Pectra 升級推出,將自訂驗證從建立新帳戶,改為在既有使用中的地址上寫入程式碼。

一個授權元組包含 6 個欄位,而委託指示器占用 23 位元組:3 位元組前綴加上 20 位元組地址。寫入路徑、新能力的限制、與 ERC-4337 的區隔,以及受託方是否可信,將決定帳戶在簽署後可保留多少控制權。

重點摘要

  • EIP-7702 委託會保留地址、私鑰、餘額與 Nonce,僅將程式碼欄位指向受託合約。

  • 類型 0x04 交易會透過授權元組寫入委託;簽署訊息不包含費用欄位,且交易發送者不必是帳戶擁有人。

  • 委託沒有到期日;撤銷會清除程式碼,但不會清除儲存空間、代幣授權或 Permit 簽名。

  • 若受託合約未實作 receive() 或 fallback(),一般 ETH 轉帳將會回復,而 tx.origin 也不再代表帳戶沒有程式碼。

  • ERC-4337 建立獨立的帳戶系統,而 EIP-7702 則為既有 EOA 新增程式碼,因此兩者可以搭配使用。

EIP-7702 委託會如何改變外部擁有帳戶?

Ethereum 有兩類帳戶:由私鑰控制的外部擁有帳戶,以及包含程式碼的合約帳戶。

使用 EIP-7702 後,改變的是程式碼欄位,而非帳戶身分。這是因為 EOA 可以暫時指向合約程式碼,而無須變更其地址。地址、私鑰、餘額與 Nonce 都維持原狀;差別在於,該地址現在帶有從另一份已部署合約取得的可執行程式碼。

該欄位包含一個 23 位元組的委託指示器:0xef0100 前綴加上 20 位元組地址。當呼叫以該 EOA 為目標時,EVM 會讀取此指示器並載入受託方的程式碼。因此,帳戶可以表現得像智慧帳戶,同時仍由私鑰控制,且發送者、餘額與儲存空間皆會以 EOA 身分讀取。

受託方無法存取自身狀態;其執行邏輯會從目標合約載入,但儲存空間與發送者上下文仍屬於 EOA,寫入操作也會依相同邏輯寫入 EOA 原本未使用過的儲存空間。

簽名仍由原始私鑰產生,因此帳戶不會變成多簽錢包。此設計是朝向帳戶抽象化邁進的一步,包括原生帳戶抽象化,而非改變帳戶類型。

類型 0x04 與授權元組:委託如何連接至合約程式碼

寫入委託需要新的交易類型 0x04,其交易內容包含授權清單;每個元組均由帳戶持有人簽署,但交易本身可以由任何地址發送與支付費用,而授權會指定帳戶允許執行哪一份程式碼。

元組為 [chain_id, address, nonce, y_parity, r, s],簽署訊息為 keccak(0x05 || rlp([chain_id, address, nonce]));EIP-7702 規格使用 0x05 前綴,將授權簽名與一般交易簽名區隔開來,且該訊息不包含 Gas 或費用欄位。

簽署的內容是程式碼應指向哪個地址,而非某筆特定交易,因此有些系統會改為將授權與意圖搭配使用。帳戶也可以離線簽署一次,再由贊助方預先支付 Gas。

節點驗證分為 6 個步驟,其中 Nonce 綁定會使一項授權只能在對應 Nonce 下使用一次。

授權清單會如同存取清單擴展交易格式般納入交易內容:鏈 ID 為 0 或與本地鏈相符(0 代表可在任何鏈上有效);Nonce 小於 2^64–1;ecrecover 驗證簽名;帳戶程式碼為空或已經委託;Nonce 與目前數值相符;最後將程式碼寫為 0xef0100 || address,並遞增 Nonce。

撤銷會沿用相同流程,僅需將地址設為零,即可清除程式碼雜湊,而不會對底層 EOA 造成永久狀態變更。

哪些帳戶屬性維持不變?

4 項屬性會維持原狀,只有程式碼與儲存空間會改變:程式碼會從 0x 變為指示器,未使用的儲存空間槽位開始接受寫入,而這些數值在撤銷後仍會保留。規格另外列出 3 項不再成立的鏈上不變條件,涵蓋餘額、Nonce 與呼叫者身分;相關風險將於後文說明。

  1. 地址:維持不變,因此歷史紀錄、代幣授權與名稱記錄仍會指向同一地址。

  2. 私鑰:維持不變,且可簽署一般交易,以及用於覆寫或撤銷委託的新授權。

  3. 餘額:維持不變,因為委託不會移轉任何資產,帳戶仍直接持有資產。

  4. Nonce:持續遞增,因為授權會消耗一個 Nonce,從而防止相同簽名遭重放。

已委託帳戶仍可正常接收 ETH 嗎?

預設不行。帳戶一旦帶有程式碼,一般 ETH 轉帳便會進入程式碼執行路徑;若受託方未實作 receive() 或 fallback(),轉帳將會回復,資金也會退回發送者。

此問題可能出現在交易所提現、薪資發放與空投等常見付款流程中。錢包軟體通常只會回報失敗,而不會指出原因在於受託方。簽署前,請確認目標已實作接收函式,或透過包含 calldata 的呼叫接收款項;錢包軟體也應更清楚地向使用者提示此原因。

EIP-7702 委託寫入路徑:EOA 簽署授權元組,類型 0x04 交易寫入 0xef0100 受託程式碼,後續呼叫則在 EOA 上下文中執行受託方

圖 1。EIP-7702 寫入路徑:EOA 簽署授權元組,類型 0x04 交易將程式碼設為 0xef0100 加上受託地址,後續呼叫則在 EOA 的上下文中執行該程式碼。

已委託帳戶可以做什麼?批次處理、Gas 贊助與復原

委託可讓原本只能簽署交易的 EOA,對日常使用者而言表現得像智慧帳戶,其中最明顯的優勢包括批次處理、Gas 贊助與基於規則的復原。

批次處理是最具體的優勢:授權與兌換可以在單筆交易中完成。贊助方也可以透過在適當時機於背景協助完成多個步驟,簡化新用戶導入或批次操作,因此一次簽名即可一次結算,中間不會留下未使用的授權。

Gas 贊助來自將簽名與發送者分離:第三方支付費用,帳戶無須預先持有 ETH;搭配 ERC-4337 Paymaster 時,費用可由應用程式承擔。這也代表某些應用程式可在背景處理 Gas 或簡化新用戶導入,但開發者應避免在使用者僅是要求使用其他功能時提示其進行委託。

復原與工作階段金鑰仰賴受託方自行驗證簽名,例如以 Passkey、監護人集合或支出限額取代單一金鑰。受託方也可以針對轉帳或簽署者使用情況執行類似政策的功能。

界線很明確:持有私鑰的人始終可以簽署新的授權以覆寫委託,因此此處的復原能力弱於原生智慧帳戶,僅能降低遺失金鑰所造成的成本。

委託沒有到期日。它會持續有效,直到新的授權覆寫它,或以零地址撤銷為止,因此此權限具有長期效力,且需要主動管理。從安全角度來看,請檢視受託程式碼能夠存取及控制的範圍。

EIP-7702 委託與 ERC-4337 及帳戶抽象化有何不同?

EIP-7702 會為既有 EOA 新增程式碼,而 ERC-4337 則建立獨立的帳戶系統。兩者皆為帳戶抽象化的互補方式,可以疊加使用,而非彼此取代。

面向 EIP-7702 委託 ERC-4337 智慧帳戶
地址來源 重複使用既有 EOA 地址 新部署的合約,由工廠合約與 Salt 設定
程式碼載體 程式碼欄位中的 23 位元組指示器 帳戶合約自身的位元組碼
與 EntryPoint 的關係 無;由一般交易執行 透過 EntryPoint 打包的 UserOperations 執行
遷移成本 無;一次授權即可 部署後再移轉資產與授權
簽署流程 金鑰簽署元組;任何人皆可發送 合約中的自訂驗證,由 Bundler 打包

ERC-4337 從新部署的合約開始,因此資產與授權需要跨地址移轉;7702 則從原始地址開始並新增程式碼,使既有帳戶無須先部署獨立錢包,即可使用智慧合約行為,從而避免遷移。

兩者搭配時,可讓 7702 帳戶作為 ERC-4337 的帳戶實作,開發者也能在經 7702 委託的帳戶上建立相容於 4337 的流程。這會重新引入初始化競爭問題:在委託上鏈與初始化完成之間,任何人都可以呼叫初始化函式並將自己設為擁有人。

有兩種解法:initWithSig,將簽名綁定至初始化參數;或限制僅能由 EntryPoint 進行初始化。

受託方可信嗎?如何驗證其不可變性

僅應委託給使用標準 CREATE2 initcode 部署的不可變合約;驗證機制應優先選擇沒有升級路徑的目標,因為代理合約、可升級合約,以及具有自毀路徑的合約,都不是理想的委託目標。

委託會將執行權限交給該程式碼,持有人不會收到任何變更通知。可升級目標代表升級者對所有委託給它的帳戶都握有執行權限;不可變目標至少能預先固定攻擊面,使其可接受審計。若受託程式碼可在授權後變更,安全風險就會提高。

不可變程式碼、無代理與可重現部署這 3 項條件,會在區塊鏈瀏覽器中轉化為錢包與開發者在授予委託前應驗證的 4 項檢查:

  1. 讀取實作與管理員槽位:以 0x360894 開頭的非零 EIP-1967 槽位,代表存在代理或升級路徑。

  2. 將鏈上位元組碼與已驗證原始碼比較,確認建構函式參數與已部署位元組碼相符。

  3. 搜尋 selfdestruct 與 delegatecall,確認不存在可清除程式碼或將執行轉送至其他位置的分支。

  4. 依 initcode 與 Salt 重新計算 CREATE2 地址,確認部署者無法在不同地址替換為另一份合約。

EIP-7702 委託有哪些風險?

風險主要存在於 3 個面向:受託方的錯誤、委託改變的帳戶語意,以及一次性簽名的不可逆性。這不僅是功能升級,也是一種安全取捨;主要問題在於,一旦授權,程式碼可控制帳戶的範圍相當廣泛。

風險 觸發條件 後果與應對方式
受託方存在錯誤 任意呼叫或提款路徑 資產可能被抽走;僅委託給經審計的合約
一般轉帳回復 沒有 receive() 或 fallback() ETH 流入失敗;透過 calldata 呼叫傳送款項
儲存空間衝突 不同實作在不同時間使用 舊儲存資料被錯誤讀取;切換前檢查槽位配置
chain_id 設為 0 簽署時將鏈 ID 寫為 0 簽名可在其他鏈上有效;應按鏈分別簽署
tx.origin 假設失效 msg.sender == tx.origin 的重入保護 程式碼可在呼叫堆疊中執行;使用重入鎖

tx.origin 這一項的影響範圍最廣。已委託帳戶可以在呼叫堆疊內執行程式碼,因此 msg.sender == tx.origin 不再代表呼叫者沒有程式碼,而基於此比較建立的保護措施將不再有效;nonReentrant 或暫存儲存空間鎖不依賴呼叫者身分。

實務上,若錢包未清楚顯示授權詳情,使用者可能會核准自己原本無意檢視的存取權。Pectra 文件中的 EIP-7702 指引對此另有說明。

chain_id 為 0 會擴大第 3 類風險:同一個簽名可在其他 EVM 鏈上有效,因此帳戶可能在持有人從未考慮過的鏈上被寫入程式碼。簽署裝置往往不會顯示鏈 ID,這正是在冷錢包上啟用委託所涉及的安全取捨。

如何檢查及撤銷委託?

檢查只需讀取一次程式碼:eth_getCode 回傳 0x 代表未委託;回傳以 0xef0100 開頭的 23 位元組,代表該帳戶是已委託的外部擁有帳戶;其他位元組碼則代表它是合約帳戶。

委託屬於鏈層級狀態,因此同一地址可以在某條鏈上已委託,而在另一條鏈上未變更,每條鏈都需要分別檢查。最後 20 位元組為受託方地址;錢包或平台可自動化跨鏈檢查,並保留狀態檢查或變更紀錄以供審計與監控。

如需快速手動檢查,檢查及撤銷委託說明了相關流程。

撤銷需在錢包內進行:簽署一份地址欄位設為零的新授權後,節點會清除程式碼雜湊,讓帳戶回復為一般 EOA。外部 dApp 通常無法代替持有人執行此操作;若錢包團隊支援撤銷流程,任何代表持有人操作的請求仍應要求持有人自行核准。

撤銷會移除受託程式碼,但不會移除先前的智慧合約授權或已授予應用程式的其他存取權。OpenZeppelin 的 EOA 委託說明界定了這項界線。

總結

EIP-7702 只需一次簽名,即可為 EOA 提供可程式化能力:地址與金鑰維持不變,程式碼欄位指向受託方,且執行會在帳戶自身的上下文中進行。

其代價是語意改變與長期權限:一般入帳可能失敗,tx.origin 不再代表 EOA,chain_id 為 0 的簽名可跨鏈使用,而撤銷只會清除程式碼。

常見問題

EIP-7702 會將我的錢包變成多簽錢包嗎?

不會。委託只會變更程式碼欄位,簽名仍由原始私鑰產生,因此單一金鑰持有人可獨立交易,也可透過新授權覆寫委託。即使受託方要求多個簽名,也可由該金鑰繞過。

如何檢查我的錢包是否已在 EIP-7702 下委託?

對該地址呼叫 eth_getCode。回傳 0x 代表未委託;回傳以 0xef0100 開頭的 23 位元組,代表該帳戶已委託,最後 20 位元組為受託方;其他位元組碼則代表合約帳戶。

委託會按鏈記錄,因此請逐一檢查各條鏈,錢包或管理系統也可能保留這些檢查紀錄供檢閱。簡言之,不同錢包的介面細節可能不同,但底層程式碼檢查方式相同。

如何撤銷 EIP-7702 委託?

在錢包內簽署一份地址欄位設為零的新授權,驗證通過後節點會清除程式碼雜湊。僅帳戶持有人可簽署此授權,外部 dApp 通常無法代為操作。

委託會到期嗎?先前的代幣授權在撤銷後是否仍有效?

委託沒有到期日,會持續有效直到被覆寫或撤銷。撤銷只會清除程式碼,儲存空間、ERC-20 授權與 Permit 簽名則不受影響。

我的金鑰從未外洩,惡意的 EIP-7702 授權仍可能抽走帳戶資產嗎?

是的。簽名是權限的移轉:攻擊者可藉此寫入指向惡意合約的委託,並獲得帳戶的廣泛存取權,無須接觸私鑰即可移轉資產。

請檢查元組中的鏈 ID 與目標地址,並只為不可變合約簽署。錢包團隊在代表組織授予內部委託相關核准前,也應驗證簽署者的職責。

作者: Jayne
免責聲明

* 投資有風險,入市須謹慎。本文不作為 Gate 提供的投資理財建議或其他任何類型的建議。

* 在未提及 Gate 的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate 有權追究其法律責任。

相關文章

Pendle vs Notional:DeFi 固定收益協議對比分析
中級

Pendle vs Notional:DeFi 固定收益協議對比分析

Pendle 和 Notional 是 DeFi 固定收益賽道中極具代表性的兩大協議,但兩者採用不同的收益實現模式。Pendle 以 PT 與 YT 收益拆分機制,為用戶帶來固定收益及收益交易功能;Notional 則透過固定利率借貸市場,協助用戶鎖定借貸利率。相較之下,Pendle 更適合進行收益資產管理與利率交易,Notional 則聚焦於固定利率借貸應用場景。兩者共同推動 DeFi 固定收益市場的成長,但在產品架構、流動性設計及目標用戶層面各具特色。
2026-04-21 07:34:06
什麼是 Pendle 的 PT 和 YT?深入解析收益拆分機制
中級

什麼是 Pendle 的 PT 和 YT?深入解析收益拆分機制

Pendle 的 PT 和 YT 是 Pendle 協議中的兩種核心收益代幣。PT(Principal Token)代表收益資產的本金部分,通常會以折價進行交易,並於到期時依面值贖回;YT(Yield Token)則代表該資產未來產生的收益權,可用於交易未來收益預期。Pendle 透過將收益資產拆分為 PT 和 YT,建立了 DeFi 領域中的收益交易市場,讓用戶能夠鎖定固定收益、參與收益率變化的投機,並有效管理收益風險。
2026-04-21 07:18:16
0x Protocol 的核心組成有哪些?Relayer、Mesh 及 API 架構詳解
新手

0x Protocol 的核心組成有哪些?Relayer、Mesh 及 API 架構詳解

0x Protocol 以 Relayer、Mesh 網路、0x API 和 Exchange Proxy 等核心元件,打造去中心化交易基礎設施。Relayer 負責鏈下訂單廣播,Mesh 網路用於訂單共享,0x API 提供統一流動性報價介面,Exchange Proxy 則負責鏈上交易執行與流動性路由。這些元件協同運作,實現鏈下訂單傳播與鏈上交易結算的架構,讓錢包、DEX 及 DeFi 應用可透過單一介面存取多元流動性來源。
2026-04-29 03:06:50
0x Protocol vs Uniswap:訂單簿協議與 AMM 模型有何不同?
中級

0x Protocol vs Uniswap:訂單簿協議與 AMM 模型有何不同?

0x Protocol 與 Uniswap 都是用於去中心化資產交易的協議,但兩者採用截然不同的交易機制。0x Protocol 主要以鏈下訂單簿與鏈上結算的架構為基礎,透過聚合多元流動性來源,為錢包與 DEX 提供交易基礎設施;而 Uniswap 則採用自動做市商(AMM)模型,利用流動性池完成鏈上資產兌換。兩者最大的差異在於流動性的組織方式。0x Protocol 更強調訂單聚合與交易路由效率,適合為各類應用提供底層流動性支持;Uniswap 則透過流動性池直接為用戶提供兌換服務,更適合作為鏈上交易執行平台。
2026-04-29 03:48:20
Cardano vs 以太坊:兩大主流智能合約平台的本質差異
新手

Cardano vs 以太坊:兩大主流智能合約平台的本質差異

Cardano 與以太坊的最大不同,體現在帳本架構與開發哲學:Cardano 採用源自比特幣並經改良的 EUTXO 模型,注重形式化驗證與學術嚴謹;以太坊則以帳戶模型為基礎,作為智能合約領域的先驅,更強調生態系統的快速迭代與兼容性。
2026-03-24 22:09:11
Aztec vs Zcash vs Tornado Cash:三種隱私機制的核心差異深度解析
新手

Aztec vs Zcash vs Tornado Cash:三種隱私機制的核心差異深度解析

Zcash、Tornado Cash 與 Aztec 分別代表區塊鏈隱私的三種典型路徑:隱私公鏈、混幣協議,以及隱私 Layer2。Zcash 以 zkSNARK 實現匿名支付,Tornado Cash 透過混幣方式切斷交易關聯,Aztec 則運用 zkRollup 打造可編程的隱私執行環境。三者在技術架構、功能範圍與合規性上各具特色,展現隱私技術從「單點工具」逐步發展為「基礎設施」的趨勢。
2026-04-17 07:40:34