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