賬戶抽象、外部賬戶、合約、EIP-86、EIP-2938、EIP-4337 和讚助交易等概覽。
原文:An overview of Account Abstraction in Ethereum blockchain(EtherWorld.co)
作者: Yash Kamal Chaturvedi
編譯: EthereumCN
原用標題(譯後):以太坊區塊鏈賬戶抽象概覽
譯者註:
賬戶抽象 (Account Abstraction, AA) 自 2015 年以來就一直被討論,並提出了幾個不同版本的 EIP (EIP-101、EIP-86、EIP-859、EIP-2938、EIP-4337)。最近,賬戶抽象的研發似乎又成為了社區的討論熱點,應用層面上也陸續推出賬戶抽象的解決方案。那麼賬戶抽象究竟是什麼?大家想要通過 AA 來解決什麼?本文講述了以太坊賬戶類型、賬戶抽象的 EIP、以及賬戶抽象的潛在用例。
推薦閱讀下列文章,更好地理解賬戶抽象:
✦《賬戶抽象的動機、歷史和分析》by 沙漏:
https://mp.weixin.qq.com/s/ZGzw3VE-8KEQE5xu7Jw_8A
✦《引介| 概述以太坊賬戶抽象化》by EthFans:
https://mp.weixin.qq.com/s/3VvjB2GXcH95j2Hr3zcsVg
✦《引介| 賬戶抽象化(EIP-2938):為什麼&做了什麼》by EthFans:
https://mp.weixin.qq.com/s/CKtk6xKcXFVjyPKDxHBnhw
✦《論賬戶抽象 (2022)》by 沙漏:
✦《EIP-4337》by Plancker DAO:
https://www.notion.so/EIP-4337-0baad80755eb498c81d4651ccb527eb2
此外,普朗克社區和 ECN 社區合辦的首期 “他的名字叫小 V” 活動對 EIP4337 合約錢包進行了分享。分享視頻:EIP4337 合約錢包分享
計算機編程中的抽象和數據抽象指的是隱藏除了 “對象” 相關數據以外的所有數據的過程,目的是減少複雜性並提高有效性。它通過省略不必要細節的方式來表示對象。抽像是面向對象編程(object-oriented programming)的三大原理之一,它與封裝和數據隱藏有關。這篇文章將為以下方面提供概覽:
➤ 以太坊賬戶抽象
- 外部賬戶/用戶賬戶
- 合約
➤ 為賬戶抽象提議的 EIP
- EIP-86:事務來源和簽名的抽象
- EIP-2938:賬戶抽象
- EIP-4337:通過入口點合約 (Entry Point Contract) 實現的賬戶抽象
➤ 用例
- 錢包
- 贊助交易
- 混幣
- DeFi 協議
賬戶抽象
以太坊的賬戶抽像以創建單一賬戶類型為目標,這種賬戶將包含所有相關方面,而且沒有任何無關的方面,讓開發人員的工作更加輕鬆。
以太坊賬戶類型
目前,在以太坊區塊鏈上有兩種類型的賬戶:
用戶賬戶(EOA)
用戶賬戶是給一般人使用的(人類)。
- 這些賬戶由對應公共地址的私鑰所控制,比如用戶的錢包賬戶。
- 這些賬戶又稱為外部賬戶 (EOA),不需要 ETH 餘額就可以在區塊鏈上創建一個外部賬戶。但是,兩個外部賬戶之間可以用 ETH 進行交易,也可以用 ERC 支持的其他代幣。
- 外部賬戶 (錢包) 用於加密貨幣的發送和接受功能存在於以太坊虛擬機(EVM)的外部。
合約
合約是一組由代碼控制的指令。
- 因為使用了網絡儲存,所以創建一份合約通常會產生相關成本。
- 用戶可以操作多種功能,比如接收來自外部賬戶和合約賬戶的事務,以及向它們發送事務。
- 它還可以啟動一個執行多種活動的代碼,包括兌換代幣或是創建一個新合約。
- 合約賬戶是存在於 EVM 的 “智能合約”。
如果你發送 1 個 ETH 到由代碼合約控制的賬戶,那就沒有人可以再控制這個 ETH 了。唯一可以轉移這個 ETH 的是合約的執行,即代碼本身。
兩種賬戶類型都具有接收、保留和發送 ETH 和代幣的潛能,還有與部署在網絡上的其他智能合約進行通信的潛能。
賬戶抽象提案
以太坊賬戶抽象 (AA) 是對這兩種賬戶形式的加強,讓它們更具有可比性,還使外部賬戶的管理邏輯像合約賬戶一樣通用。
它的目的是將合約賬戶的兩種形式減為一種形式。單個賬戶形式的用途包括鑄幣和合約轉賬。開發者和用戶將不再需要區別賬戶類型,因為事務將完全轉移到 EVM 上並脫離區塊鏈協議。
以太坊開發者一直在尋找實現的方法,但一直沒有達到 Final 狀態的提案。在以下部分,我們將概述迄今為止提議賬戶抽象的三個以太坊改進提案 (EIP)。
賬戶抽象提案的時間線
2016:
- Vitalik Buterin 為 Metropolis 提出最初的抽像變化想法。
- 其目的是準備一種賬戶安全抽象。在傳統的模型中,ECDSA(橢圓曲線數字算法簽名)和默認的 nonce 方案是保護賬戶的唯一途徑。在此模型中,所有賬戶都是合約賬戶,它可以支付 gas,且用戶可以自由定義他們的安全模型。
2017:
- Vitalik Buterin 提出了用於事務來源和簽名的抽象的 EIP-86。
- 其目的是抽像出簽名驗證和 nonce 檢查機制,允許用戶建立賬戶合約來執行任意所需簽名或 nonce 檢查,而不是依賴於傳統的方法。
2020:
- Vitalik Buterin、Ansgar Dietrichs、Matt Garnett、Will Villanueva 和 Sam Wilson 提議了用於賬戶抽象的 EIP-2938。
- 目的在於允許合約成為可以支付費用和執行事務的 “頂級” 賬戶類型。
2021:
- Vitalik Buterin、Yoav Weiss、Kristof Gazso、 Namra Patel 以及 Dror Tirosh 提議了通過入口點合約規范進行賬戶抽象的 EIP-4337。
- 其目的在於避免共識層協議變更,而是依靠更高層次基礎設施。
EIP-86:事務來源和簽名的抽象
根據其 “摘要”,EIP-86 提議實現一系列改變,這些改變服務於 “抽像出” 簽名驗證和 nonce 檢查的綜合目的,允許用戶創建用於執行任意所需簽名/nonce 檢查的 “賬戶合約”,而不是依賴於使用目前這種硬編碼到事務處理的機制。
傳統模型: ECDSA 和默認的 nonce 方案是保護賬戶的唯一方式。
新模型:所有賬戶都是合約賬戶,它可以支付 gas,且用戶可以自由定義他們的安全模型。
以 forwarding contract 為例,作者 Vitalik Buterin 解釋道,這種合約會驗證簽名,如果簽名是有效,它開始向礦工發起付款,然後使用給定的值和數據向指定地址發送調用指令。
➤ 優勢
這個提案的主要優勢如下:
多簽錢包
- 傳統方法:多簽錢包中的每一筆交易都必須由所有的參與者進行同意。我們可以通過將所有參與者簽名結合為單一批准事務對此進行簡化,但這種方法還是會增加複雜性,因為所有參與者的賬戶都必須持有 ETH。
- 新方法:在這個 EIP 的幫助下,現在的合約可以持有 ETH,直接提交包含所有簽名的事務至合約上,合約將會支付這筆費用。
自定義密碼學
- 傳統方法:用戶必須遵循 ECDSA,這是一種使用橢圓曲線的密碼學。
- 新方法:用戶可以升級至 ed25519 簽名或用戶自己希望升級的任何方案;不要求用戶採用 ECDSA。
EIP-2938:賬戶抽象
根據 EIP-2938 的摘要,“賬戶抽象 (AA) 允許合約成為可以支付費用和執行事務的 “頂級” 賬戶。
- 傳統模型:事務的有效性直接由 ECDSA 簽名、一個簡單的 nonce 值以及賬戶餘額進行定義。
- 新模型:
1. 賬戶抽象通過執行隨機的 EVM 字節碼來擴展事務的有效性條件。
2. 為了表示有效性,引入了新的 EVM 操作碼 PAYGAS,還設置了合約的 gas 價格和 gas 使用上限。
3. 賬戶抽象現已分為兩類:
單租戶 AA:這種類型旨在支持錢包或其他參與者很少的用例。
多租戶 AA:這種類型旨在賦能像 Uniswap 這種有很多用戶的應用。
共識變更
- NONCE 操作碼:添加一個 NONCE 操作碼,推送事務的 nonce 字段。
- PAYGAS 操作碼:添加一個 PAYGAS 操作碼,創建一個不可逆的檢查點,確保 PAYGAS 之前的狀態變更無法被逆轉。
Sam Wilson 是這個提案的作者之一,它在這裡解釋了 AA 事務與其他傳統事務的不同之處。
在 AA 事務中,不會有 gas 價格或是 gas 上限、沒有發送的值和簽名字段,並用 target 代替 to 。在多簽合約中,這些字段在 calldata 中進行傳遞,並用合約進行處理。
如果一筆事務到達節點,事務的有效性會被檢查。但是傳統事務和 AA 事務進行檢查的方式不同。
- 在傳統事務中:節點檢查:他們的 nonce 與賬戶的下一個 nonce 匹配、賬戶餘額足以支付他們的價值以及最高的 gas 費用,並且他們的簽名與賬戶的地址匹配。
- 在 AA 事務中:節點檢查:他們的 nonce 與合約的下一個 nonce 完全匹配、合約的字節碼以標準的前綴開始、驗證邏輯在達到驗證 gas 上限之前調用 PAYGAS 、沒有禁止的操作碼在 PAYGAS 之前被調用,以及合約餘額足夠支付 PAYGAS 設定的 gas 費。
區塊廣播時間是一個新區塊到達網絡大多數節點所需平均時間。
當具有 AA 事務的區塊到來時,同一賬戶的所有待處理事務都將被刪除。另一方面,傳統事務會被重新驗證並可能在收到新區塊時發布。
EIP-4337:通過入口點合約實現的賬戶抽象
這是 Vitalik Buterin 和社區提出的最新議案。它作為一項 ERC 提議出來,而這個提案包括了避免共識層協議的變更,而依靠於更高層的基礎設施。
它旨在完成下列目標:
- 賬戶抽象:允許用戶使用包含隨機驗證邏輯的智能合約錢包作為他們的主要賬戶,而不是 EOA。
- 去中心化:允許打包交易捆的人參與包含賬戶抽像用戶活動的過程。用戶不需要知道任意活動者的直接通信地址,就可以處理髮生在整個公共內存池中的任意活動。
- 無共識變更:為了更快的採用,這個提案避免了共識變更。
- 交易費支付:用 ERC-20 標準的代幣支付交易費,使得開發者為其用戶支付費用,以及類似於 EIP-3074 這樣的讚助的交易提案所支持的用例。
這項提案怎麼運作?
Vitalik Buterin 在這裡很好地解釋了這項提案的運作。
這是賬戶抽象最新的提案,現在還是 draft(起草)狀態,等待被合併成為一項 EIP。對比常規的以太坊事務內存池,這項設計增添、維護以及犧牲了一些功能。
關鍵亮點
➤ 沒有中心化的活動者、移除了用戶端錢包設置複雜性,完全支持 EIP-1559、具有代替交費的能力,發送一個比舊 UserOperation 具有更高溢價的新 UserOperation 來替換操作或保留了讓它更快被打包的功能。
➤ 有一些增添的新優勢:
- 驗證邏輯的靈活性
- 足以讓執行層達到量子安全
- 錢包可升級性
- 執行邏輯靈活性
➤ 然而,儘管協議已經盡了最大的努力,它還是會略微增加 DoS 攻擊的可能性,它還會增加 gas 開銷,並且一次只執行一個事務。
賬戶抽像用例
錢包
EOA 和合約錢包
- EOA 錢包:由私鑰保護的錢包。
- 合約錢包:使用智能合約在鏈上實現的錢包。
- 安全考慮:如果智能合約代碼中存在 bug,合約錢包將面臨來自易受攻擊的智能合約的安全風險。這種風險可以通過由錢包提供商完成的安全測試和審查進行最小化。然而,在 EOA 錢包中,風險會完全由錢包用戶承擔,就像用戶不小心丟失了私鑰也由他們自己承擔。
Argent, Dapper, Gnosis Safe 和 Monolith 都是智能合約錢包的案例。
EOA 的元交易
以太坊區塊鏈用戶需要一個持有 gas 的 EOA 與區塊鍊網絡進行連接,或依賴錢包供應商通過他們的中繼或第三方中繼網絡(例如 Gas Station 網絡)促進元交易。前者依賴於 (需要做 KYC 的) 中心化交易所購買的 ETH,試圖通過將消費者的責任轉移給中繼者來盡量減少用戶體驗摩擦,費用由鏈上/鏈下錢包供應商和/或鏈下用戶支付。
元交易是一種包含了帶有執行交易意願者所簽署的數據信息的交易。
基於中繼者的架構有一些缺點:
1. 可以將他們視作擁有抑制交易能力的中心化中介
2. 由於中繼交易需要額外的 21,000 基本 gas 收費,及其公司在 gas 費基礎上盈利的需要,他們在技術上/經濟上的效率低下。
3. 對中繼者專用協議權力的使用。
賬戶抽象允許智能合約錢包在不依賴中繼網絡的情況下,接受用戶的無 gas 費的元交易並為他們支付 gas 費。在不失去以太坊去中心化保證的情況下,這種基礎層的能力還會大大提升這種錢包的 UX(用戶體驗)。
贊助交易 (Sponsored Transactions)
Sponsored Transactions 囊括在 EIP-2711 (狀態為已撤銷) 中,這個 EIP 提議了一種機制:通過允許其他人代付 gas 費,可以讓人們無需擁有任何 ETH 就可以進行交易。
一些用例:
1. 允許應用開發者代表用戶支付費用。
2. 允許用戶用 ERC-20 代幣支付費用,合約則像中介收集 ERC-20 代幣並以 ETH 的方式支付網絡費用。
運作
這項提案可以通過出納機制 (paymaster mechanism) 來支持這些用例。
- 對於用例 1:Paymaster 會驗證贊助者的簽名被納入在 paymasterData 中,表明贊助已做好為 UserOperation 進行支付的準備。如果簽名有效,Paymaster 就會接受這項指令,並從贊助者的份額中扣除 UserOperation 的費用。
- 對於用例 2:Paymaster 會檢查 sender 的錢包是否有足夠的 ERC-20 餘額來支付這項 UserOperation。如果足夠,Paymaster 會接受這項指令,並在索要 postOp 裡的 ERC-20 代幣之前支付 ETH 費用。
混幣
一起探討 Tornado Cash 混幣機制的例子,以此理解我們如何在 DeFi 協議中使用 AA。
傳統的 Tornado Cash 合約中的隱私問題
- 當用戶進行提款時,Tornado Cash 為其提供隱私保護。他們可以證明這筆款來自一筆獨一無二的存款,但除了用戶之外沒人知道這筆存款來自哪裡。
- 用戶通常不會在自己的提款地址裡持有 ETH,如果用戶使用他們的存款地址來支付 gas,這就會在存款地址和提款地址之間生成一條鏈上鍊接。
這個問題可以由第三方中繼者解決,他們會驗證 ZK-Snark 和 nullifier 仍然有效的狀態,發布使用其 ETH 支付 gas 的交易,並從 Tornado Cash 合約中收集用戶的返款。
賬戶抽象提供的解決方案:用戶可以提交一個針對 TC 合約的 AA 事務,在這之後執行 ZK-SNARK 驗證和 nullifier 檢查,並直接快速地調用 PAYGAS。這可以讓提款者直接用發送到他們提款地址的代幣中支付 gas,無需中繼者或連接其存款地址的鏈上鍊接。
DeFi 協議
一起探討 DeFi 協議 Uniswap 的案例,了解我們可以在 DeFi 協議中如何使用 AA。
可以創建一種 Uniswap 的新版本,它允許直接進行針對 Uniswap 合約的交易。
目前,用戶可以將代幣提前存進 Uniswap;Uniswap 可以儲存用戶的餘額和公鑰,以便驗證花費這些餘額的事務。
AA 的目標在於通過禁止不符合高級標準的事務被打包到鏈上(例如,匹配訂單的存在),從而提高 DeFi 協議的 gas 效率。
在傳統模型中:正常的交易員會將他們的代幣儲存在 Uniswap 的合約之外。
在新模型中:套利交易員會將他們的代幣存在 Uniswap 上,在外部市場發生變化的情況下,他們還可以轉移執行套利的交易。最終,另一個套利交易員如果首先執行這筆交易時,這些沒有獲利的交易不會被打包上鍊。這讓套利交易員避免了支付 gas 並減少了打包上鍊的垃圾交易數量。這將會增加區塊鏈的可擴展性和市場效率,因為套利交易者更能做到糾正跨鏈交易在價格上的差異。
套利交易員指的是利用兩個或更多市場之間的差價,由此同時低價購入並高價賣出的交易員。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。