ERC-4337:探索帳戶抽象的五個主要技術組件
發布日期:5/20/2023
新聞視界時報-記者王秉呈
ERC-4337標準有五個關鍵元件值得關注:UserOperation、Bundler、EntryPoint、Aggregator和Paymaster。
1、UserOperation
簡單來說:UserOperation捕捉用戶的意圖和操作,包括與發送方、有效負載和gas費相關的資訊。由於它的設計是為了避免更改共識,乙太坊團隊選擇創建一個全新的結構,以獲取代表使用者發送的交易所包含的全部必要元素。
為了避免混淆,他們特意沒有將其稱為“交易”。
更具體地說:智慧合約錢包現在可以創建叫做UserOperation(userOp)的偽交易對象,代表使用者所期望的交易意圖,而無需初始化傳統交易。
UserOperation不能訪問任何在模擬和執行之間可能發生變化的資訊,例如當前區塊時間、雜湊值、區塊號等。這是為了確保它的有效性,並且能夠為其鏈上交易執行支付費用。
UserOperation同樣只允許訪問與發送方位址相關的資料。
與交易類似:UserOperation包含sender、to、calldata、maxFeePerGas、maxPriorityFee、signature和nonce欄位。
與交易不同:nonce和signature欄位的使用不是由協議定義的,而是由各帳戶實現定義的。
UserOperation記憶體池
簡單來說:UserOperation記憶體池是一個等待網路處理的未執行UserOperations的池。UserOperations被發往UserOperation記憶體池,而非傳統的公共記憶體池。
更具體地說:UserOperation記憶體池是任一個UserOperation作為真正交易上鏈之前的最後一個“停靠站”,然後,稱為bundler(下文將詳細介紹)的新質押者可以從該記憶體池裡提取各UserOperation,充當了EOA角色,支付gas費並將UserOperations發送到共識層作為交易執行。
這是一個專用的高級UserOperation記憶體池,僅供UserOperations使用,也稱為canonical記憶體池。該記憶體池遵循並嚴格執行ERC-4337規則。ERC也允許為UserOperations提供不遵循canonical記憶體池規則的替代記憶體池(alt-mempool)。
遵守ERC規則的UserOperations被發送到canonical記憶體池。那些不遵守ERC規則的可以被發送到其他規則不同的替代記憶體池。這些替代記憶體池中的UserOperations僅被發送給該池的參與者。
Bundlers可以通過加入白名單或加入另一個不同ID的替代記憶體池來應對canonical記憶體池的異常情況。Bundlers可以自由加入canonical記憶體池(他們必須無一例外地遵守ERC規則)及替代池。
注:UserOperations記憶體池的最終版本尚未完全定義,因此預計會有進一步的變化。然而,一個完全去中心化的記憶體池對於協定的採用和健康來說是必不可少的。
2、Bundler
簡單來說:Bundler充當著它從canonical記憶體池和替代記憶體池中所提取的全部UserOperations的EOA的角色,Bundler將UserOperations發送到EntryPoint合約進行驗證和完整性檢查,然後,最後進入我們在ERC-4337出現之前的世界裡所習慣的交易流程。
更具體地說:Bundler是一個專門的操作員,它監聽UserOperation記憶體池和所有記憶體池,提取多個UserOperations,將它們打包在一起,並將交易包發送給EntryPoint合約執行。這看起來非常像從EOA到智慧合約的交易,其中UserOperations的執行就如內部交易。“from”地址將是Bundler,“to”地址將是EntryPoint合約。
Bunders選擇將哪些UserOperations對象包含在他們的打包交易中,基於與今天乙太坊的區塊建設者所使用的類似的價值最大化邏輯。
成為Bundler的經濟模型/動機是什麼?
交易上鏈時,Bundler充當“from”位址,正因如此,Bundler將使用ETH為交易包支付gas費。Bundler作為所有單個UserOperation執行的一部分,隨後會獲得費用補償。
在接收UserOperation之前,Bundler將模擬它來驗證簽名,確保UserOperation可以支付費用,並確保UserOperation在模擬和執行時以相同的方式運行。要靠Bundler來避免包含驗證失敗的UserOperations,避免吸收那些無法支付的gas成本。
注意:在ERC-4337框架中,區塊建設者也可以充當Bundlers角色,以提供更強大的執行保證,但這並不是必需的。如果沒有這種更強大的執行保證,交易包將被發送到公共池,並且有可能發生搶先交易,導致交易包交易失敗。
{{AD}}
3、Paymaster
簡單來說:Paymaster是一個可選的質押者,可以為其他使用者的交易支付費用。為什麼?Paymaster可以為乙太坊交易帶來許多有趣的新功能,例如:
應用開發者可以很容易地為他們的用戶補貼費用,例如作為一種獲客手段。
用戶可以使用ERC-20代幣或信用卡或其他訂閱服務等鏈下支付方式輕鬆支付gas費。
更具體地說:ERC-4337流程並沒有強制要求必須使用paymaster。UserOperation使用paymaster通常有以下兩種選擇:
驗證Paymaster:這些paymaster提供與鏈下流程相關聯的gas抽象。例如,它可以讓使用者用信用卡或訂閱服務支付交易費用,而不會損害他們的帳戶託管。
存款Paymaster:這些paymaster提供與鏈上ERC-20代幣相關聯的gas抽象。
Paymaster要麼必須限制其存儲使用,要麼必須進行質押。
注:為了防止濫用,系統將降低速度或暫時封禁提交大量無效UserOperations的Paymaster。為了防止實體的“女巫攻擊”,全域實體需要在系統中進行質押,這使得拒絕服務(DoS)攻擊的成本很高。該質押不會被罰沒,可隨時提取,但會受延遲限制。不訪問全域存儲的全域實體例外。
4、Aggregator
簡單來說:Aggregator是一類特殊的參與者,利用helper智慧合約來處理批量UserOperation簽名,並將它們轉換成一個簽名,也就是將其聚合。
更具體地說:Aggregator是一個受合約帳戶信任的helper智慧合約,用於驗證聚合簽名。UserOperations包由Aggregator在單個步驟中進行驗證,而不是單獨驗證每個簽名。Aggregator旨在提高大規模交易處理的效率和成本。
當前的現實:ERC-4337的交易量還不夠高,不足以顯現簽名聚合的好處,但交易量正在快速增長,一旦達到臨界值,Aggregator就會成為一個關鍵的利益相關者,促進大規模交易。
壓縮的實現過程超出了本文的討論範圍。然而,它已經整合進ERC-4337的設計中。最流行的壓縮方法就是使用BLS簽名聚合。
從用戶的角度來看,他們看不出有任何不同,但是開發人員需要在智慧帳戶中部署BLS簽名邏輯。
5、EntryPoint
簡單來說:EntryPoint合約是一個單例合約,驗證並執行發送給它的UserOperations包。它檢查並確保由bundler發送的提交到鏈上的所有UserOperations都是真實有效的。
更具體地說:EntryPoint合約是所有符合ERC-4337標準的智慧合約錢包必須使用的全域入口點,以便在EVM上進行交易。這一概念類似於單個質押存款合約。
EntryPoint的使用簡化了智慧合約錢包使用的邏輯,將確保安全所需的更複雜功能推至入口點,而不是錢包本身。其核心目的是防止錢包在進入網路之前進行不必要或未經授權的操作。
EntryPoint序列
下圖展示了EntryPoint是如何管理Bundler發送的UserOperation包的。通常有兩個階段,但在使用aggregator的情況下,會增加一個階段。
EntryPoint序列相對簡單,有兩個階段:
序列中的每個迴圈都有自己的角色,如下:
迴圈1:Aggregator迴圈
如果一個交易包使用了aggregator,那麼EntryPoint會首先檢查aggregator。由Entry Point來驗證簽名。
迴圈2:驗證迴圈
首先,它會檢查合約帳戶是否存在。如果不存在,它就會創建一個。
如果沒有定義paymaster:序列驗證Contract Account在EntryPoint中是否有足夠的存款來支付gas費。如果存款充足,它就會為UserOperation付費。
如果定義了paymaster:序列驗證paymaster在EntryPoint合約中是否有足夠的存款。如果存款充足,那麼合約將驗證UserOperation。
迴圈3:執行迴圈
它使用callData調用合約帳戶。
如果定義了paymaster,它將調用paymaster中的自訂費用邏輯。
只有在UserOperation通過序列迴圈的考驗後,才能最終上鏈。
結論:
雖然為了避免混淆,ERC-4337特意使用了不包含“交易”字眼的用語,但實際上,它可以被視為使用者交易上鏈的替代流程。一旦把所有組成部分連接起來,協議就有能力向現有EOA交易流程引入新的使用者意圖層。
AA(帳戶抽象)錢包的用戶將把他們的意圖傳遞給UserOperations記憶體池。Bundlers將這些意圖轉換為網路可以像以前一樣處理的簽名交易。
雖然對於開發者來說,這看起來像是一個有額外步驟的“交易”,但對於使用者來說,這就是手動輸入用戶名/密碼並將其記在筆記本上以確保安全,或使用OAuth只點擊幾下就可訪問web3應用程式之間的區別。