ERC-4337
2021年,vitalik提出一種新的賬戶抽象模型,主要目標是讓智能合約賬戶具有 EOA 主動發(fā)起交易的特性,完整的賬戶抽象包括身份驗證、授權、重放保護、gas支付和執(zhí)行,同時不犧牲去中心化和審查抵抗性。最終ERC-4337 成為以太坊賬戶抽象的最終實現(xiàn)方案。 EIP4337的工作原理簡述: 1.角色:
首先,智能合約錢包本身,會通過打包器觸發(fā)入口合約來間接觸發(fā),在鏈下驗證交易,然后在鏈上執(zhí)行。
其次,打包器(Bundler),用于批量驗證和執(zhí)行用戶操作(UserOperation,即ERC 4337定義的智能合約錢包的交易類型)。
第三,入口合約(Entry Point Contract)是在以太坊只存在一份的全局合約,用于標準化交易執(zhí)行并防止打包器受到惡意交易的DoS攻擊。
第四,代付合約(Paymaster),用于代表錢包用戶處理gas支付。
第五,合約工廠(Wallet Factory),用于標準化錢包創(chuàng)建的參數(shù)和流程。
第六,簽名聚合器(Signature Aggregator),用于將多個交易的簽名聚合為字節(jié),以便更快地驗證和執(zhí)行交易。
2.工作流程:
用戶向Bundler發(fā)送UserOperation
如果UserOperation填寫了initCode參數(shù),Bundler會觸發(fā)Wallet Factory來創(chuàng)建有確定地址的新錢包
如果UserOperation填寫了paymasterAndData參數(shù),Bundler會收取Paymaster在入口點合約上質押的以太坊來支付gas。如果沒有填寫paymasterAndData,Bundler會收取智能合約錢包在入口點合約上質押的以太坊來支付gas
Bundler可以選擇性地使用簽名聚合器
Bundler會使用validateOp、validatePaymasterOp和validateSignatures函數(shù)在鏈下模擬驗證UserOperation,確保簽名正確且UserOperation有足夠的gas
如果鏈下模擬驗證通過,Bundler將使用上述函數(shù)在鏈上驗證UserOperation
如果鏈上驗證通過,Bundler將在鏈上執(zhí)行UserOperation,無論執(zhí)行是否成功,都會扣除gas

優(yōu)點:
無需硬分叉:ERC-4337 不需要通過硬分叉來實現(xiàn),不需要對以太坊的協(xié)議進行任何修改。
兼容性:這種方法與現(xiàn)有的 EOA 系統(tǒng)兼容,使得過渡更為平滑。
缺點:
用戶無法在不遷移所有資產和活動的情況下升級現(xiàn)有賬戶。
額外的gas開銷(基本用戶操作約42k gas,而基本交易約21k gas)。
相比協(xié)議內審查抵抗技術,用戶操作可能被遺漏。
EIP-3074
EIP-3074 的核心是允許外部擁有賬戶(EOA)像智能合約錢包一樣運作,無需部署額外合約或手動遷移。
EIP-3074 引入了兩個新的以太坊虛擬機指令:AUTH 和 AUTHCALL,使 EOA 連接起一個智能合約,并將交易的控制權交給智能合約。 -
AUTH:EOA 可以調用 AUTH 來授權給定的智能合約代表其 EOA 執(zhí)行操作。
-AUTHCALL:獲得授權的智能合約可以使用 AUTHCALL 為 EOA 執(zhí)行交易。

EIP-3074 主要流程為:
首先,用戶用私鑰簽署一條消息,其中包含他們希望將錢包委托給的合約,并將其發(fā)送給中繼者。
中繼器將此簽名轉發(fā)給稱為調用者合約,調用者使用 AUTH 操作碼驗證簽名。此過程完成后,Invoker 合約將獲得用戶錢包的權限,并可以代表用戶發(fā)送交易。
當 Invoker 合約使用 AUTHCALL 操作碼發(fā)送交易時,交易的發(fā)送者被設置為授予權限的用戶錢包的地址。
與ERC-4337的關系
共同點:EIP-3074要實現(xiàn)的目標跟ERC-4337是一樣的。但方式不同。
不同點:EIP-3074的交易的’from’是你的EOA,而不是某個合約。EIP-3074的賬戶所有者還是EOA,但ERC-4337的賬戶所有者是智能合約;EIP-3074無需手動遷移,避免的L2和諸多web3應用程序的適配。委托機制可能導致安全問題,因為如果授權給惡意合約,可能會導致資金被盜。[解決這個問題的方法是錢包服務提供商甚至不允許用戶對任何合約進行授權,他們可能會保留一份用戶可以委托授權的智能合約白名單列表,并且此列表之外的任何合約都不會顯示給用戶。]
EIP-5003
EIP-5003是對EIP-3074的擴展,引入了新的AUTHUSURP 操作碼,允許在 EIP-3074 授權的合約地址上部署代碼,從而為 EOAs 提供遷移路徑,擺脫對 ECDSA 的依賴。主要解決采用EIP-3074的一個問題,即EIP-3074 是對智能合約的臨時委托,可撤銷。
而EIP-5003 是從 EOA 永久遷移并從 EOA “轉換” 到智能合約賬戶。****可以將EIP-3074 + EIP-5003當作是另一種與ERC-4337完全不同的一套賬戶抽象實現(xiàn)方案。 問題:以太坊上出現(xiàn)了兩種類型的賬戶抽象系統(tǒng).ERC-4337已經上線主網,EIP-3074也納入接下來進行的主網升級,一旦升級完成,兩種不兼容的賬戶抽象系統(tǒng)并存。
EIP-7702
EIP-7702 提出了一種同時接受 contract_code 和簽名字段的新交易類型,在開始執(zhí)行交易時,它將簽名者賬戶的合約代碼設置為 contract_code。在交易結束時,它會將代碼重新設置為空。 -
具體來說,它:
檢查你的賬戶合約代碼是否為空;
如果為空,則設置為提供的合約代碼;
根據(jù)提供的智能合約處理交易的方式執(zhí)行交易;
將賬戶合約代碼設置恢復為空;
與EIP-3074的核心區(qū)別:
1.無需引入新操作碼不需要引入新指令,服用已有的指令,但它在交易中臨時應用智能合約代碼,不需要永久改變以太坊虛擬機。
AUTH -> 調用「verify」(驗證)
AUTHCALL -> 調用「execute」(執(zhí)行)
高度兼容
EIP-7702 與 ERC-4337 的智能合約錢包代碼高度兼容,可以直接利用已經為 ERC-4337 編寫和部署的智能合約代碼,使得現(xiàn)有的賬戶抽象化工作可以被重用,避免分裂現(xiàn)有的賬戶體系。
方便未來永久遷移至智能合約賬戶EIP-7702通過在【在交易結束后不將代碼設置為空】來實現(xiàn)臨時代理。EIP-7702 的基礎上實施 EIP-5003(允許 EOA 永久轉變?yōu)橹悄芎霞s賬戶)變得相對簡單,通過設置不在交易結束后清除代碼,可以實現(xiàn) EOA 到智能合約的永久轉變。4.EIP-7702 不僅解決了當前的問題,還通過與未來可能的賬戶模型的兼容性設計,確保了長期的有效性和實用性。
EIP-7851
EIP7851 通過引入一種新的預編譯合約,允許給智能合約代理控制的EOA 去激活或使私鑰無效。
激活狀態(tài):
0xef0100 || address無效狀態(tài):
0xef0100 || address || 0x00
在無效狀態(tài),EOA 賬戶無法使用其它私鑰。
參考
https://eips.ethereum.org/EIPS/eip-4337
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3074.md
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7851.md