ERC-4337: Account Abstraction Using Alt Mempool
EIP-2938 是由 Vitalik Buterin、Ansgar Dietrichs 和 Matt Garnett 在 2020 年 9 月提出的提案。該提案旨在引入新的「帳戶抽象化」交易,需要創建新的 OPCode :PAYGAS
以及NONCE
。然而,這項協議需要變更共識機制( 新增 OPCode ),且不確定性較高,因此 EIP-2938 最終被取消。
EIP-3074 是由 Ansgar Dietrichs 和 Matt Garnett 於 2020 年 10 月提出的提案。該提案引入了兩個新的 OPCode :AUTH
和 AUTHCALL
。當這兩個 OPCode 一起使用時,它們允許智能合約代表一個外部帳戶(EOA)發送交易。然而,正如我們在過去的其他 EIP 中所見,重大的網絡變更很難取得社群的共識。EIP-3074 也不例外,由於不確定成效也無法評估安全風險,它並未被採用。
這個提案完全避免了對共識層協議進行更改的需求。ERC 4337並非通過添加新的協議功能和改變底層交易類型,而是引入了一個更高層次的虛擬交易對象,稱為「UserOperation
」。用戶將UserOperation
對象發送到一個單獨的 mempool 中。一個新的角色,稱為「Bundler」(可以是區塊構建者,或者用戶通過 Bundle market 向區塊構建者發送交易),將一組這些對象打包成一個交易,並通過調用一個特殊合約的「handleOps
」函數將該交易包含在一個區塊中。
左圖為整個 ERC 4337 的流程。會有一群 User 送出 UserOperation
到 Bundler Mempool 。
Bundler 根據規則 ( e.g. 最大的 max priority fee per gas 、 同一個 sender nonce 要遞增 ) 來決定誰要組成一批 transaction 送到 EntryPoint Contract 的 HandleOps 以批量執行不同 sender 所發起的交易。
Bundler 自己有一個 EOA ,會是發起交易的主體,流程依序如下: