撰文:0xjs@喜來(lái)順財(cái)經(jīng)
在2024年4月12日舉行的以太坊第183次ACDE會(huì)議中,EIP-3074正式被納入下一次以太坊硬分叉Pectra升級(jí)(簡(jiǎn)稱布拉格升級(jí))。
因此,EIP-3074得到以太坊社區(qū)關(guān)注。以太坊社區(qū)很多人認(rèn)為,這個(gè)EIP將永遠(yuǎn)改變用戶在EVM鏈上交互的方式,使錢(qián)包用戶體驗(yàn)更簡(jiǎn)單、更便宜、更強(qiáng)大。
那么,什么是EIP-3074??
一句話描述:EIP-3074本質(zhì)上是將EOA的控制權(quán)委托給智能合約,包括進(jìn)行單次交易批準(zhǔn)、批量交易、錢(qián)包資產(chǎn)恢復(fù)、贊助交易等的能力。
EIP-3074由以太坊研究員?Sam Wilson、Go Ethereum 開(kāi)發(fā)者等人提出,通過(guò)添加兩個(gè)新的EVM操作碼AUTH 和 AUTHCALL,來(lái)將現(xiàn)有的EOA變成智能合約。這兩個(gè)操作碼協(xié)同工作,允許智能合約代表EOA行事。
AUTH 操作碼 (0xf6):此操作碼允許用戶通過(guò)檢查 ECDSA 簽名來(lái)授權(quán)特定的 EOA。簽名必須使用 EOA 的私鑰進(jìn)行,并且需要覆蓋特定的消息(提交)。?
AUTHCALL 操作碼 (0xf7):此操作碼允許授權(quán)的智能合約從 EOA 的帳戶開(kāi)始交易。它的工作原理類似于已有的 CALL 操作碼,但使用授權(quán)的 EOA 作為發(fā)送者而不是合約本身。
AUTH 獲取用戶的簽名和預(yù)期操作,并驗(yàn)證其簽名是否正確。它設(shè)置一個(gè)變量來(lái)說(shuō)明 txn 的原始地址,允許一個(gè)智能合約代表一個(gè) EOA 執(zhí)行操作,從而實(shí)現(xiàn)了授權(quán)控制的委托。 AUTHCALL 然后使用發(fā)起者地址作為調(diào)用者而不是實(shí)際的 msg.sender 來(lái)調(diào)用目標(biāo)合約。
如下:?

用戶簽署一條消息(鏈下,不是交易)--->用戶或發(fā)起人將消息作為交易發(fā)送到調(diào)用者合約--->調(diào)用者使用 AUTH 和 AUTHCALL 來(lái)驗(yàn)證和調(diào)用每個(gè)目標(biāo)合約用戶作為發(fā)件人的地址
這個(gè)新的交易流程中獲得了一些用例,例如:
用例1:贊助交易。假設(shè)Bob的錢(qián)包里沒(méi)有任何 ETH。應(yīng)用程序可以為 Bob 的交易提供 Gas,而不需要購(gòu)買(mǎi)/橋接 ETH。這對(duì)于獲得大規(guī)模散戶采用可能是巨大的。
用例2:在一次交易中執(zhí)行多個(gè)操作的能力。目前為了在 Uniswap 上交換代幣,用戶必須首先批準(zhǔn) Uniswap 使用自己的代幣,然后再運(yùn)行實(shí)際的Swap。使用EIP-3074,這兩個(gè)操作可以批處理到單個(gè)交易中。
用例3:資產(chǎn)恢復(fù)。可以設(shè)置一個(gè)特殊的調(diào)用者合約,以便用戶在丟失私鑰時(shí)可以使用社交恢復(fù)來(lái)恢復(fù)資產(chǎn)。如果滿足社交恢復(fù)條件,則可以向調(diào)用者提交簽名以移動(dòng)資產(chǎn)。
EIP-3074之前:智能合約要求用戶在與智能合約交互時(shí)簽署交易。因此,用戶需要為每天執(zhí)行的鏈上任務(wù)參與一些消息簽名。
EIP-3074之后:用戶可以簽署一次密鑰,并授予智能合約從用戶的錢(qián)包簽署交易的權(quán)限。用戶可以使用自己的密鑰簽署此許可,然后就可以開(kāi)始了。它將成為 web3 游戲的游戲規(guī)則改變者,用戶可以在其中簽署一次會(huì)話,然后玩整個(gè)游戲,而無(wú)需擔(dān)心與智能合約的交互。
不同于ERC-4337在合約層面的升級(jí),EIP-3074的優(yōu)勢(shì)在于從EVM指令層面進(jìn)行升級(jí),不需要特別額外設(shè)置即可讓用戶享受到智能合約的功能。比如上節(jié)提到的三個(gè)用例,都會(huì)大大提升以太坊用戶體驗(yàn)。
最大一個(gè)就是調(diào)用者。調(diào)用者合約需要經(jīng)過(guò)全面審核、不可升級(jí)且無(wú)需信任,否則用戶的資金很容易被盜。
此外,某些現(xiàn)有的重入檢查可能不適用于 EIP-3074。
由于EIP-3074添加了兩個(gè)新的操作碼,因此需要硬分叉來(lái)添加此更改。這是EIP-3074被推遲以及 ERC4337 被首先采用的部分原因。
而賬戶抽象的ERC-4337不需要硬分叉,純粹是合約和鏈下系統(tǒng)改變。