EIP-3074對錢包和DApp的作用詳細解析


EIP-3074是一項旨在改善以太坊使用者體驗及安全性的提案。該提案允許使用者對合約進行授權,並實現了批量呼叫、會話金鑰、原生ETH許可、限價單、社交恢復等功能。透過EIP-3074,使用者無需事先批准大量資產數量給DApp,只需在需要時進行授權,提供了比傳統許可更安全的方式。此外,EIP-3074的簡單簽名方式也提升了使用體驗。希望EIP-3074能夠改變現有的授權方式,提供使用者更好的授權方式。

作者:Nic @imToken Labs

EIP-3074

更好、更安全的使用體驗

EIP-3074讓EOA能夠將控制權指定的合約,獲得和合約相同豐富的執行能力。

在EIP-3074 以前,EOA 送出交易就只能做一個操作,例如去批准ERC20 或去Uniswap 兌換;在EIP-3074 以後,EOA 可以一次完成多個操作,或者甚至出現以前無法想像的用途。

那麼,EIP-3074讓使用體驗大幅提升,目前熟悉的授權方式也將被提升,在維持使用體驗不變的前提下提升安全性。

而且透過EIP-3074,EOA可以不必再自己送交易上鍊,也不需要煩惱要先籌出ETH來支付交易手續費的問題。

祈求者契約

能夠獲得EOA 控制權的合約稱為Invoker 合約。當然不是任何合約都能獲得EOA 的控制權:EOA 使用私鑰簽名,簽名內容會明確指定是哪個Invoker 合約,以及允許Invoker 執行的操作。

EOA 簽章內容會明確指定哪一個Invoker 合約(invoker address)及授權該Invoker 合約的操作(commit)。

實際執行流程大概會長這樣:

Alice 使用她的EOA 私鑰簽名,然後將簽章內容及簽章變更Relayer。 Relayer攜帶上鍊到Invoker合約執行。 Invoker驗證簽章,驗證通過後可以以EOA的身份去執行操作,例如去批准USDC,然後去Uniswap進行資產互換,最後再使用一些USDC給Relayer作為手續費。

註1:中繼者為非必要,Alice 也可以自己帶簽名內容並簽章上鍊。

詳解EIP-3074對錢包與DApp的影響

呼叫者驗證完成簽章並開始操作執行後,皆以Alice EOA的身份去執行,相當於獲得了該EOA(有限的)控制權。

注意,執行完成並不會增加該EOA 的nonce 值,所以同一個簽章有可能重複使用(只要EOA nonce 不變),因此呼叫者需要自己實一套nonce 來避免作機制重播。

詳解EIP-3074對錢包與DApp的影響

如果呼叫者沒有防重播,同筆授權就可以一直被執行。

了解更多關於EIP-3074實際的運作機制介紹可以參考:https://medium.com/taipei-ethereum-meetup/eip3074-%E7%B0%A1%E4%BB%8B-2a880b918234

目的

批次調用

請使用者把具體該分成好幾筆交易的執行合併為帳單,省下多次授權簽名的過程以及Gas成本。

詳解EIP-3074對錢包與DApp的影響

註:這會需要DApp 也支援Batchcall 功能,像是目前社群正在推的EIP-5792,否則DApp 把用戶當普通EOA 的話只會每個操作都會提示一次交易給用戶簽名。

了解EIP-5792,請複製連結到瀏覽器研究:https://eips.ethereum.org/EIPS/eip-5792

會話金鑰

使用者也可以讓第三者在有條件限制下替他代為操作,如下所示的委託金鑰就是被授權的第三方;存取策略則執行的限制條件,例如只能去操作Uniswap、每天最多轉走1 ETH、授權有效期限等等。

這些條件均在Invoker 合約內部設計並檢查,只需檢查即可,第三方即可以用戶EOA 身分執行操作。

詳解EIP-3074對錢包與DApp的影響

詳解EIP-3074對錢包與DApp的影響

Telegram Bot 可以被授予特定權限,去以使用者EOA 名義執行操作。

原生ETH 許可證

只要條件滿足(透過Permit 簽章合法),就能以授權人EOA 身分去執行ETH 轉賬,達成突破ETH Permit 的效果。

詳解EIP-3074對錢包與DApp的影響

限價單

使用者填寫好限價單條件,待條件滿足即可以使用者EOA身分去執行,包含核准相關數位資產給DEX、去DEX介面等操作。與DEX本身提供的限價單相比,使用者不需預先發送交易去批准給DEX。

詳解EIP-3074對錢包與DApp的影響

Alice成交訂單時會順便執行Approve,不再需要事先Approve。

把條件設計得更通用的話,就會變成一個意圖:只要使用者指定的條件被滿足,任何人都可以以他的EOA身分執行去完成意圖。

詳解EIP-3074對錢包與DApp的影響

只要意圖條件被滿足,任何人均可以用戶EOA 名義去發起執行。

社會復健

讓使用者遺失EOA私鑰時,能最初由她(Alice)簽好EIP-3074授權,配置她授權的人(丈夫及信託代理)的簽名來形成EOA的資產全部轉走。恢復的是(可轉移的)資產,不是帳戶控制權。 EOA私鑰遺失後EOA就無法再使用了。

詳解EIP-3074對錢包與DApp的影響

當使用者遺失EOA 私鑰時,其他最初被授權的人可以簽署授權轉走EOA 的資產。

EIP-3074 的影響

改善資產授權的方式,甚至取代核准/授權?

目前DApp都是以用戶是EOA的假設去設計的:用戶必須「事先批准」且要「批准足夠大的資產數量」給DApp簽約,這樣用戶才需要隨時保持在線、等待DApp執行,不需要以及不斷重複認可,這對使用體驗有很大的提升。

例如觸發條件的應用程式限價單或DCA,使用者不一定會在條件符合時在線,所以要事前批准足夠大的資產數量讓DApp合約去執行,而且可能是重複執行。

詳解EIP-3074對錢包與DApp的影響

使用者必須事先批准DApp足夠大的資產數量,才能方便DApp使用他的錢去操作。

詳解EIP-3074對錢包與DApp的影響

但也必須因此相信DApp或避免核准給假DApp,以及能夠即時刪除批准。

或後來出現的許可模式,例如,EIP-2612 或非臨時的Permit2,都是為了改善批准模式的使用及安全性:用戶不需要再批准大量的資產數量給各個DApp 合約(而且每個)個資產都要批准一次),而只需「簽一個名」就可以授權DApp 在「指定時間」內「提取指定數量的資產」,這不僅大大限制了攻擊面,也極大提升了使用體驗。

了解更多EIP-2612詳情,請複製下方連結至瀏覽器查詢:https://eips.ethereum.org/EIPS/eip-2612

Permit2 詳情,請複製下方連結至瀏覽器查詢:https://medium.com/taipei-ethereum-meetup/uniswap-permit2-introduction-858ae3dddf18

詳解EIP-3074對錢包與DApp的影響

使用者只需鏈下簽名,即可指定資產數量及有效期限,提供比核准更好的使用體驗及安全性。

但事實上,不只是批准、許可模式被利用作為詐騙攻擊手段的事件仍然層出不窮,:受害者誤簽了以為是要給DApp使用的許可但實際上是給了攻擊者。

詳解EIP-3074對錢包與DApp的影響

使用者在簽許可證時,只能看到要授權給誰,但不知道這會配置什麼操作一起執行。

註:另外目前的授權設計並不相容重複性操作的DApp,例如DCA或其他定期支付應用程式。這是因為機制許可有防重放,所以輪轉完一次之後就無法再使用同一個許可,等同於使用者要先為未來每一次重複性操作都預先簽好許可證。

了解更多了解許可模式被利用作為詐騙攻擊手段的事件,請複製下方連結到瀏覽器查詢:

https://x.com/realScamSniffer/status/1783027808723435727 https://x.com/realScamSniffer/status/1784932506174967970 https://x.com/realScamSniffer/status/174967970 https://x.com/realScamSniffer/status/17867218962238962

EIP-3074帶來了改變的機會:當DApp開發者知道EOA可以穿透Invoker實現各種複雜的操作之後,DApp互動上的設計卻不再需要為了提升使用體驗而犧牲安全性,例如「用戶事前批准大筆資產數量”、「用戶簽個許可訊息授權提款」。

取而代之的用戶將DApp操作與批准綁在一起,穿過Invoker去進行Atom化(Atomic)的執行:要不批准和DApp操作成功一起執行,要不一起成功失敗,沒有單獨批准的可能,所以用戶可以確信這次批准就是給這次的操作。

而且用戶是使用鏈下簽名的授權方式,所以使用體驗和許可是一樣的這表示DApp將不再需要許可模式未來錢包可以直接對許可簽名請求進行封禁嚴格的審查,不必再擔心是否會導致用戶無法使用某些DApp(但反而因此被詐騙利用)。

詳解EIP-3074對錢包與DApp的影響

使用者只授權某個地址,而是授權某個地址以及做哪些事,甚至可以不再看到模擬的執行結果。

註:這並不表示可以完全阻止詐騙用戶同樣有可能被詐騙進詐騙網站,詐騙網站同樣可以群組批准或轉帳操作讓用戶簽名,但此時用戶至少可以看到這次簽名是可以做的什麼操作,錢包甚至可以交叉模擬顯示執行結果並呈現給用戶,讓用戶可以明確知道誰會少了多少錢、誰會多了多少錢。相比之下無法知道做什麼操作或甚至執行獲得許可後,用戶將獲得更多信息,決定不要授權。雖然這不是完美的防治措施,但仍將是對現狀的大幅改善。

錢包解決EOA nonce

目前的EIP-3074 設計採用EOA nonce 值包含在簽名內容中,所以只要EOA 提交了一筆交易上鍊執行,改變了nonce 值,究竟是EIP-3074 授權就會直接全部失效。

如果使用者去授權其他人來代為操作EOA,例如上面提到的會話密鑰或社交恢復方式,那麼EOA 的隨機數必須避免被改變,否則將重新重新簽一次所有授權並遷移受託人,這對使用體驗及機制的成熟程度都有不小的影響。

如果使用者是由自己授權操作的話,那就不用避免特別的EOA 隨機數被改變,因為EIP-3074 簽名還是和交易一樣預期要在某個期限之前去執行。只是錢包要多管理該EOA 的EIP-3074交易:如果有EIP-3074簽名正在等待上鍊,則EOA自己上鍊的交易要等待。

註:Invoker 合約自己會(也應該要)維護一套nonce 機制,所以簽名用之後一樣得再簽一次,不管EOA nonce 是否改變。

會話金鑰和社交復原非常可能要等到EIP-3074 修改規則把EOA nonce 從簽章內容移除,才有可能被大規矩採用。因此錢包只需專注於「使用者自己授權操作」的使用情況下,並把EIP-3074 簽名也當作交易一樣來處理,就不需要擔心要避免EOA 送交易、改變EOA nonce。

注意,如果是使用者自己帶自己的EIP-3074簽名內容上鍊的話會有兩個缺點:

用戶要簽兩次名:一次是EIP-3074簽名,一次是上鍊交易的簽名。因為上鍊交易會在交易開始執行前就先將EOA nonce +1,所以用戶的EIP-3074簽名的EOA nonce如果事先+1才能對得上因為自己上鍊而造成的EOA nonce +1。

詳解EIP-3074對錢包與DApp的影響

因為自己上鍊會先把EOA nonce +1,所以開始驗證EIP-3074 簽章時就會因為EOA nonce對不上而失敗。

詳解EIP-3074對錢包與DApp的影響

用戶自己上鍊前有提先把EIP-3074簽名裡的EOA nonce +1,就能順利通過驗證。

總結與重點

EIP-3074 讓EOA 獲得和相容相同豐富的執行能力,開啟了許多新的應用場景。這不僅讓使用體驗大幅提升,也將改變編碼的授權方式,使在使用體驗不變的前提下變得更加安全。而且EIP-3074是簡單簽名,用戶不一定要自己將簽名帶上鏈執行,也不需要煩惱要先湊到ETH來支付手續費。 EIP-3074 的用途包含Batch Call、Session Key、Native ETH Permit、Limit Order、Social Recovery。這些很多究竟是EOA 不可能實現的,有些像是Limit Order 需要預先授權等較不安全的方式才能使用。 EIP-3074 改變了現有的授權方式。 approve 授權指定地址有期限提數位資產的權力,並且需要使用者EOA 送出商品交易執行批准,因此使用體驗安全性都不佳;只需使用者簽名,每次簽名都會被批准提升不少期限。但允許依然被絕地利用於詐騙,簽名時用戶只能知道要授權給哪個地址、多少資產數量及直至,但不會知道這個授權是要「用來做什麼」的。 「用來做什麼」會是另一筆簽名(或交易),正常DApp會讓用戶簽許可及「用來做什麼」,但它們仍然會是兩筆不同簽名,因此被請求許可簽名時,用戶及錢包都沒有辦法知道許可證會被「用來做什麼」。有了EIP-3074,用戶(1)不需要事先批准大量的資產數量給DApp,但有操作時才批准,效果和許可一樣;(2)只是簡單簽名且不需煩惱湊ETH付流程費,和permit一樣;(3)每次批准都是和指定的操作所綁定、共同簽名,用戶可以清楚知道這次批准是“用來做什麼”,這會比permit更加安全希望EIP-3074能夠成功佔據編碼的核准及授權模式,提供給使用者一個更安全的授權方式。

資訊來源:0x資訊編譯自網際網路。版權歸作者imToken所有,未經許可,不得轉載

Total
0
Shares
Related Posts