🎉 #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 聯合推廣任務上線!
本次活動總獎池:1,250 枚 ES
任務目標:推廣 Eclipse($ES)Launchpool 和 Alpha 第11期 $ES 專場
📄 詳情參考:
Launchpool 公告:https://www.gate.com/zh/announcements/article/46134
Alpha 第11期公告:https://www.gate.com/zh/announcements/article/46137
🧩【任務內容】
請圍繞 Launchpool 和 Alpha 第11期 活動進行內容創作,並曬出參與截圖。
📸【參與方式】
1️⃣ 帶上Tag #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 發帖
2️⃣ 曬出以下任一截圖:
Launchpool 質押截圖(BTC / ETH / ES)
Alpha 交易頁面截圖(交易 ES)
3️⃣ 發布圖文內容,可參考以下方向(≥60字):
簡介 ES/Eclipse 項目亮點、代幣機制等基本信息
分享你對 ES 項目的觀點、前景判斷、挖礦體驗等
分析 Launchpool 挖礦 或 Alpha 積分玩法的策略和收益對比
🎁【獎勵說明】
評選內容質量最優的 10 位 Launchpool/Gate
EIP-7702解析:帳戶抽象的新紀元與EOA能力升級
深入解讀以太坊帳號抽象賽道的過去與未來
本文分爲兩大部分:
首先,從2015年的第一個AA提案開始,系統梳理目前爲止的EIP提案主要內容,回顧AA歷史提案的歷程,並綜合評價各方案優缺點。
其次,重點對比EIP4337提出後面臨的市場低迷反饋,深入分析即將納入以太坊下次升級的EIP7702,這一提案一旦合並將全面改變鏈上應用形態。
EIP-7702具有劃時代的意義,讓我們詳細了解一下。
1. 帳號抽象的背景
1.1 帳號抽象的意義定位
以太坊創始人Vitalik在2023年底再次更新ETH發展路線圖,但對帳號抽象的定位沒有改變。當前主流模式正從EIP-4337過渡到下一階段的自願轉換EOA帳號。
在EIP4337推出一年多以來(2023年3月1日在丹佛的WalletCon上正式發布),一直得到用戶廣泛認可但未被廣泛使用。在這種矛盾的市場環境下,EIP-7702的進度大幅提前,已確定將在下次升級中合並。
1.2 帳號抽象的市場現狀
經過一年半發展,EIP4337在主流鏈上僅有1200萬地址,其中以太坊主網上活躍地址僅6,764個,遠低於EOA和CA地址數量。以太坊主網獨立地址數已達2.7億,可以說EIP4337在主網上幾乎沒有實質性發展。
不過這並不影響AA的本質價值。EIP4337設計之初就注定難以很好解決主網的向前兼容問題。隨着各類L2原生嵌入AA,EIP4337地址數在L2上獲得爆發,如Base和Polygon鏈7月活躍用戶分別達到100萬和300萬,還是相當可觀的。
因此,並非EIP4337設計有誤,它有很多優點。當前現狀源於主網與L2之間的差異,它們需要各自適合的方案。
2. 什麼是帳號抽象?
帳戶抽象本質上是解決產權分離的問題。
以太坊虛擬機(EVM)中有兩種帳戶:外部帳戶(EOA)和合約帳戶(CA)。EOA的所有權和籤名權實際上由同一主體持有。持有私鑰的人不僅擁有帳戶"所有權",還有權"籤名轉移所有資產"。
這是由以太坊帳號交易結構決定的。標準交易結構中沒有From字段,資金轉帳是通過VRS參數(用戶籤名)反解析出From地址。這造成了當前EOA地址產權合並的困境。
EIP4337的核心效果是在交易字段中增加Sender Address,從而將私鑰與操作地址分離。
產權分離的重要性在於:
私鑰難以保護:丟失私鑰意味着失去所有資產。
籤名算法單一:原生協議驗證交易只能使用ECDSA算法。
籤名權限過高:無原生多籤,單籤即可執行任意操作。
交易手續費只能用ETH支付,不支持批量交易。
交易隱私泄露:一對一交易容易分析帳戶持有者信息。
這些約束使普通用戶難以使用以太坊:
因此,破局之道在於實現帳戶抽象,將所有權(Owner)和籤名權(Signer)解耦,從而逐步解決上述問題。
歷史上有多種方案,最終匯聚到兩種路線。
3. AA歷史提案脈絡梳理
問題的解法看似有很多EIP提案,但歸根結底就是兩種核心思路。每個未通過的EIP考慮的問題最終都匯聚到了現有方案中。
3.1 第一種路線:將EOA地址轉爲CA地址
2015年11月15日,Vitalik在EIP-101中就提出以合約作爲帳戶的新結構。將地址改爲只有代碼和存儲空間,支持用ERC20支付手續費,通過預編譯合約將原生代幣改爲類ERC20來存餘額,將交易字段精簡到只有to、startgas、data和code。
這是一種大躍進式變革,會大幅改動底層設計,讓每個帳戶地址都擁有自己的"代碼"邏輯(也正是現在EIP-7702要實現的效果)。
還能衍生出其他功能:
未繼續推進的原因也很簡單,顯然步伐太大,對當前交易哈希衝突問題、安全性隱患考慮不周,所以一直擱置。但每個優點的理念都成爲後續EIP4337和EIP7702的核心功能之一。
後來還有一系列EIP試圖完善這種邏輯:
EIP-859:主鏈帳戶抽象(2018-01-30)
試圖解決Code部署問題。如果交易方合約未部署,則使用交易附帶code參數執行合約錢包部署。還提出新的PAYGAS操作碼,除支付gas外,也作爲交易參數中驗證部分與執行部分的分隔符。
雖然當時無疾而終,但成爲現在EIP7702的核心邏輯之一。EIP7702的每筆交易結合特殊交易結構,可附帶一定代碼,讓EOA地址在本次交易中擁有合約能力。
EIP-7702:設置EOA帳戶代碼(2024-05-07)
這是本文後續討論的核心EIP,由Vitalik發表作爲EIP-3074的替代方案。EIP-3074被棄用,EIP-7702確定將在即將到來的ETH Prague/Electra硬分叉中納入。
3.2 第二種路線:讓EOA地址驅動CA地址
EIP-3074:增加AUTH和AUTHCALL操作碼(2020-10-15)
在EVM中加入兩個新OpCodes:AUTH和AUTHCALL,讓EOA能通過這兩個opcode授權合約代替EOA身分調用其他合約。
概括來說,EOA可將已籤名的消息(交易)發送到自己信任的合約(稱作Invoker),Invoker合約可利用AUTH和AUTHCALL代替EOA發出交易。
EIP-4337:用交易內存池實現帳戶抽象(2021-09-29)
受MEV啓發設計,核心價值是完全避免共識層協議更改。
EIP4337提出新的事務對象UserOperation,用戶將此對象發送到內存池,由bundlers從礦工維度批量打包交付合約執行交易事務,本質上是將底層交易與帳戶運作拉到合約層面執行。
EIP-5189:通過背書人操作抽象帳戶(2022-06-29)
優化了EIP4337邏輯,通過建立資金罰款背書(endorser)機制來防止惡意Bundler的DoS攻擊。
3.3 其他支持AA的提案
EIP-2718:新交易類型的包裝信封(2020-06-13)
已經Final的提案,定義新的交易類型作爲未來新增交易類型的信封。
引入新交易類型時,通過特定編碼區分,只需向後兼容而無需向前兼容。最常見例子是EIP1559,區分了交易手續費,使用新的交易類型編碼,又不影響最初的legacy交易類型。
EIP-3607:禁止EOA地址部署合約(2021-06-10)
AA路徑上的補充方案,防止合約部署地址與EOA地址衝突。控制合約生成方法,不允許將代碼部署到已是EOA的地址上。這個風險很小,以太坊地址有160位長,雖然存在用私鑰碰撞出指定合約地址私鑰的方法,但以比特幣全算力投入估計也需要一年時間。
3.4 如何理解帳號抽象發展歷程?
首先需要理解轉爲CA後的價值。
基本上就是EIP-4337的實際效果,可以實現:
但EIP-4337的核心缺點是違背人性動機原則。
看起來更好,但陷入市場發展死循環:很多Dapp還不兼容,用戶不願使用CA地址,使用CA反而有更高交易成本(普通轉帳場景交易費用翻倍),太依賴Dapp本身的兼容性。
所以在以太坊主網上迄今爲止始終沒有普及。
成本是用戶最重要衡量標準,必須降低成本。
要真正降低GAS,就必須以太坊本身做軟分叉升級,修改GAS計算或操作碼GAS消耗等模塊。既然要軟分叉,不如直接考慮EIP-7702。
4. 全面解析EIP-7702
4.1 EIP-7702是什麼
通過新的交易類型,允許EOA在單筆交易中臨時具備智能合約功能,支持批量交易、無Gas交易和自定義權限管理等,且無需引入新的EVM opCode(影響向前兼容性)。
讓用戶無需部署智能合約就能獲得大部分AA能力,甚至可以提供第三方代用戶發起交易的能力,不需要用戶提供私鑰,只需籤名授權信息。
4.2 數據結構
定義新的交易類型0x04,TransactionPayload是以下內容的RLP編碼序列化結果:
rlp([ chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s ])
重要的是新增了authorization_list對象,存儲籤名者希望在其EOA中執行的代碼。用戶簽署交易的同時也簽署要執行的合約代碼,作爲二維列表存在,可以批量存放多個操作信息,執行批量操作。
authorization_list = [[chain_id, address, nonce, y_parity, r, s], ...]
4.3 交易生命週期
4.3.1 驗證階段
執行交易開始階段,對每個authorization_list的[chain_id, address, nonce, y_parity, r, s]元組:
從籤名r、s中用ecrecover恢復出籤名者地址。
驗證鏈ID(防分叉鏈重放)。
驗證authority籤名者代碼是否爲空或已委托(驗證交易是否爲有效7702交易)。
驗證authority籤名者nonce(防authority籤名重放)。
設置authority籤名者代碼爲0xef0100 || address(繞過EIP3607防碰撞策略)。
增加authority籤名者nonce(防局部籤名重放)。
將authority籤名者帳戶添加到已訪問地址列表(轉熱地址,降低查詢存儲gas費)。
4.3.2 執行操作階段
"新"版本僅更改代碼部署行爲。
不再將帳戶代碼設爲contract_code,而是從authorization_list中檢索代碼address並設爲帳戶代碼。
執行授權代碼時,從authorization_list的address字段指定地址加載代碼,在籤名者帳戶上下文中執行。
用戶合約代碼實際存儲在鏈上特定地址,不直接包含在交易中。
操作指令和相關參數存儲在交易負載的data字段。
4.4 EIP-7702的價值
對Web3錢包全鏈路都有變化,用戶體驗