在以太坊重點發展 Layer 2 的格局已定的現在,Vitalik 對以太坊升級的後續計劃開始轉向賬戶抽象。
作者:鹿目圓,IOBC Capital
封面: Photo by Shubham Dhage on Unsplash
以太坊系統中實際存在兩種類型的賬戶:
- 一種是由私鑰控制的外部賬戶(externally-owned account,EOA),比如我們所使用的錢包中的賬戶,這類賬戶都有自己的餘額。擁有者可以通過創建和簽名一筆交易從自己的外部賬戶發送消息;
- 另一種是由部署到區塊鏈上的代碼控制的合約賬戶(contract account),由存儲在智能合約賬戶(有時也被稱為智能錢包)內的以太坊虛擬機代碼控制。當合約賬戶收到信息時,其內部代碼就會被激活,並允許它對內部存儲進行讀取和寫入以及創建新合約等操作。
按照目前的以太坊協議,只有外部帳戶才可以發起交易,並且僅允許賬戶的所有人修改其帳戶狀態。
什麼是賬戶抽象化?
賬戶抽像是對以上兩種賬戶的一種改進,嘗試模糊二者之間的界限,變成一種包含複雜邏輯的通用性賬戶,使賬戶可以同時擁有合約賬戶和外部賬戶的功能。
這種做法相當於讓用戶按照合約賬戶的格式來定義外部賬戶,用戶可以在智能合約錢包中包含任何邏輯驗證。由密鑰控制的賬戶也可以獲得代碼的支持。
賬戶抽象化的各種方案
一直以來,實現賬戶抽象化都是以太坊開發者社區的願景。社區也提出了各種各樣的方案,如:EIP-86,EIP-2938 等。
EIP-86 是為賬戶抽像做技術準備,它定義了一種新的賬戶類型,允許用戶創建基於智能合約的賬戶。
以太坊協議本身要求將所有內容打包到源自 ECDSA 安全的外部賬戶 (EOA) 的交易中,每個用戶操作都需要由來自 EOA 的事務包裝,這會產生 21000 gas 的費用。用戶需要在單獨的 EOA 中擁有 ETH 來支付 gas。EIP-86 提出的賬戶抽象帶來新類型的事務,與傳統事務必須有一個 EOA 作為發送者相比,這些事務沒有發送者。這種事務破壞了事務哈希的唯一性。
EIP-86 原計劃於 Metropolis 階段升級,但由於前面所說的問題,開發者決定在 Metropolis 中暫緩引入。
EIP-2938 提供了一種賬戶抽象化解決方案,通過更改一部分以太坊協議,允許合約賬戶與外部賬戶一樣可以發起交易。但是由於這個方案需要在共識層進行以太坊協議的更改,所以並沒有得到廣泛的接受。後來提出的新的協議 ERC-4337 則提供了一種無需更改共識協議的方案試圖達到與 EIP2938 同樣的效果,這種安全性更高的實現方式目前在社區中得到了更多的關注。
ERC-4337 如何實現?
ERC-4337 沒有試圖修改協議共識,而是在系統中復制了 mempool 的功能。
用戶發送一個用戶操作(UserOperation)對象,這個對像中包括了用戶的意圖、簽名和其他數據。
用戶操作有一個單獨的 mempool 存儲池,連接到這個存儲池的節點會進行 ERC-4337 特定的驗證,以過濾操作來確保他們只收到支付費用的操作。
由礦工或使用 Flashbots 服務的打包者批量收集這些用戶操作,打包成單筆捆綁交易(bundle transaction),並納入以太坊區塊中。打包者為以太坊中的捆綁交易支付 gas fee,並收取每個單獨的 UserOperation 所支付的費用進行補償。打包者將使用費用優先級邏輯選擇包含哪些 UserOperation 對象。
其中的用戶操作 UserOperation 看起來像一個事務,但它是一個 ABI 編碼的結構,包括了以下字段:
1、發件人:進行操作的錢包;
2、nonce 和 signature:傳遞給錢包驗證函數的參數,以便錢包可以驗證操作;
3、initCode:如果錢包尚不存在,則用於創建錢包的初始化代碼;
4、callData:用於實際執行步驟調用錢包的數據。
而每一個錢包都是一個智能合約,必須包括兩個功能函數:
1、validateUserOp,它接受一個 UserOperation 作為輸入。這個函數應該驗證 UserOperation 裡的簽名和 nonce,如果驗證成功則支付費用並增加 nonce,如果驗證失敗則拋出異常;
2、op 執行函數,將 calldata 解析成錢包執行操作的一個或多個指令。
ERC-4337 帶來的變化
如果該提議被普遍採用,簽名驗證轉移到了以太坊虛擬機(EVM)上,validateUserOp 函數添加了任意簽名和隨機數驗證邏輯,使驗證邏輯變得更加靈活。
如此一來,簽署交易之時就能採用新的密碼學工具,錢包也可以提供一些新的功能,比如:
- 多重簽名;
- 社交恢復;
- 更高效、更簡單的簽名算法(例如 Schnorr、BLS);
- 後量子安全簽名算法(例如,Lamport、Winternitz);
- 可升級錢包。
這種方案還打開了各種其他交易許可管理,比如允許交易通過智能合約來支付 gas 費。
在目前,外部錢包要在以太坊上交互的 gas fee 只能通過錢包中的 ETH 來支付,如果你的錢包中只有 ERC-20 代幣,沒有 ETH,你將沒有辦法將這些代幣轉出。當 ERC-4337 採用後,用戶可以使用賬戶中的 ERC-20 代幣來支付費用,由礦工節點用合約作為中介來代為支付 ETH 上鍊並獲取用戶的 ERC-20 代幣。
抽象化實現後,由外部賬戶的所有者簽名交易並進行廣播將不再是發起交易的唯一方法。這將為以太坊充當元交易的中繼者帶來可能。目前許多以太坊上的應用都需要依靠中繼者在區塊鏈上發布用戶交易,並向中繼者支付費用。如果錢包中可以內置更複雜的合約,有些中繼者就不再有存在的必要,也就不需要向他們支付額外的費用。
雖然有很多優點,但是新方案也同樣面臨一些問題。最突出的一點就是更高的 Gas 成本,基本的 ERC-4337 操作約需要 42000 gas,而常規交易需要 21000 gas,原因如下:
1、需要支付大量的單個存儲讀/寫成本,在 EOA 的情況下,這些成本會捆綁到一筆 21000 gas 的付款中:(1)編輯包含 pubkey+nonce (~5000) 的存儲 slot;
(2)用戶操作調用數據成本(約 4500,通過壓縮可減少到約 2500);
(3)ECRECOVER (~3000);
(4)首次訪問錢包本身 (~2600)
(5)首次訪問收款人賬戶 (~2600)
(6)將 ETH 轉入收款人賬戶 (~9000)
(7)編輯存儲以支付費用(~5000)
(8)訪問包含代理 (~2100) 的存儲 slot,然後訪問代理本身 (~2600);
2、除了上述存儲讀/寫成本之外,合約還需要執行 “業務邏輯”(解包 UserOperation、對其進行哈希、洗牌變量等)
3、需要消耗 gas 來支付日誌費用(EOA 不發布日誌);
4、一次性合約創建成本(約 32000 gas,加上代理中每個 code byte 200 gas,再加上設置代理地址的 20000 gas)
簡而言之,賬戶抽像地址的每一步都需要計算,需要消耗更多的資源,也增加了額外的費用。
好在這並不是無解的。
由於 Rollup 擅長進行數據壓縮,與數據複雜的賬戶抽象方案具有天然的契合點。
在 Vitalik 最新的提案中,提出了通過 layer 2 來處理賬戶抽象化產生的數據。其改進點在於,將只能分步驟實現的功能打包成批交易,同時用 SNARK 技術來保證交易有效性。通過將 ERC-4337 與 Rollup 技術結合,可以在賬戶抽象化中實現數據壓縮和降低 gas 成本的效果,更好地發揮賬戶抽象的優勢。
結語
在以太坊重點發展 Layer 2 的格局已定的現在,Vitalik 對以太坊升級的後續計劃開始轉向賬戶抽象。最新的提案中展示了 rollup+賬戶抽象的技術路徑。各個 Rollup 提供商也推出了兼容賬戶抽象的新版本。今年 6 月,zkSync 發布 V2 更新信息:增添 “賬戶抽象” 功能,增加與以太坊 EVM 的兼容性。10 月,ERC-4337 發布了新版本,添加了包括 BLS 簽名算法的簽名聚合功能。簽名聚合能夠讓構建者和批次提交者也能聚合簽名(例如 BLS、SNARKs),大大減少鏈上數據,可為 rollups 降低數據成本。
我們有理由相信,賬戶抽象帶來的變化同樣蘊藏著生態爆發的可能性。隨著 Rollup 的發展,可以與 Rollup 進行結合的賬戶抽象化一定也能發展出更優更精細的方案。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。