前言
一級標題
在2023.3.1 號丹佛的WalletCon 上,官宣由以太坊基金會開發人員設計實現的ERC-4337 的核心合約已經通過了OpenZeppelin 的審計,通過各項測試,目前審計後的合約已經順利部署在以太坊主網以及若干測試網,後續可在各EVM 兼容鏈上運作包括Polygon、Optimism、Arbitrum、BNB Smart Chain、Avalanche 和Gnosis Chain 等。
一級標題
一級標題
二級標題
二級標題
1、賬號抽象的背景
二級標題
1.1、為什麼產權分離是賬戶抽象的目標?
目前在以太坊中有兩種賬戶,分別為外部賬戶(EOA)和合約賬戶(Contract Account)。外部賬戶的所有權和簽名權理論上是同一個體單位持有的;簡單來講,持有私鑰的人不只擁有這個賬戶的「所有權」,同時還有權利「簽名轉移所有資產」。所以當前以太坊上所有權和簽名權是一體的,這樣的外部賬戶(EOA)設計可能會衍伸出一些值得討論的問題:
簽名算法少:原生協議在驗證交易上只能使用ECDSA 簽名和驗簽算法。
簽名權限高:無原生多簽(多簽只能通過智能合約實現協作),單簽即可執行任意操作
多幣種受限:交易手續費只能通過ETH 支付,並不支持批量交易。
其次單純的合約錢包(CA)也有一定問題:
對合約錢包的操作必須由EOA 發起(實質是調用合約),每筆交易將多消耗21000 Gas。 (當前以太坊交易的驗證方式是固定的,只有持有了有效的ECDSA 簽名、Nonce 值和足夠
的賬戶餘額,一筆交易才算有效)。
私鑰難保護:用戶失去私鑰(遺失、黑客攻擊、密碼學上的被破解)意味著地失去所有資產。
交易隱私洩露:一對一交易容易分析賬戶持有者的隱私信息。
需要EOA 有足夠的ETH 來支付Gas(管理兩個賬戶),或者依靠Relayer 支付Gas(導致中心化)。以太坊賬戶抽象萬字研報:拆解10 個相關EIP 提案與衝擊千萬級日活用戶瓶頸的七年之路
拓展閱讀:
以太坊賬戶抽象萬字研報:拆解10 個相關EIP 提案與衝擊千萬級日活用戶瓶頸的七年之路
以太坊賬戶抽象萬字研報:拆解10 個相關EIP 提案與衝擊千萬級日活用戶瓶頸的七年之路
二級標題
二級標題
正文
正文1.2、EIP-4337 與折中方案對比
正文1.2.1、折中1-多簽合約錢包方案總之,這裡很多的優點都源於合約本身的高度定制能力,同樣的缺點則是依賴於EOA 賬戶做管理員來驅動,
只需和合約中籤名的算法綁定的
正文
正文
(確保合約可以完成解簽,但不限於只能基於ECDSA和secp 256 k 1 簽名), 而簽名這件事本身可以有多種算法實現,不同算法性能和交互模式不同,而這將帶來的核心變化是,如更好的將簽名的功能轉入手機設備端實現從而實現便攜的硬件錢包。這點主要的挑戰是安卓等設備開放性過高,不可能私鑰存手機,需要單獨的簽名芯片等。
正文
1.2.2、折中2-元交易標準
這點優化折中針對的是用戶執行鏈上行為必須依賴已有ETH 作為手續費,採用元交易標準後
用戶體驗上:用戶雖然賬戶中沒有ETH(實為沒有Polygon 鏈的原生通證MATIC),但可仍通過網⻚界面鑄造NFT:用戶僅需簽即可,我們創建交易、為之代付燃料費、將之提交上鍊執行。
幕後執行上:
用戶對結構化數據進行簽名,這個數據與簽名是要求NFT 合約鑄造一個NFT 給他
數據與簽名被發送給中繼器(Relayer)
鏈下中繼器(某EOA 賬戶)向鏈上發起交易,送到鏈上可信的傳遞者合約(Forwarder)
而NFT 合約是定制的,會將這樣方式傳遞的交易中的原始發起者視為是用戶,而非msg.sender
我們最終交互的合約(即NFT 合約)必須定制。這導致而無法與鏈上已經存在的、未定制的合約進行交互,這大幅減少能夠適用的範圍。
拓展閱讀:
拓展閱讀:
https://research.web3 caff.com/zh/archives/4660
拓展閱讀:
一級標題
一級標題
EIP-4337 標準智能錢包實踐研究報告:全景式呈現4337 標準實例實現過程及機遇探討
一級標題
2、為什麼4337 可以實現產權分離?
現在在去中心化的領域是不存在免費的信任,身份驗證必須基於密碼學證明,所以無論哪種提案都是需要管理某種意義的私鑰,而要實現體驗上的折中,首要打破的就是目前賬戶權限的過於集中,整體改造方式按針對的對像或者環節可以分成三種大方向:
改造鏈上交易類型(EIP-101、EIP-86、EIP-859、EIP-2718 )改造鏈上主體對象(EIP-2938、EIP-3074、EIP-3607、EIP-5003 )在下圖,EIP-4337 方案納入了最新路線圖,這也宣告著以太坊最終在這兩條路徑中做出了決定。
EIP-4337 是迄今為止是AA 的最佳方案。
二級標題
2.1、 4337 運作原理
正文
正文
後續深入理解最新進展所面臨的難題和挑戰還是需要先理解原理,咱們從涉及的角色,分工,對照傳統交易的執行流程來梳理。
正文
2.1.1、 4337 標準涉及的角色
UserOperations 用戶操作對象,是用於與合約賬戶執行交易的偽交易對象。這些是由創建者的應用程序所創建的。
Wallet Contracts 是用戶最終擁有的鏈上身份,屬於智能合約帳戶。
正文
正文
Paymaster Contracts 是可選的代付智能合約。
正文
2.1.2、 4337 交易的執行流程
我們來重新按完成一筆以太坊轉賬的流程來梳理下按照ERC-4337 實現的交易是怎樣的:
打開錢包:用戶管理持有的私鑰工具,如Metamask,Bitkeep,Bitizen 等(此步驟不變)。
交易簽名:用私鑰對新的若干字段做簽名操作,稱之為UserOperation 用戶操作對象(指令不變,但內容字段變化,可選用非ECDSA 的簽名算法)。
發送交易:稱之為Bundlers 打包者或是捆綁器,本質仍是由某個負責出塊的礦工操作(發送不變,發送對象改為指定礦工)。
礦工打包:bundlers 把用戶發送的操作簽名解析驗證後由礦工單獨再簽名一筆交易來包裹用戶的指令,批量地將用戶的操作指令轉發到某個合約錢包中再由合約來驗證用戶的簽名並執行(徹底改變)。
由於交易是礦工簽名並發送的,因此from 是礦工,原先用戶的簽名和指令在則在參數之中。
打包發送到作為路由器的智能合約中,執行驗證並且進一步轉發到各用戶獨立的合約錢包。
入口點合約驗證:EntryPoint 是處理交易驗證和執行邏輯的智能合約。會反復和用戶的合約賬戶進行交互以及驗證,確保最終鏈上打包必然成功,否則全部交易都要回退。
出塊流程:完全不變。
2.2、功能舉例:入口點合約
遷入4337 後,對任何賬戶的調度都需要先經過入口點合約,他需要解決的是
循環驗證組合交易中UserOperation
管理質押費
一級標題
一級標題
計算gas 成本,既要用於收取用戶,也需要面對失敗交易補償捆綁器
一級標題
3、為什麼持續要關注ERC-4337 ?
ERC-4337 的高開發投入以及快速的迭代進度,說明他能快速成為最終提案、並被各種應用廣泛接納、真正成為事實性行業標準,他帶來的核心價值是大幅度降低普通用戶使用Web3應用的門檻。
屆時,一個應用能否兼容ERC-4337 ,則將影響自己能否利用整個以太坊生態的其他組件、以快速發展。後續的DApp 應用,也將必然需要能兼容從賬戶主體已然轉移向ERC-4337 的用戶們。
最終驗證市場的還是用戶本身,實現的方案是複雜的,這也僅僅是對於應用方的複雜
對於用戶本身而言,最終他們能夠看到的是:
更流暢的交易體驗,類似購物車,即使面對10 個市場也能夠一筆交易完成打包。
更沉浸的遊戲環境,借助paymaster 的代付能力,乃至可以定義半小時內的不超過XX 金額的交易免除簽名,避免了一場遊戲被場外打斷。"shisi"為推薦碼延長15 天會員期)。
上篇更多是圍繞ERC-4337 運作機制、背景進行說明。
為推薦碼延長15 天會員期)。
https://cointelegraph.com/news/ethereum-erc-4337-smart-accounts-launch-at-walletcon-account-abstraction-is-here
https://blog.openzeppelin.com/eip-4337-ethereum-account-abstraction-incremental-audit/#conclusions
https://blog.openzeppelin.com/eth-foundation-account-abstraction-audit/
https://eips.ethereum.org/EIPS/eip-4337
https://hackmd.io/@erc 4337/test-suite
https://www.youtube.com/watch? v=eyT 6 WzJmWyc
https://notes.ethereum.org/@yoav/unified-erc-4337-mempool#What-does-censorship-resistance-require-of-ERC-4337
https://github.com/eth-infinitism/account-abstraction/issues/188
https://notes.ethereum.org/@yoav/unified-erc-4337-mempool
https://github.com/eth-infinitism/account-abstraction/blob/develop/reports/gas-checker.txt#enroll-beta