正如ERC-4337所定義的那樣,賬戶抽象 "允許用戶使用包含任意驗(yàn)證邏輯的智能合約錢包,而不是使用EOA作為其主要賬戶"。 ERC-4337 帶來許多用戶體驗(yàn)的優(yōu)化,最引人注目的是使人們能夠使用智能合約作為他們的主要賬戶。 ERC-4337在區(qū)塊鏈之上運(yùn)行,不需要對(duì)區(qū)塊鏈本身做任何改變。這使得它今天可以在以太坊或任何EVM鏈上使用,無需對(duì)底層區(qū)塊鏈基礎(chǔ)設(shè)施進(jìn)行任何重大改變。 2023年3月1日,來自以太坊基金會(huì)的Yoav Weiss宣布,在EntryPoint合約首次部署時(shí),ERC-4337已經(jīng)在以太坊主網(wǎng)上運(yùn)行。 賬戶抽象的關(guān)鍵概念是什么?賬戶抽象的關(guān)鍵概念是UserOperation, Bundler, Sender, EntryPoint, Paymaster, 和 Aggregator。這些概念結(jié)合在一起,使web3開發(fā)者能夠建立智能合約錢包和使DApp與智能合約錢包(SCW)兼容。 
圖中顯示了用戶如何定義UserOperation,這些操作被捆綁起來,發(fā)送到EntryPoint合約,然后代表用戶智能合約錢包執(zhí)行。 1. UserOperationUserOperation是一個(gè) "偽交易對(duì)象",代表用戶的交易意圖。任何UserOperation都可以包含多個(gè)指令和附加數(shù)據(jù),以執(zhí)行由智能合約賬戶發(fā)起的智能合約調(diào)用。UserOperation 代表了 一個(gè) 4337 合約錢包交易的開始。 UserOperation 和 傳統(tǒng)交易對(duì)象(TX)之間有什么區(qū)別?傳統(tǒng)交易對(duì)象通常類似于這樣的結(jié)構(gòu): { from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", data: "0x.....", gasLimit: "21000", maxFeePerGas: "300", maxPriorityFeePerGas: "10", nonce: "0", value: "10000000000"}EOA 會(huì)對(duì)該交易對(duì)象簽名,并發(fā)送到節(jié)點(diǎn)處理(mempool)。 UserOperation 結(jié)構(gòu)如下: struct UserOperation { address sender; uint256 nonce; bytes initCode; bytes callData; uint256 callGasLimit; uint256 verificationGasLimit; uint256 preVerificationGas; uint256 maxFeePerGas; uint256 maxPriorityFeePerGas; bytes paymasterAndData; bytes signature; }UserOperation 和傳統(tǒng)交易對(duì)象之間的三個(gè)主要區(qū)別是: - 附加字段 - UserOperation 交易結(jié)構(gòu)中的有一些新字段(如:paymasterAndData 等)
- 另一個(gè)mempool - UserOperation 被發(fā)送到一個(gè)單獨(dú)的mempool,在那里捆綁器可以將 UserOperation 打包成真實(shí)的交易,并被包含在一個(gè)區(qū)塊中。
- 認(rèn)證方式 - 對(duì)于一個(gè)傳統(tǒng)交易,認(rèn)證總是通過一個(gè)私鑰的簽名來完成,這個(gè)私鑰對(duì)于一個(gè)給定的發(fā)起者來說永遠(yuǎn)不會(huì)改變。在UserOperation中,認(rèn)證是可編程的。
2.捆綁器(Bundler)捆綁器會(huì)監(jiān)控一個(gè)專門為UserOperation建立的 mempool。捆綁器將多個(gè)UserOperation捆綁成一個(gè)交易,并將該交易提交給入口點(diǎn)(EntryPoint)合約。捆綁器通過抽取部分 Gas 費(fèi)用來獲得補(bǔ)償。 捆綁器是實(shí)現(xiàn)ERC-4337的基礎(chǔ)設(shè)施的關(guān)鍵部分,由于所有以太坊交易都需要由一個(gè)外部擁有的賬戶(EOA)發(fā)起。捆綁器通過EOA 把多個(gè)UserOperation 作為交易提交上鏈,在一個(gè)賬戶抽象化的生態(tài)系統(tǒng)中,捆綁器是唯一需要EOA的參與者。ERC-4337的主要目標(biāo)之一是錢包抽象(Web3不再關(guān)注使用EOA 還是 合約錢包),讓web3 用戶可以不再需要自己的EOA錢包。 3. 入口點(diǎn)(EntryPoint)EntryPoint是一個(gè)單例智能合約,用來接收來自捆綁器的交易,然后驗(yàn)證和執(zhí)行UserOperation。 EntryPoint的驗(yàn)證過程是如何進(jìn)行的?智能合約賬戶可以定義自己的驗(yàn)證,因此也可以定義自己的認(rèn)證。在驗(yàn)證過程中,EntryPoint合約會(huì)檢查錢包是否有足夠的資金來支付它可能使用的最大Gas量,這是基于UserOperation中的Gas字段。如果錢包沒有足夠的資金,EntryPoint合約會(huì)拒絕交易。 EntryPoint的執(zhí)行過程是如何進(jìn)行的?在執(zhí)行過程中,EntryPoint合約通過使用UserOperation中指定的 calldata 來執(zhí)行UserOperation,并從智能合約賬戶中取錢給捆綁器報(bào)銷合適的ETH來支付Gas。 4. PaymasterPaymaster 是一個(gè)ERC-4337定義的智能合約,處理Gas 支付政策。支付政策為 Gas 的支付方式(例如,用什么貨幣)和由誰支付創(chuàng)造了靈活性,這消除了用戶持有區(qū)塊鏈原生代幣才能與區(qū)塊鏈交互的限制。 例如,以太坊的原生區(qū)塊鏈代幣是ETH,Polygon的原生區(qū)塊鏈代幣是MATIC。因此,用戶可以用任何ERC20代幣如美元幣(USDC)或Tether(USDT)來支付以太坊交易的Gas費(fèi)用,而不是用原生代幣(如ETH)來支付。 
圖:EntryPoint合約如何與Paymaster合約交互以執(zhí)行靈活的Gas支付政策。 Paymaster 允許應(yīng)用程序開發(fā)人員:- 為他們的用戶贊助 Gas 費(fèi)用
- 使用穩(wěn)定幣代為 Gas支付
- 使用其他ERC-20代幣實(shí)現(xiàn) Gas 支付
Paymaster 從用戶那里抽象出Gas支付,同時(shí)以一種穩(wěn)健的方式讓應(yīng)用程序決定這種抽象應(yīng)該是什么(例如,贊助交易,用穩(wěn)定幣支付Gas,等等)。 5.聚合器(Aggregator)聚合器是一個(gè)智能合約,它實(shí)現(xiàn)了一個(gè)支持聚合的簽名方案(即一個(gè)可以驗(yàn)證聚合簽名的合約)。 如果多個(gè)消息用不同的密鑰簽名,那么可以生成一個(gè)單一的組合簽名,驗(yàn)證組合簽名,并確認(rèn)(推導(dǎo))所有的組成簽名也是有效的。 通過將多個(gè)簽名合并成一個(gè)簽名,聚合器有助于節(jié)省calldata成本,多個(gè)捆綁的 UserOperation 在一個(gè)步驟中得到驗(yàn)證。 
圖:ERC-4337如何為UserOperation 使用 mempool和一個(gè)捆綁器,將一捆 UserOperations 組合成一個(gè)交易,并包含在以太坊的區(qū)塊中。 ERC-4337 先烈:EIP-2938 和 EIP-3074ERC-4337 建立在之前的以太坊改進(jìn)提案(EIP)2938 和 3074 之上。EIP-2938 提出了使智能合約可用來 "支付費(fèi)用和發(fā)起交易執(zhí)行" 一等賬戶的想法,而EIP-3074提出了將 "外部擁有賬戶(EOA)的控制權(quán)委托給智能合約 "的想法。 EIP-4337 使用了EIP-2938和EIP-3074引入的想法,并將其與使用獨(dú)立 mempool 的想法和不需要改變共識(shí)層的實(shí)施路線相結(jié)合。 感謝 Chaintool 對(duì)本翻譯的支持, Chaintool 是一個(gè)為區(qū)塊鏈開發(fā)者準(zhǔn)備的開源工具箱 |