僅供教育參考,不構成投資建議;投資可能產生損失。
直接答案
帳戶式模型將執行狀態表示為以位址為鍵的資料。在以太坊執行層中,帳戶葉節點包含 [nonce, balance, storageRoot, codeHash]。原生 balance 以 wei 計價;合約資料位於該帳戶 storageRoot 所指向的儲存空間;區塊執行後的 stateRoot 則承諾最終形成的世界狀態。錢包、RPC 服務商或區塊瀏覽器只負責讀取並解讀這些狀態,並不代替使用者保存規範帳本上的餘額。
ERC-20 餘額、授權額度、借貸債務與擔保品通常是合約儲存中的值,不是持有人協定帳戶上的額外欄位。同樣地,瀏覽器所稱的「內部交易」通常是透過執行追蹤還原的 EVM 訊息呼叫,並不是擁有獨立交易雜湊與傳送方 nonce 的另行簽章以太坊交易。
傳統的外部擁有帳戶(EOA)與合約帳戶之分仍然有用,但在啟用 EIP-7702 的鏈上,「EOA 一定沒有程式碼」已不再絕對。EOA 可以帶有委派指示符 0xef0100 || address,在保留 EOA 交易發起權限的同時執行受委派程式碼。因此,分類應依據鏈規則與實際帳戶程式碼,而不是沿用舊的介面標籤。
七步狀態轉換查核
- 固定觀察口徑:網路、
chainId、分叉規則、區塊號碼與區塊雜湊、時間戳記,以及pending、latest、safe或finalized等區塊標籤。鏈頭附近的狀態可能因重組而改變;不同區塊的事實不得在未標示的情況下合併。 - 讀取協定帳戶欄位:
nonce、原生balance、storageRoot與codeHash。如果程式碼是 EIP-7702 委派指示符,應依該分叉規則解析受委派位址。對於代理與委派帳戶,還要分別識別實作程式碼、升級控制與儲存配置。 - 定位應用程式餘額。ETH 會改變原生餘額;ERC-20 餘額通常改變代幣合約儲存中的映射;授權額度、債務、擔保品與獎勵可能位於其他合約及儲存槽。代幣小數位數與日誌有助於解讀,但不是額外的帳戶葉欄位。
- 解碼並預先檢查頂層交易:交易類型、鏈網域、簽章、傳送方 nonce、接收方或合約建立、轉移價值、輸入資料、Gas 上限、費用上限,以及選用的存取清單或 EIP-7702 授權。傳送方必須能支付轉移價值與最高費用承諾。遭拒絕的交易不會納入區塊,也不會耗用鏈上 Gas。
- 從前一狀態開始,依區塊順序執行交易。EVM 處理巢狀訊息呼叫與合約建立框架,每個框架各有呼叫方、被呼叫方、價值、calldata、Gas 與回傳狀態。共享讀寫使結果取決於執行順序。EIP-2930 存取清單會預熱列明的帳戶與儲存槽並改變 Gas 核算,但既不禁止未宣告存取,也不能證明可以安全平行執行。
- 套用提交與回復邊界。成功框架會提交其狀態與日誌,除非父框架之後回復。
REVERT會回復失敗框架的寫入、價值轉移與日誌,同時退還未使用 Gas;外層合約可以擷取子呼叫失敗後繼續成功。已納入區塊的頂層失敗,其收據為status = 0,但傳送方交易 nonce 仍會增加,且須支付已耗用 Gas。即使之後的執行回復,EIP-7702 授權處理也有其獨立的持久化規則。 - 核對執行後狀態。將原生與代幣餘額差額、儲存變化、收據狀態、Gas 使用量、有效 Gas 價格、日誌及服務商執行追蹤,與區塊承諾的根進行比對。執行追蹤是服務商重建的檢視,不是獨立共識交易。達到所需最終性後,再明確處理替換交易、鏈重組、索引器修訂、跨鏈橋、Rollup 與會計沖銷。
四個算例
- EIP-1559 ETH 轉帳。 A 初始有
5 ETH、nonce 為12;B 初始有1 ETH。A 轉出1 ETH,使用21,000 gas,基礎費為20 gwei,優先費上限為3 gwei,最高費用為40 gwei。有效 Gas 價格為min(40, 20 + 3) = 23 gwei;總費用為21,000 × 23 gwei = 0.000483 ETH,其中基礎費銷毀0.000420 ETH,優先費為0.000063 ETH。簽章時所需最高金額為1 ETH + 21,000 × 40 gwei = 1.000840 ETH。最終 A 餘額為3.999517 ETH,B 為2 ETH,A 的 nonce 為13。 - 已納入但回復的交易。 A 初始有
2 ETH、nonce 為7。A 攜帶0.50 ETH呼叫合約;頂層執行在耗用80,000 gas後回復,有效 Gas 價格為25 gwei,所以費用為80,000 × 25 gwei = 0.002000 ETH。合約儲存寫入、日誌與0.50 ETH轉移均被回復,而 A 最終餘額為1.998000 ETH、nonce 為8,收據為status = 0。若子呼叫失敗被外層擷取,外層收據也可能為status = 1。 - 代幣餘額屬於合約儲存。 某代幣合約記錄 Alice 有
1,000 units、Bob 有200 units。成功轉移250 units後,Alice 有750 units,Bob 有450 units,總量仍為1,200 units。如果 Alice 的頂層交易耗用60,000 gas × 20 gwei = 0.001200 ETH,她的原生 ETH 餘額會另外減少這筆費用。代幣帳戶的storageRoot與全域stateRoot都會改變;代幣本金從未成為 Alice 的原生帳戶餘額。 - EIP-7702 持久化邊界。 贊助方提交一筆 set-code 交易,其中包含帳戶 A 在 nonce
5時向實作 D 發出的授權。協定寫入23-byte指示符0xef0100 || 20-byte address,並將 A 的授權 nonce 增至6。如果該頂層交易之後的執行回復,已處理的委派指示符與授權 nonce 仍然保留。這與失敗呼叫寫入一般 EVM 儲存時的回復邊界不同。
風險與控制
- 讀取錯誤的鏈、分叉、區塊雜湊或區塊標籤,會產生內部不一致的狀態快照。
- 過時或不可信的 RPC 可能遺漏、落後或誤報鏈頭狀態。
- 待處理 nonce 競爭、斷檔與替換可能使排隊假設失效。
- 錢包中的「取消」通常是替換交易,而不是協定層刪除。
- 餘額不足以支付價值與最高費用,會阻止交易納入。
- 基礎費變動或費用上限錯誤可能延遲納入或改變成本。
- EIP-7702 程式碼可能使舊式帳戶判斷法誤判 EOA。
- 惡意受委派程式碼、初始化缺陷或授權重播可能危及 EIP-7702 帳戶。
- 代理升級與委派呼叫可能使程式碼及儲存解讀隨時間改變。
- 金鑰、簽章網域或鏈 ID 錯誤可能授權竊取或重播。
- 重入與共享狀態排序可能在一次執行內改變餘額。
- 子呼叫失敗可被擷取,而外層交易仍顯示成功。
- 頂層回復或 Gas 耗盡仍會耗用 Gas 並增加傳送方 nonce。
- 代幣小數位數、轉帳收費、再定基與掛鉤可能使簡單餘額計算失效。
- 僅核對錢包餘額可能遺漏授權額度、債務、擔保品與獎勵。
- 日誌可能缺失、被回復、具有誤導性,或不足以證明最終狀態。
- 瀏覽器「內部交易」與服務商執行追蹤可能因其均為重建檢視而不同。
- 存取清單可能不完整、重複或不具經濟效益,也不會鎖定讀寫集。
- 共享狀態排序、優先費與 MEV 可能改變執行結果。
- 鏈重組、資料裁剪、證明無法取得、L2 系統轉換與跨鏈橋最終性可能沖銷或遮蔽會計紀錄。
常見迷思
- 「錢包保存鏈上餘額。」錢包保存憑證,並呈現從網路取得的狀態。
- 「每個位址都永久屬於無程式碼 EOA 或一般合約。」EIP-7702 委派改變了這種程式碼判斷方式。
- 「每一筆顯示的轉帳都是獨立以太坊交易。」代幣事件與內部訊息呼叫追蹤不是頂層簽章交易。
- 「失敗交易什麼都不改變,也沒有成本。」已納入的失敗可能耗用 Gas 並推進傳送方 nonce。
- 「帳戶模型或存取清單保證比 UTXO 更快地平行執行。」效能與衝突取決於完整協定與工作負載。