ERC-4337: Account Abstraction Using Alt Mempool

以太坊錢包過去的限制

  1. 手續費 (Gas) 必須使用原生代幣支付
  2. 複雜的私鑰管理,如果密鑰遺失就找不回帳戶
  3. 只能使用原生協議的ECDSA簽名與驗證方法,無法客製化驗證邏輯

過去提出的改進提案

EIP 2938

EIP-2938 是由 Vitalik Buterin、Ansgar Dietrichs 和 Matt Garnett 在 2020 年 9 月提出的提案。該提案旨在引入新的「帳戶抽象化」交易,需要創建新的 OPCode :PAYGAS以及NONCE。然而,這項協議需要變更共識機制( 新增 OPCode ),且不確定性較高,因此 EIP-2938 最終被取消。

EIP 3074

EIP-3074 是由 Ansgar Dietrichs 和 Matt Garnett 於 2020 年 10 月提出的提案。該提案引入了兩個新的 OPCode :AUTHAUTHCALL。當這兩個 OPCode 一起使用時,它們允許智能合約代表一個外部帳戶(EOA)發送交易。然而,正如我們在過去的其他 EIP 中所見,重大的網絡變更很難取得社群的共識。EIP-3074 也不例外,由於不確定成效也無法評估安全風險,它並未被採用。

ERC 4337 | 介紹

簡介

這個提案完全避免了對共識層協議進行更改的需求。ERC 4337並非通過添加新的協議功能和改變底層交易類型,而是引入了一個更高層次的虛擬交易對象,稱為「UserOperation」。用戶將UserOperation對象發送到一個單獨的 mempool 中。一個新的角色,稱為「Bundler」(可以是區塊構建者,或者用戶通過 Bundle market 向區塊構建者發送交易),將一組這些對象打包成一個交易,並通過調用一個特殊合約的「handleOps」函數將該交易包含在一個區塊中。

流程 ( 總覽 )

overview.drawio.png

左圖為整個 ERC 4337 的流程。會有一群 User 送出 UserOperation

到 Bundler Mempool 。

Bundler 根據規則 ( e.g. 最大的 max priority fee per gas 、 同一個 sender nonce 要遞增 ) 來決定誰要組成一批 transaction 送到 EntryPoint Contract 的 HandleOps 以批量執行不同 sender 所發起的交易。

流程 ( 合約調用 )

flow.drawio (1).png

Bundler 自己有一個 EOA ,會是發起交易的主體,流程依序如下:

  1. Bundler 打包 UserOperation 後呼叫 EntryPoint Contract 的 hadleOp