比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > UNI > Info

ION:抽象帳戶(Account Abstraction ):EIP-3074 與EIP-4337 簡介_Authoreon

Author:

Time:1900/1/1 0:00:00

以太坊的社群其實討論了好一陣子究竟要如何設計新一代的帳戶,不同的思路也對應了不同的提案,本文主要介紹AA在以下這兩種方向的相關內容:

讓現行的EOA有智能合約的功能讓現行的智能合約有EOA的功能

TableofContents

EIP-3074EIP-4337ClosingBackground

本文主要繼承自前篇:AccountAbstraction抽象帳戶:EIP-2938簡介,因此會希望讀者已經閱讀完前篇,以及具備相關的背景知識。

▎EIP-3074

EIP-3074:AUTHandAUTHCALLopcodes打算在EVM中加入兩個新的OpCodes,分別是?AUTH?和AUTHCALL,讓EOA能透過這兩個opcode授權合約代替EOA的身份去呼叫其他合約。

此提案仍在review階段,請大家謹慎服用。EIP-3074的主要目的并非設計一個嶄新的protocol來擴展EOA的functionality,因為隨著protocol與相關的介面標準越來越復雜,能被攻擊的地方也會越來越多。

它傾向讓User可以以合約代理自己執行各種動作,同時讓開發者能以一個更具彈性的框架來設計交易物件和驗證機制,使任何的EOA可以像一個合約帳戶一樣運作,卻不用自己布署任何合約。

Overview

ImageSource:?Ethereumwalletstodayandtomorrow—EIP-3074vs.ERC-4337

概括來說一個EOA能將一則已簽的訊息送至自己信任的合約上,合約可以利用?AUTH?和?AUTHCALL?代替這個EOA送出這筆交易。

由于EOA/User提交給Invoker的形式是合約自訂的,搭配新的OpCodes之后能讓各種需求變得很好實現,例如批次交易、包裝交易、手續費繳交方式、多簽、簽章驗證方式等。EOA也能透過他喜歡的方式給予Invoker手續費。

Reddit收藏頭像一、二級市場的銷售量突破2000萬筆:金色財經報道,據Dune Analytics最新數據顯示,當前Reddit收藏頭像Collectible Avatar NFT在一級市場和二級市場的銷售量已突破2000萬筆,本文撰寫時達到20,111,193筆。當前Collectible Avatar總鑄造量達到20,068,421枚,市值逾6250萬美元,其中 Gen3 Collectible Avatar NFT鑄造量達到9,114,433枚,Gen4為38,645枚。[2023/8/11 16:19:59]

特別注意:EIP-3074可以視為是EOA的擴充而非必要。Invoker是不可升級的,因為可升級合約的新邏輯可能會讓Invoker無法適當地驗證commit,導致造成非常嚴重的問題,例如讓不該通過的交易簽章通過,或該通過的無法通過。

此外,commit可以利用平行的call和在其之中的nonce,達到multi-call的「包裝交易」效果。例如我們在面對ERC-20的交易時,就可以把approve-transfer包在一個動作里面。

關于這個部分每一個callframe里面的角色及運作,可以見下文。

EIP-3074相關的缺點與改進建議的部分可以看:AcaseforasimpleralternativetoEIP3074?、EIP-3074ThreatModels和Reference處的內容。authorized

authorized是一個型態為?address?的變數,表示當今合約是被哪個帳戶授權的。被授權的合約能夠使用?AUTHCALL?代表此帳戶執行各種行為。authorized和其他以太坊中的變數不同,它沒有預設值,每次合約開始一個執行前就會將其初始化為unset,代表當前沒有EOA授權此合約執行。authorized是?AUTH?及?AUTHCALL?這兩個新OpCodes會去查看的變數,存在當前合約執行時的EVM中,用于確認是否已經正確設置授權帳戶,如果已經被設置且所有簽章合法則?authorized?的值會被?AUTH?及?AUTHCALL?取用。合約每一次只能有一個authorized,也就是說合約不能同時代替兩個EOA執行動作。每次執行時,每次的?authorized?是獨立的,不能監聽到別人的authorized。即便是利用DELEGATECALL,或同樣?address?授權加上同樣一筆交易,當前?authorized?都不能離開作用域影響別人。不能跨出executionframe的原因是同一筆交易里面可能有多個callframe,而每一個callframe都有一個經過?AUTH?授權的authorized,這個授權只停留在自己的callframes里面,也就是?authorized?不能影響他人及被影響的原因。AUTH和AUTHCALL

Ripple律師:第二巡回法院內部已存在共識趨勢,SEC二次上訴Ripple也可能再次獲勝:金色財經報道,Ripple律師John Deaton在社交媒體發文稱,即便美國證券交易委員會發起對Ripple的二次訴訟后者可能也將獲得勝利,他分析即使第二巡回法院不同意此前托雷斯法官對豪伊測試第三個因素的判決,也不能保證美國證券交易委員會的勝利,因為托雷斯法官可能會評估豪伊測試的其余兩個因素,在這種情況下就發現美國證券交易委員會不滿足共同企業因素后,可以“以與第一次完全相同的方式做出裁決”。 John Deaton認為,第二巡回法院內出現這種異議的可能性非常小,而且第二巡回法院內部已經存在共識趨勢,這表明其觀點可能與托雷斯法官此前的裁決一致。[2023/7/24 15:54:14]

AUTH:會基于ECDSA簽章演算法去設定?authorized?的值

AUTH會從Stack中取出三個元素:authority、offset、length,首項代表signeraddress,后兩者代表memory的range,會接收EOA的以及commit。由于是接收dynamicmemoryrange,因此?AUTH?未來是有機會升級來支援與ContractAccount互動或使用其他驗證方法的。此處EOA送來的簽章仍然是使用?secp256k1?這個演算法,簽章結果為:(v,r,s)。如果簽章合法且簽章recover后?authority==signer?或authority==tx.origin,則將?authorized?設為authority。如果?authorized?被成功設定成?authority?也就是signer,那?AUTH?會回傳1,否則回傳0。commit是EOA提交的交易資訊,InvokerContract會驗證這里面的內容,包含nonce、to、gas、calldata。

AUTHCALL:會代理?authorized?這個帳戶發送call

AUTHCALL會從Stack中取出八個元素,包含:gas、addr、value等,用于發送call。與?CALL(0xF1)?的行為很像,差別主要在于一些參數的邏輯判斷,例如:authorized如果是unset的狀態,則這次執行動作就不合法。在EIP-3074中還有?dynamic_gas?的設計,這個部份因為比較瑣碎我就先略過,如果有興趣或是想知道其他參數的Spec.可以詳閱此處。

Holium Corporation宣布收購Urbit托管平臺Third Earth:金色財經報道,Realm開發商Holium Corporation宣布收購Urbit托管平臺Third Earth。在籌集了290萬美元的種子資金后,Holium部署了資源來構建集成應用程序,如加密錢包、視頻會議平臺和協作文檔創建。到目前為止,Holium團隊已經推出了10個Urbit應用程序,不久還將推出更多應用程序,包括手機群組信使。[2023/2/21 12:18:41]

▎EIP-4337

EIP-4337:AccountAbstractionviaEntryPointContractspecification則希望可以把原本交易在底層運作的邏輯拉到合約中:

當User簽核完一筆交易后將其送到UserOperationmempool之中而Bundler會從中挑選交易,捆綁成一筆BundleTransaction呼叫EntryPointSmartContract的handleOps完成相關執行與驗證之后,把交易推到鏈上。在這里我們有許多名詞是第一次碰到,下文我會慢慢解釋!

此提案仍在draft階段,請大家謹慎服用。

Source:?ERC4337:accountabstractionwithoutEthereumprotocolchanges

首先,這個提案最大的特點就如同上圖來源,Vitalik文章的標題敘述一樣,不用去更改Ethereum底層的Protocol就能完成AA的實作。

嚴謹來說是不用去修改或增加共識層的Protocol。EIP-4337可以達到以下目標,某些點可能與我們之前介紹過的EIP-2938和EIP-3074稍微不同:

以ContractAccount作為真正的主要帳戶:不再需要任何EOA作為呼叫的源頭去中心化:不需要對bundler這個角色的信任假設不需要修改共識層的Protocol:所以不會有新的OpCodes也不會有新的TransactionType。擁有過往我們提到的其他特性,例如:Atomicmulti-operations、Privacy-Solution、不同支付手續費的方式ContractSpecification

彭博社:比特小鹿斥資4000萬新元收購新加坡最高安全級別保險庫Le Freeport:9月19日消息,據彭博社援引知情人士報道,吳忌寒旗下公司比特小鹿斥資4000萬新元(約2840萬美元)收購新加坡最高安全級別保險庫Le Freeport,吳忌寒本人已確認了該筆交易,據會計監管機構記錄顯示該筆收購發生在7月。Le Freeport的造價高達1億新元(近7100萬美元),并于2010年開業。知情人士表示,收購款約3/4流向了包括星展集團在內的債權人,而曾經持有Le Freeport 70%股權的Yves Bouvier和其他股東在償還債務并支付成本后獲得了約500萬新元(近355萬美元)。[2022/9/19 7:06:23]

我們可以把EIP-4337的AA實作當成是一個Contract的Spec.,它的目的是要把底層的交易與帳戶運作拉到合約層面執行。這邊我會邊解釋名詞,邊順過整個交易在AA被執行的過程。

1.UserOperation&2.UserOperationmempool

在合約里面,用戶送上來的交易物件是一個在合約中名為?UserOperation?的struct。這個?struct?的members和我們認識的交易很像,包含sender、nonce、callData、callGas、signature等,細節可見原提案。

為了避免ReplayAttack,Signature的制作必須要包含?chainid?和?EntryPointaddress?等元素。3.Bundler&4.BundleTransaction

Bundler有可能是礦工,或是能作為User和Miner之間的中介人。會去聆聽UserOperationmempool中新加入的UserOperation,并且將從這些交易中挑選一部分捆綁成BundleTransactions。

這邊我們可以假設UserOperation一定會被打包處理,因為可能會有類似FlashBot的Bundler去快速過濾出有利潤可圖的交易。首先Bundler會在Local使用RPCCall呼叫EntryPointSmartContract中的simulateValidation(),以此先確保這些UserOperation的簽章沒問題和GasFee被正常支付。關于模擬交易結果的部分可見此處。

最后BundleTransactions會呼叫EntryPointSmartContract中的函式handleOps。

MakerDAO投票決定在3個月內用300萬DAI進行MKR回購試驗:6月24日消息,MakerDAO投票決定在3個月內用300萬DAI購買和銷毀MKR,通過部署試運行DssKiln來實現整個過程,MakerDAO旨在讓其金庫維持高于當前水平的盈余緩沖,以降低未來債務拍賣中MKR鑄造崩盤事件的可能性。

據悉,該提案是Restart the burn SR V2提案的升級版本。而DssKiln是一個無需許可的代幣購買和處置工具,將直接使用DAI從Uniswap市場購買MKR并通過調用MKR的burn()功能來銷毀它們。[2022/6/24 1:29:08]

5.handleOps&6.EntryPointSmartContract

EntryPointSmartContract是一個早就被布署的合約,將在未來被相關的AATransaction呼叫使用,例如某一個Dapp有它想要的AA交易模式,它就需要布署一個它的EntryPoint。

EntryPoint會處理UserOperations的內容和替BundleTrandactions布署一個WalletsContract。

WalletContract會用來處理nonce與signature的驗證并且執行交易。

EntryPointSmartContract

在進到?EntryPoint?與?handleOps?的解釋之前,我們先回憶一下之前在EIP-2938提到的,節點需要負責驗證一筆AA交易是否合法的兩個階段:PAYGAS以前的驗證階段,與?PAYGAS?以后的執行階段。

前者限制交易只能閱讀合約的storage以及不能更改任何狀態,如果交易在這個階段失敗,礦工會拒絕這筆交易。后者因為已經支付了fee,如果交易在這個階段失敗,礦工仍然可以選擇要不要加入這筆交易。

Source:?Implementingaccountabstractionaspartofeth1.x

在?handleOps?中有很類似的舉動,面對每一個UserOperation,handleOps會用兩個ForLoop來實作上述兩個phases,一個是verificationloop,另一個是executionloop。

VerificationLoop

如果這個?UserOperation?還沒有一個對應的walletcontract,就用?UserOperation?中的其中一個field:initCode,來布署一個合約。如果?initCode?是空的,或者布署之后的WalletContractAddress和?UserOperation.sender?不同,這個call就視為失敗。將?UserOperation?作為參數并且附上手續費,以呼叫walletcontract中的validateUserOpvalidateUserOp首先會用?require(msg.sender==ENTRY_POINT)?確認?EntryPoint?是自己認可的。接著驗證交易是否合法,包含我們上述提到的那些AA特性的驗證以及nonce是否正確。若是都合法則Wallet支付手續費。以上過程中有任何失敗都會revert。補充說明:用戶在送上?UserOperation?這個物件時,必須先用EIP-1014自行計算UserOperation.sender,也就是?CREATE2?創建的WalletContract的地址。validateUserOp()和我們之前提到Bundler會預先呼叫?EntryPoint?的?simulateValidation()?要做相同的檢查。需要特別注意VerificationLoop中,如果再用call呼叫其他合約時有禁止執行的OpCodes,這個部份對應到之前EIP-2938的「限制交易在?PAYGAS?之前只能閱讀合約自己的storage以及不能更改任何狀態」。ExecutionLoop

handleOps中的第二個步驟會以?UserOperation?作為calldata,去呼叫VerificationLoop布署的WalletContract。并且執行交易本身該執行的內容。

執行完以后,會將剩余的gasfee給予WalletContract。

Paymasters

在EIP-4337還有特別重要的一個Features叫做Paymasters。

大家還記得在之前的文章中有介紹過的其他支付手續費的方式,以及TornadoCash的AAExample嗎。Paymasters可以做到第三方代替別人支付一筆交易的手續費的行為,此時就可以去接收其他種的Fee。

要如何判斷這筆交易的手續費是WalletContract還是Paymasters支付,得看?validateUserOp?中的參數?requiredPrefund?是否為0。如果我們已經確定要用Paymaster支付的話,可以對應著看上方示意圖。

EntryPoint中要特別去實做一些屬于Paymaster的函式,例如:

addStake、unlockStake、withdrawStake:這些函式可以讓paymasters管理他們在?EntryPoint?中的資金,Paymaster必須要抵押資金以此代表同意成為第三方支付者。balanceOf、depositTo、withdrawTo:這些函式能夠讓Paymaster去管理用戶資產在?EntryPoint?這個Contract中的狀態。例如?depositTo?可以讓Paymaster存款到用戶身上,之后就可以這里扣除該用戶交易需要用到的手續費。在以上的示意圖中,對應的步驟如下:

Bundler會呼叫?EntryPoint?的handleOps。EntryPoint將?UserOperation?作為參數呼叫walletcontract中的validateUserOp,驗證所有交易該驗證的事情,和上文介紹兩回圈時不同的是:這邊不會支付手續費。先不付的原因就是為了等第三方的角色支付手續費。handleOps除了?validateUserOp?以外,還需要確認Paymaster的狀況,例如擁有足夠的ETH可以支付這筆交易的手續費。EntryPoint呼叫PaymasterContract中的validatePaymasterUserOp,確認paymaster愿意支付這筆交易的手續費。愿意則支付,如果不愿意這筆交易就會failed。呼叫WalletContract并執行交易本身該執行的內容。做完第五步之后,必須緊接著呼叫PaymasterContract的postOp。需要注意這里除了跳出去找paymaster之外,這一到六步都是不可分割的!

ImageSource:?Ethereumwalletstodayandtomorrow—EIP-3074vs.ERC-4337

上面這張圖也蠻漂亮的,大家可以參考一下:

補充說明:第一到第四步為VerificationLoop,第五與第六步為ExecutionLoop。為了防止Paymasters可能DoS系統的風險,我們需要一個Paymaster的聲望機制,詳細可見:reputation,throttlingandbanningsection。可以有多個Paymasters來分擔一筆交易的手續費。Security

整個系統的安全假設有一個前提是Node必須在包裝這筆UserOperation時就先利用上文提到的模擬行為確保交易會成功、手續費會被支付。如果這件事情沒有做到,那我們可以假設有惡意人士會提交很多個operations,并且被包裝抵達?EntryPoint?但在最后一刻,才被revert。但如果有在每次提交到EntryPoint?前確實模擬,那系統就可以預設是DoSSafe的。

雖然無論是使用WalletContract還是Paymaster支付手續費,都可以利用模擬行為避免交易在最后一步才被revert,但Paymaster是被第三方制造出來的,因此我們可以想像有一種惡意情況是模擬行為中?paymaster.validatePaymasterUserOp?會成功,但之后的?postOp?等真正要執行時會失敗。

Closing

和前一篇介紹AA的文章相同,由于是簡介所以非常多設計細節還有實作的設計想法我都沒有提到,如果想要了解的話可以細細品嘗該EIP本身還有下方Reference提到的資料。

由于以上介紹的兩個提案都還不是定案,在研究時也會找到許多舊版提案的內容,因此如果大家發現認知與資料不一的情況,可以先去確認EIP內文,那里肯定是最準確的!

本文要感謝

NICLin老師的Review(這篇超級長的

Tags:IONNTRAUTHALLMINION幣SyntropyAuthoreonFootball Fantasy Pro

UNI
LIS:Conflux聯創張元杰:「天亡級項目」具備的5點特征_API

有趣觀察:天亡級項目 符合特征有: 1.初始代幣流通量低,VC/基金會長周期解鎖,無ICO群眾基礎;2.業內交易所同一時間List;3.華麗團隊背景,頂級投資人陣容拉滿;4.List前財富預期.

1900/1/1 0:00:00
GRAP:Crypto-Native 索引協議與 Keeper 網絡_PolyWrap

0.中間件安全性問題 現有的Indexing協議和Keeper網絡都不是完全trustless的,而是trusted,或者看似trustless.開發者和用戶需要以“Trust.

1900/1/1 0:00:00
APT:一文讀懂模塊化資本公鏈Aptos_apt幣發行總量

摘要 公鏈層出不窮,如何在當前區塊鏈世界中脫穎而出?公鏈通過執行層、共識層、結算層,數據可用層來為用戶提供更好的安全性和數據主權.

1900/1/1 0:00:00
TPS:頭等倉研報:宏觀分析 經濟政策與加密市場_COSMIC價格

當前的世界正處于動蕩期,不確定性充斥著整個市場,因此宏觀環境的快速變化更凸顯了此時進行宏觀分析的必要性。掌握趨勢才能更好地規避風險,尋找未來的機會.

1900/1/1 0:00:00
NFT:Bankless丨淺析 NFT 游戲設計中的挑戰和機會_WEB

原文作者:WilliamM.Peaster來源:Bankless,本文由DeFi之道編譯圖片來源:由無界版圖AI工具生成。目前NFT游戲領域正在發生大量的開發活動.

1900/1/1 0:00:00
SEE:我們能否在只能合約層面收取創作者版稅?_PolyStarter

我們能在智能合約層面上收取創作者版稅嗎? 我們認為可以。 我們會在本文中論述我們的主張。 在最近由@hosseeb(@dragonfly_xyz)和@hosseeb共同主持的播客中,就創作者的版.

1900/1/1 0:00:00
ads