作者:Alex Connolly,Immutable聯合創始人兼CTO,翻譯:0xjs@金色財經
最近宣布,EIP-3074將包含在下一個以太坊硬分叉中,作為以太坊錢包用戶體驗的協議級改進。以太坊社群出現了各種奇怪的反應:
-
慶祝活動:「…以太坊使用者體驗的重大升級」(Uniswap 創辦人)
-
擔憂:「…問題很大」(Gnosis 創辦人)
-
困惑:「心情複雜…不確定這是正確的策略」(EIP-3074 作者之一)
那麼EIP-3074到底是什麼呢?用戶的資產安全嗎?這與智慧合約錢包、帳戶抽像或ERC-4337 有什麼不同?為什麼以太坊社群用令人困惑的數字來命名一切?
如果你是EVM 的常規用戶或開發人員,那麼有必要了解錢包的下一步發展方向。但首先,讓我們從頭開始。
EOA與智能合約錢包
EVM 的基本帳戶原語是外部擁有帳戶(EOA)。
-
帳戶:以太坊地址(例如0xabcdef)
-
外部擁有:該位址的控制者是加密私鑰
另一種類型的以太坊「帳戶」是智慧合約,它也有一個地址,但包含程式碼且沒有原生控制金鑰:如果你想透過智慧合約帳戶發送交易,你需要將該功能建置到其程式碼中!
以太坊上的所有交易都必須由EOA 發起,因此它們是迄今為止用戶最常見的以太坊帳戶類型。然而,EOA 有許多主要的使用者體驗和安全缺點:
-
他們必須有足夠的ETH 在交易中用作Gas(如果用戶擁有其他有價值的資產,例如NFT,但沒有ETH,則會出現問題)
-
他們無法以原子方式發送捆綁交易或與>1 個智能合約交互
-
他們不能有鏈上恢復機制(例如社交恢復)
-
它們很容易被洩露,如果它們被洩露,你的所有資產都將被盜
為了解決這些挑戰,區塊鏈研究社群的一個長期目標是「帳戶抽象」(AA):將用戶從EOA切換到由鏈上程式碼控制的「智慧合約錢包」。使用者通常仍然需要設備上的一些密鑰材料,但我們可以將任意邏輯編寫到智慧合約程式碼中來控制用戶資產並解決上述問題。
一些鏈已經引入帳戶抽象化作為原生原語(例如Starknet ),而以太坊則滿足於讓錢包提供者創建自己的智能合約錢包實現。現在有數十種智慧合約錢包,它們為不同的目的提供不同的功能(例如Gnosis Safe、Argent、Coinbase 智慧錢包、Immutable Passport)。
然而,數字不言而喻:不到0.1% 的以太坊用戶使用智慧合約錢包,但仍有數千萬活躍的以太坊EOA 。讓這些用戶進行切換是一項艱鉅的任務,也是一場安全噩夢。
EIP-3074有什麼幫助?
EIP-3074於2020 年底提出,旨在幫助EOA 用戶立即獲得帳戶抽象的一些好處,而無需將其帳戶完全轉換為智慧合約錢包。
EIP-3074 引入了兩個新的操作碼:AUTH 和AUTHCALL。這些操作碼允許使用者透過簽署訊息來臨時將對EOA 帳戶的控制權委託給另一個帳戶(“invoker呼叫者”,通常是智能合約)。然後,另一個帳戶(「sponsor/bundler」)發送交易,該交易使用該訊息和AUTH 操作碼來使委託正式上鍊。然後,「呼叫者」帳戶可以使用AUTHCALL 作為使用者進行交易。
可能會有一些標準呼叫者合約(例如處理批次的合約),而這些呼叫者將複製帳戶抽象的一些關鍵使用者體驗優勢!
大量交易
考慮ERC20 批准+ 轉帳的常見流程,目前EOA 需要兩個單獨的以太坊交易。透過委託給批次呼叫程序,這可以減少為一筆交易(儘管錢包仍然需要顯示兩次確認)。此外,許多應用程式試圖透過在用戶第一次互動期間請求無限制的花費批准來避免後續互動中的這種「雙重請求」。這會讓用戶致命地暴露於這些協議中未來的任何錯誤中,因此透過避免它,我們將免費獲得巨大的安全改進!
Gas贊助
假設我們的用戶錢包裡有20 美元的USDC,但沒有ETH 用來支付Gas 費(例如swap費)。 dapp 可以透過呼叫者要求代表使用者行事的權限,自行支付Gas 費,然後從使用者的USDC 餘額中尋求補償。呼叫者合約必須包含邏輯,限制其發送的交易僅發送給用戶透過明確簽名批准的交易。
其他自訂呼叫程式可能會隨之而來,用戶可以存取此UX,而無需離開現有的、熟悉的錢包(假設這些錢包添加了EIP-3074 支援)。
這與ERC-4337 有什麼不同?
等等,我以為我們已經有了一個帶有奇怪號碼的帳戶抽象提案? ERC-4337發生了什麼事?
ERC-4337是智慧合約錢包的標準,旨在整合目前分散的智慧合約錢包生態系統。 ERC-4337帳戶是完整的智慧合約錢包:用戶資產儲存在智慧合約中而不是EOA。有很多不同的實現,但ERC-4337 交易的整體流程如下(請注意alex.eth 是智能合約):
ERC4337 的目標是在不對核心EVM 進行任何更改的情況下引領智能合約錢包的廣泛採用。最終,帳戶抽像很可能會原生融入到鏈中:已經有計劃透過RIP-7560將原生帳戶抽象化引入以太坊L2 ,並且這可能在未來擴展到以太坊本身(透過EIP-2938或後續版本) 。
如今,ERC-4337 仍處於起步階段。該標準尚未最終確定,上週所有EVM 鏈上僅有約200,000 筆ERC-4337 交易(Polygon 上的交易量超過90%)。 EIP-3074 和ERC-4337 是對錢包用戶體驗的平行改進,目前大多數以太坊用戶都是EOA 用戶。兩者的支持者都認為,改進以太坊使用者體驗的最快方法是在兩個方面盡快推進!
那為什麼有些人反對EIP-3074?
EIP-3074 是一個潛在的主要安全攻擊媒介
你在Twitter 上看到的最常見的抱怨是,在EIP-3074 之後,「一個簽名就可以耗盡我帳戶中的所有ETH、ERC20 和NFT」。這是事實:委託給惡意呼叫者,使用者的所有資產都將遺失。當然,帶有EOA 錢包的惡意“導出私鑰”,用戶的資產也會丟失。但簽名在web3 應用程式的標準流程中更為常見,許多用戶只是盡快確認。
然而,這裡有一些重要的警告。 EIP-3074 簽名非常容易識別——它們必須有一個“魔法前綴”(字面就是“0x04”)。如今,大多數錢包僅支援使用ERC-191中定義的不同前綴進行簽名,因此任何當前簽名被用來欺騙EIP-3074 委託的可能性很低(但不是零! )。隨著錢包實現對EIP-3074 的支持,它們可能會引入非常可怕的螢幕,讓用戶在簽署此訊息之前仔細檢查他們的操作——想想「匯出你的私鑰」的安全等級。這限制了EIP-3074 的UX 優勢:如果你每次想要使用不同的呼叫程式時都需要批准大紅色警告螢幕,那麼我們還沒有取得任何進展。
為了解決這個問題,許多錢包可能會選擇實施經過批准的呼叫程序清單(例如標準交易批次程序),並且僅在用戶超出這些範圍時才顯示可怕的螢幕。然而,這是一個明顯的中心化問題,在不同的錢包之間會有所不同,並且依賴dapp 和錢包之間的協調(例如,兩者都選擇相同的Gas 贊助呼叫者)。
假設用戶的錢包明智地部署了EIP-3074,則沒有理由相信EIP-3074 將成為安全災難。但這是無數個以太坊錢包的重大假設。無論如何,這都將是一個重要的新攻擊媒介,毫無疑問會導致一些引人注目的事件——我實際上想知道偽裝的批量交易(適用於所有AA 錢包)實際上是否是最大的長期風險領域。
EIP-3074不會永久「抽象」你的錢包
有人將EIP-3074 描述為「將你的EOA 升級為智慧合約錢包」。這是一種誤導——更準確地說,用戶是“暫時允許智能合約代表你行事”,它有一些主要限制:
-
委託給呼叫者是暫時的,可以隨時撤銷。這意味著,如果有人洩漏你的私鑰,或誘騙你簽署惡意交易,你的資產仍將被偷走。你可以獲得帳戶抽象的一些使用者體驗優勢,但沒有任何安全優勢。事實上,EIP-3074 可能會大大降低錢包和用戶升級到完整智慧合約錢包的動力——這與我們的長期目標相矛盾。
-
每當你發送實際的EOA 交易時,你將清除任何現有的呼叫者授權。這對於快速撤銷來說非常棒,但如果你出於任何原因需要發送非EIP-3074 交易,你將必須重新經歷錢包的「可怕的螢幕」過程,以獲取所有現有的授權。這不好玩。
對於以太坊社群的許多人來說,這感覺像是工作完成了一半。如果我們要花2-3 年的時間來讓dapp 和錢包支持EIP-3074 交互,為什麼不實現使這些委託永久化的能力,並完全替換帳戶的代碼(將其完全轉換為智能合約)錢包)? EIP-5003將引入另一個新的操作碼AUTHUSURP,它可以做到這一點,並且現在正在大力推動將EIP-5003 包含在下一個以太坊硬分叉中以「完成工作」。
Safe創辦人對AA全面替代EOA之路的看法
儘管該提案得到了許多主要以太坊社區成員的支持,但這並不是靈丹妙藥:
-
與完整的智能合約錢包相比,EIP-5003 帳戶仍然存在一些限制
-
沒有簡單的方法可以使EOA 私鑰中的現有或新簽名無效,而許多合約將這些簽名視為權威簽名
-
跨鏈支援存在各種各樣的挑戰,儘管其中許多挑戰也存在於ERC-4337 錢包中
EIP-3074 將需要廣泛的錢包基礎設施改變
為了啟用上述贊助和大量交易流程,我們需要一個大致如下圖的流程:
-
dapp 必須確定這些交易應該批量處理在一起
-
dapp 必須知道我們的錢包是否支援批量交易,並且可能需要在交易成本估算中包含錢包使用的特定呼叫程式的成本(以了解他們是否想要贊助)
-
錢包必須知道dapp 是否打算贊助交易
-
錢包必須檢查用戶是否已經批准了必要的批量交易和贊助呼叫者
-
錢包必須能夠將dapp 的「批准和轉移」請求轉換為正確呼叫者的EIP-3074 授權以及後續請求- 或者也許我們要求dapp 這樣做?
-
錢包必須使用其自訂EIP-3074 邏輯向創作批次交易呼叫程式的使用者請求EIP-3074 簽名
-
錢包必須向使用者顯示UI 以確認批次中包含的每筆交易。這必須由每個錢包單獨建造。
Dapp 需要為批次/非批次使用者實作單獨的流程,並針對任何差異進行自訂錯誤處理。正如你所看到的,讓所有用戶/錢包/dapps 支援此流程將是一項艱鉅的任務- 我們甚至還沒有開始跨L2 UX !
這與ERC-4337/智能合約錢包目前面臨的挑戰非常相似,並且已經有新的錢包RPC 方法的提案,例如EIP-5792 (批量交易)、標準化paymaster API(EIP-7677 )、與帳戶無關的用戶操作包(ERC-7679 )和更多人類可讀的錢包權限。在某些/所有情況下,EIP-3074 批次可能能夠搭載這項工作,但我們也完全有可能最終得到3 個獨立的流程(EOA、EIP-3074、ERC-4337)!
這種龐大的實施提升會帶來巨大的現實世界成本:我們讓以太坊越複雜(在EVM 層和錢包RPC 層),我們就越分散開發者的注意力,讓他們無法完成以太坊成功所需的其他一切工作。
總結
對於採用EIP-3074 的用戶/dapps/錢包來說,毫無疑問,EIP-3074 將能夠提供有意義且立即的用戶體驗提升。
然而,存在一個很大的風險,即該功能的使用將非常有限:新的用戶體驗將令人困惑、複雜且跨錢包不同。當dapp 和錢包為EIP-3074 提供廣泛支援時,完整的智慧合約錢包標準將有望擁有工具和成熟度,成為對用戶更具吸引力的目的地。我最希望EIP-3074 作為用戶通往完整智能合約錢包的中間工具,並且我同意這樣的論點,如果不快速包含EIP-5003,這將受到很大的限制。
以太坊社群面臨的最大風險是支持EIP-3074 所需的努力將削弱開發人員試圖將用戶轉移到完全帳戶抽象錢包的努力。 ERC-4337仍然不是最終版本,錢包<>dapp 層的關鍵EIP 仍然懸而未決,並且透過RIP-7560 在L2 上進行原生帳戶抽象化的嘗試吸引力相對較低。進一步劃分開發者關注點不太可能產生更好的結果!
最終,EIP-3074 是否是一個好主意將取決於它成為其他帳戶抽象路徑(ERC-4337 和原生)的特洛伊木馬的程度。在成功案例中,EIP-3074 是一次出色的即時升級,並激勵dapp 開發人員整合啟動ERC-4337 採用所需的工具。在失敗的情況下,我們最終會發現dapp 開發人員需要為8 種不同類型的以太坊帳戶維護自訂流程!