無論是牛市還是熊市,以太坊生態系統一直在不斷地建設和自我優化。其中,賬戶抽象(Account Abstraction,AA)近年來取得了重要的進展,並已滲透到以太坊生態系統的各個部分,包括應用、基礎設施、用戶和開發者。我們可以預見,AA的大規模採用將從整體上降低區塊鏈使用的門檻,並將web2的用戶體驗引入web3行業。

在本文中,BlockPI團隊將深入探討他們對AA的理解,並從基礎設施服務提供商的角度分享思考。

EOA和合約錢包

AA的概念源於EOA賬戶的局限性。 EOA賬戶(external owned account)是以太坊中的用戶賬戶,由公鑰(區塊鏈地址)表示,通過私鑰訪問。它是以太坊生態系統的主要組成部分,允許用戶在區塊鏈上轉賬或與智能合約交互。然而,對很多人來說,使用EOA本身就是一項充滿挑戰的任務。況且,現在的EOA賬戶依舊存在一些使用上不便之處,影響用戶體驗。

首先就是Gas費問題。每筆交易都會花費用戶相當多的ETH作為Gas費(以25 Gwei的Gas price 為例,簡單的ETH轉賬的Gas費約為0.5美元,進行合約交互或當Gas price更高時則會更貴) 。這使得小額交易的手續費顯得非常昂貴,尤其是在網絡擁堵嚴重的時期。此外,只能使用ETH支付Gas,這意味著用戶必須在錢包中持有ETH,對很多用戶而言,這構成了一個較高的進入門檻。

其次,對於用戶想要實現的某些複雜操作,EOA必須藉助於其他的智能合約。例如,如果用戶想要設置定時周期性轉賬,則用戶需要將ETH轉到具有此功能的某個智能合約中來實現該操作。

EOA的第三個問題是固定的簽名加密算法。以太坊網絡使用一種名為secp256k1的數字簽名算法,來確保交易的真實性和安全性。該算法被硬編碼到系統中,用戶無法選擇使用其他加密算法。

除了上述的三個問題之外,EOA的公鑰和私鑰之間的綁定關係也是一個問題。私鑰是用戶訪問EOA的唯一途徑,如果私鑰丟失,將無法找回。這同時意味著與之關聯的EOA內的所有資產將無法找回。

同時, 在執行某些線性任務時,EOA也存在限制。例如,如果用戶希望在一個操作中批准(approve)、交換(swap)和取消批准代幣(unapprove token),需要執行三個單獨的交易,既低效又耗時。

好消息是,合約錢包可以解決上述的所有問題。合約錢包本質上是一種實施了AA的特定類型的智能合約賬戶,它可以在以太坊上作為用戶的錢包使用。並且可以給用戶提供更靈活也更個性化的方式來管理資金。只要是以太坊智能合約能夠實現的邏輯,合約錢包就可以實現並提供對應的功能。

具體地說,多個合約錢包操作可以被打包到一筆鏈上交易中,這些操作則可以分攤這一筆交易的Gas成本。如果第三方願意支付Gas費用,則對於使用合約錢包的用戶來說不需要支付Gas。合約錢包也可以一次性完成多個線性任務。除此之外,合約錢包還支持自定義簽名的加密算法,並設置錢包恢復的功能等等。

隨著對合約錢包優勢的討論持續進行,以太坊社區實際上早已對合約錢包進行了長期研究。儘管許多EIP已經探討了賬戶抽象相關問題,但截至2021年,仍未建立統一標準。以下是幾個具有代表性的EIP。

EIP-86

最初由Vitalik Buterin於2017年提出。該方案實現了一系列變更,其共同目的是“抽象化”簽名驗證和nonce檢查,從而使用戶能夠創建能執行任意簽名/nonce檢查的“賬戶合約”。

EIP-2938

於2020年提出。這個EIP的標題是賬戶抽象(Account Abstraction)。 AA的概念在這個EIP中有很好的描述。它引入了一種新的交易,即AA 交易。交易由入口點地址( EntryPoint address)發起,並調用AA合約錢包。 EIP-2938提供了一個統一的規範並正式將AA賬戶抽象引入以太坊共識。具體來說,它在以太坊共識中引入了兩個新的操作碼、三個全局變量和一個不同的有效載荷結構。

EIP-3074

於2020年提出。這個EIP引入了兩個EVM指令, AUTH 和AUTHCALL 。 AUTH 根據ECDSA簽名授權設置環境變量。 AUTHCALL 作為授權賬戶發送調用。這允許智能合約代表EOA發送交易。但這對AA來說仍然不是一個完美的解決方案。在授權交易過程中,EIP-3074在原生價值傳輸方面存在一定的限制。並且如果用戶丟失了對EOA的訪問權限,仍將無法找回他的資產。如果遭遇私鑰洩露,用戶則需要將所有資產轉移到新賬戶中。

由於需要在共識層進行更改或方案不夠全面,上述提案均未被正式納入以太坊協議中。因此,以太坊社區繼續探索如何在不改變共識的前提下,將AA引入以太坊協議,並最終提出了EIP4337。

ERC - 4337

EIP-4337最初於2021年9月提出,並於2023年3月獲得授權成為ERC-4337。其作者包括Vitalik Buterin、Yoav Weiss、Kristof Gazso、Namra Patel、Dror Tirosh、Shahaf Nacson和Tjaden Hess。

EIP-4337是一項具有顛覆性的提議,能夠在不改變以太坊核心協議的情況下引入AA。 EIP-4337最終成為了ERC-4337標準,構建者可利用該標準實現自己的智能合約錢包。同時該標準還引入了一些額外的基礎設施包括“Bundlers”和“ UserOperation mempool”。如此一來,它實際上在區塊鏈系統上層複製了一個有相似功能的以太坊mempool。用戶提交的不再是單筆交易,而是UserOperation 。多筆UserOperations 可以打包成一個單筆交易並發送到以太坊上。

以下是以太坊[官方文檔](https://eips.ethereum.org/EIPS/eip-4337)中ERC-4337的詳細技術解釋,以及一些有助於理解的評論。

ERC-4337的關鍵角色和其定義

- UserOperation — 描述代表用戶發送的交易的結構。為避免混淆,它沒有被命名為“transaction”它會被發送給Bundler,與其他UserOperations 一起打包為一個Bundle。接著將Bundle作為一筆單獨的交易發送到鏈上。

- Sender — 發送UserOperation 的合約賬戶。該錢包合約必須遵循ERC-4337標準配置IAccount 接口.

- EntryPoint — 執行UserOperations 捆綁包的全局單例合約。 Bundlers/Clients將支持的EntryPoint 列入白名單。該合約由Infinitism 團隊審計並且核准部署,負責處理所有UserOperations ,並連接其他角色的合約,包括Wallet Factory、Aggregator、 Paymaster 。該合約在EVM兼容鏈上都是相同的地址。

- Bundler — 從mempool打包多個UserOperations 並創建EntryPoint.handleOps() 交易的節點(當前出塊節點)。 Bundler服務可以獨立於區塊鏈節點運行,並通過RPC來發送打包好的UserOperations 。

- Aggregator — 由賬戶信任的輔助合約,用於驗證聚合簽名。 Bundlers/Clients將支持的簽名聚合器列入白名單。 Aggregator 必須遵循ERC-4337標準配置IAggregator 接口。

- Paymaster — 一個可以代付Gas的智能合約。如果它在EntryPoint 合約中存入了足夠的ETH,則可以為發送方支付UserOperation 的Gas費, 從而有效地實現Gas抽象。 Paymaster 必須遵循ERC-4337標準配置Paymaster 接口。 Paymaster 可以與 Sender 達成協議。例如, Sender 向Paymaster 支付USDC, Paymaster 用ETH來支付其發送的UserOperations 的Gas。事實上, Paymaster 可以選擇支持任何代幣,包括ERC-20代幣甚至其他鏈上的代幣。

- Wallet Factory — 可以為ERC-4337用戶創建合約錢包的智能合約。部署Wallet Factory是無需許可的。作為鏈上智能合約,其代碼向公眾開放,任何人都可以對其進行審查。一個廣泛使用的Wallet Factory應當經過專業人士的全面審計。

下圖解釋了EntryPoint 合約如何與其他角色交互。

- Bundlers調用EntryPoint 合約的handleOps 函數,該函數接受UserOperation 作為輸入。

- handleOps 會在鏈上驗證UserOperation ,檢查是否由指定的智能合約錢包地址簽名,並確認錢包是否有足夠的Gas來補償Bundler。

- 如果驗證通過, handleOps 將根據UserOperation 的calldata中定義的函數和輸入參數執行智能合約錢包函數。

另一方面,當Bundler使用EOA觸發handleOps 函數時,會產生Gas費用。智能合約錢包可以從自己的賬戶餘額中向Bundlers支付Gas費用,或者請求Paymaster 合約代付。 UserOperations 在沒有足夠Gas的情況下無法通過鏈下的驗證步驟,即在鏈上執行交易前失敗。即便具備足夠的Gas, UserOperations 在執行過程中仍可能因運行時錯誤等原因失敗。對於一筆UserOperation ,無論執行合約成功與否, EntryPoint 合約都會向觸發handleOps 函數的Bundler支付Gas費用。

基礎設施如何通過賬戶抽象為數十億用戶提供支持

(摘自官方文檔: https://eips.ethereum.org/EIPS/eip-4337 )

在ERC-4337生效後,用戶現在可以通過兩種方式發起區塊鏈交易。一種是傳統方式,即由EOA直接發起交易。另一種是使用ERC-4337標準,通過Bundler發起UserOperation ,隨後Bundler會將其與其他UserOperations 打包並發往鏈上。以下流程圖闡述了普通EOA發送交易與ERC-4337合約錢包發送UserOperation 之間的差異。

基礎設施如何通過賬戶抽象為數十億用戶提供支持

 

道路已經鋪好,但尚無眾多行人

ERC-4337提供了一個強大的框架,讓用戶和開發者可以在以太坊使用和構建AA。儘管該框架是一個重要的進步,但仍存在一些挑戰和不確定性需要應對和解決。

AA的採用還處於初級階段。根據Dune ERC-4337分析面板(*[ERC-4337 Account Abstraction](https://dune.com/niftytable/account-abstraction)* from @niftytable),鏈上僅執行了65k+ UserOperations ,其中90%來自Polygon 。因此,目前執行的UserOperation 數量仍然非常少,其中大部分是開發者的測試,而只有很小一部分來自於真實用戶。我們注意到,已經整合了AA的產品仍處於初期階段。目前,我們可以觀察到,Bundlers整體仍舊處於虧損狀態, 目前虧損約為700多個MATIC。這主要是因為一些Polygon上的Bundler錯誤預估需要的Gas引起的,導致EntryPoint 返回的的Gas少於提交的Bundle消耗的gas。這個問題需要在Bundler客戶端層面解決。

除此之外,還有一些問題需要解決。其中一個問題是Bundlers如何處理交易失敗。

在將多個UserOperations 打包在一起後,Bundlers首先會模擬交易,檢測是否會出現合約執行失敗,併計算 Sender 或Paymaster 返回的Gas費用是否大於支付的Gas費。

如果有利可圖,Bundler將這批UserOperations 作為一個交易提交給出塊節點。然而,交易仍然可能失敗,導致Bundler支付Gas費用,但沒有收到EntryPoint 返還Gas的情況。例如,用戶可能向不同的Bundlers發送操作。如果存在盈利空間並且模擬成功,Bundlers會將其提交到鏈上。在這種情況下,如果一個UserOperation 同時被不同的Bundlers提交到出塊節點,只有一筆交易會成功,這意味著只有一個Bundler會收到EntryPoint 返回的Gas費,其他所有Bundler都會因為上鍊失敗而損失Gas。儘管有人可能認為這種行為應被視為惡意攻擊,並主張Bundler可以禁掉該Sender 地址,拒絕來自該地址的任何未來請求,但這並非一個合理的解決方案,因為用戶可能無意中採取這種行為。這個問題需要在代碼中妥善解決,也許可以通過正在開發中的公共mempool來實現。此外,即使交易已成功提交且模擬結果顯示存在獲利空間,Bundlers也可能因為突然的Gas波動遭受損失。

另一個問題是從AA中可以獲取的最大可提取價值(MEV)。在以太坊的背景下,MEV通常指的是礦工或其他交易處理者通過操縱區塊中交易的順序或在區塊中插入他們自己的交易來提取的價值。有人可能會注意到,MEV的邏輯也可以適用於AA。這是因為在AA中,Bundlers可以對UserOps進行自由排序,這為它們提供了獲取MEV的可能性。然而,Bundler是否能提取MEV取決於是否有足夠多的UserOperations 可以打包在一起。現在整個AA市場仍處於初級階段,因此Bundler MEV也可以被認為是初級階段。可以遇見到的是,AA的MEV可能朝兩個方向發展:一是類似於以太坊主網,有像Flashbots、Ultra Sound和BloXroute這樣的參與者參與;另一個方向是形成Bundler共識來實施公平排序。而後者將完全消除AA中提取MEV的可能性。

未來發展

公共mempool

雖然AA生態系統已經投入運行,但仍有許多開發工作尚待完成。從整個AA生態系統來看,目前最大的缺失部分是公共mempool。 Etherspot團隊,Skandha Bundler客戶端的開發者,目前正在開發公共mempool的p2p網絡。預計公共mempool的p2p網絡將在今年8月份推出。

Bundle算法

在此過程中,以太坊基金會資助了幾個優秀的AA開發團隊。到目前為止,已經開發了多個目前已經可以使用的Bundler客戶端。其中,有一些已經非常成熟了。分別是Candide(用Python編寫的Voltaire Bundler)、Pimlico(用Typescript編寫的Alto Bundler)、Etherspot(用Typescript編寫的Skandha Bundler)、Stackup(用Go編寫的Stackup-Bundler)等。

這裡就涉及到了打包策略的問題。目前,由於UserOperations 的數量較少,Bundlers可以採用簡單的打包邏輯,例如固定的時間間隔或每個Bundle中一定數量的UserOperations 。然而,隨著UserOperations 數量的增加,特別是在公共mempool引入之後,選擇和打包UserOperations 的策略變得更加複雜。原因很簡單:在AA生態中,缺乏類似區塊鏈共識協議的機制,Bundler群體成為了一個黑暗森林,每個Bundler根據自己的利益優先處理任務,並互相競爭。與公共mempool相對的,私有mempool有可能會較早出現。因為當從公共mempool打包UserOperations 無法盈利時,打包私有mempool中的UserOperations 依舊存在盈利的可能。在這種情況下,該Bundler在打包時相較其他Bundler更有競爭力。

此外,隨著公共mempool的逐步普及,其中的UserOperations 有各種特性,例如不同的Gas盈利預期和鏈上執行複雜性。 Bundlers將進行鏈下模擬,評估各種UserOperations 組合的盈利能力,從而建立各自的打包策略。打包更多的UserOperations 有可能產生更高的利潤,但同時也增加了驗證失敗的風險。即使驗證通過,鏈上執行失敗的風險仍然存在。相對的,打包較少的UserOperations 則相反。 Bundlers需要設置自己的交易Gas參數,這將影響出塊節點執行這筆交易的優先級。在不同的預估Gas price和Gas波動率條件下,Bundlers可能有不同的打包策略。同時還要考慮這些驗證和策略計算需要消耗本地硬件計算資源和區塊鏈節點資源的成本。此外,Bundlers還需要努力為用戶提供良好的用戶體驗,確保用戶在提交UserOperation 後不會面臨過長的延遲。

儘管這些挑戰的解決方案仍然不明朗,但我們可以有信心地說,AA行業的發展和開發者的共同努力將最終解決這些問題。作為基礎設施建設者,BlockPI希望在AA行業的發展中充當問題解決者的角色,無論是作為開發者還是為其他開發者提供AA友好的基礎設施。

基礎設施必須要適應AA

AA將鏈上交易行為中涉及的各種角色抽像出來,包括 Sender 、Bundlers、Gas payers、合約錢包、Signers,從而使用戶在使用區塊鏈時具有更高的自由度。同時,基礎設施供應商可以根據自己對市場的判斷,獨立部署這些服務。

為了適應AA的大規模採用,基礎設施提供商首先需要提供至少兩個基本服務:Bundler服務和Paymaster 服務。

在Bundler服務中,基礎設施提供商可能需要與Bundlers一起開發私有mempool,以提供良好的用戶體驗。具體來說,基礎設施提供商需要集成多種Bundler客戶端,以確保Bundler服務的穩定。這些Bundler客戶端目前向用戶提供幾種標準的JSON RPC方法,這些方法是ERC-4337 核心開發組提供的。可以預見以後會有更多的RPC方法可供用戶使用。基礎設施服務商需要在這個過程中及時更新對這些方法的支持。

此外,在Bundler API和原始節點客戶端RPC之間進行優化也非常重要。目前的節點客戶端沒有針對AA進行過優化。一些Bundler API方法需要節點提供針對AA的數據索引。例如,現在的客戶端在通過哈希查找UserOperation 時,需要掃描所有區塊中的EntryPoint 合約日誌。若缺乏數據索引,這個單一請求的硬件資源消耗將會相當巨大,同時請求的返回時間也將變得很長。

除此之外,為了給用戶提供免Gas的用戶體驗以及多樣化的服務,基礎設施提供商需要與不同的Paymaster 服務提供商達成合作,從而集成不同的Paymaster 服務。同時根據市場需求,基礎設施提供商還可以基於現有Paymaster 服務設計更方便的集成解決方案。其他服務,如聚合簽名、錢包工廠等,也是基礎設施未來發展和集成的潛在方向。

總之,為了適應AA的大規模應用,基礎設施提供商需要不斷完善和擴展其服務。這包括優化Bundler服務,與不同的Paymaster 服務提供商合作,集成各種API接口,以及開發其他潛在的服務。隨著AA行業的不斷發展,這些努力將有助於提供更高效、安全和便捷的區塊鏈使用體驗。