引介 | 以太坊錢包或將迎來重大升級,EIP-3074讓普通用戶無需使用ETH即可免信任發送事務

原標題:《引介 | EIP-3074 簡介》

以太坊錢包可能很快就要迎來重大升級。一旦升級完成,普通賬戶(EOA)即可發送批量事務、限期事務、無序事務等。

我與兩位同事 @SamWilsn 和 @adietrichs 正在研究如何改善以太坊的交互體驗。經過多次迭代后,我們提出了 EIP 3074:操作碼 AUTH 和 AUTHCALL。

要想使用這兩個操作碼,外部賬戶需要在鏈下籤署一個消息,並將該消息發送給中繼者,再由中繼者將簽名和調用數據發送至一個鏈上合約(稱為 “調用者”)。調用者合約會先使用操作碼 AUTH 來驗證簽名,再使用操作碼 AUTHCALL 中繼外部賬戶的調用。

AUTHCALL 與普通調用只有一個區別:AUTHCALL 將調用者(例如,消息發送方)設為使用操作碼 AUTH 恢復的外部地址。這樣一來,用戶不使用以太幣也可與以太坊交互。換言之,他們的事務是由中繼者 “贊助” 的。

你可能會覺得這個機制似曾相識。事實上,這與元事務(meta-transaction)的運作方式差不多。但是這裡要強調一下,元事務是不能隨意設置消息發送方的。因此,合約必須明確支持元事務。EIP 3074 旨在淘汰元事務,降低合約的複雜性。

在深入闡述運作原理之前,我們先來介紹一下我們想要構建什麼。我們想要構建一個讓普通用戶無需使用以太幣即可以免信任方式發送事務的機制。這裡的關鍵詞是 “免信任”,即,用戶不會授予中繼者任何可能會被利用的特權。

EIP 3074 通過謹慎選擇普通賬戶簽名中包含的參數來創建免信任系統。用戶簽署 keccak(0x03 ++ invoker_address ++ commit_hash)。

引介 | 以太坊錢包或將迎來重大升級,EIP-3074讓普通用戶無需使用ETH即可免信任發送事務

“type byte” 是 EIP 2718 的常量字節,值為 0x03。這個字節的作用是避免與其它簽名機制發生衝突,例如,EIP 2930 的訪問列表事務、EIP 1559 的費用市場事務、EIP 191 的 0x19 簽名消息等。

調用者地址將用戶的調用與特定合約綁定。用戶的簽名只對調用者合約有效。因此,用戶可以選擇自己信任的調用者,就像是選擇用來存放資產的智能合約錢包那樣。

我們預期只會有少量調用者存在,因為如果調用者合約的實現出錯,用戶就有可能蒙受損失(請注意,調用者是自主選擇加入的)。開發一個安全的調用者合約成本會很高,需要經過多方審計和靜態證明。

不過這與如今的慣例沒什麼太大的不同。在存放巨額資金之前,智能合約錢包也應該經過全面的審計和證明。很多大型 DeFi 項目也是如此。

最後一個簽名參數是 commit_hash(或者 commit)。這為調用者設計者帶來了更大的靈活性,可以讓他們開發出很多不同的方案。

這個 commit 限制調用者只能執行特定操作並創建特定的驗證要求(validity requirement)來處理調用。用戶可以信任調用者會遵循這一流程,因為他們可以在鏈上驗證代碼。這就是區塊鏈的優點。

我們來看一個簡單的案例。用戶想要通過調用者發送一個調用。為了避免他們的調用被無限次中繼,他們需要提供一個 nonce,另外還有其它不可更改的值。用戶對這些值進行哈希計算得到 commit,並將該 commit 包含在簽名消息內,以便合約使用操作碼 AUTH 進行驗證。

引介 | 以太坊錢包或將迎來重大升級,EIP-3074讓普通用戶無需使用ETH即可免信任發送事務

調用者會使用傳入的值來重新生成 commit 哈希。這樣一來,如果代付者(sponsor)改變了其中一個值,調用者計算得到的 commit 哈希會與外部賬戶簽署的完全不同,導致 AUTH 恢復出一個垃圾地址,如下圖所示:

引介 | 以太坊錢包或將迎來重大升級,EIP-3074讓普通用戶無需使用ETH即可免信任發送事務

希望你現在已經相信,調用者就像任何普通賬戶都可以使用的智能合約錢包。現在我們來看看如何使用 commit 來構建更有趣的方案。

通常情況下,“一個操作對應一個簽名” 已經成了經驗法則。這是一種比較簡單的理解。簽名是基於一個事務的哈希值創建的,為什麼我們不將多個事務合併進行哈希計算呢?事實證明,EIP 3074 可以做到這點。

只要某個賬戶可以通過 AUTH 的驗證,調用者就可以按該賬戶的要求做任意多次 AUTHCALL。這樣做是沒問題的,因為我們相信調用者會如實執行代碼。我們可以設計將多個調用合併哈希成 commit 的方案。

引介 | 以太坊錢包或將迎來重大升級,EIP-3074讓普通用戶無需使用ETH即可免信任發送事務

在上圖所示的方案中,調用者會將所有值(nonce1、nonce2 等)合併進行哈希,生成 commit。調用者將使用這個 commit 和用戶簽名來調用 AUTH。AUTH 會驗證用戶是否真的簽署了這些參數。

然後,調用者會遍歷每個調用並驗證 nonce 和其它參數,然後將經過認證的調用數據(calldata)發送至被許可的地址。

在此基礎上,我們還可以構建更多方案。例如,假設你增加一個新的參數 “保質期”。該參數會與其它參數一起經過哈希得到 commit。另外,在驗證過程中,調用者會驗證expiration < block.number。現在,外部賬戶已經可以使用限期交易了!

EIP 3074 將帶來更多流暢的用戶體驗,同時不會引入額外的信任假設。如果你想要閱讀 EIP 3074 的完整內容,請點擊這個鏈接:https://eips.ethereum.org/EIPS/eip-3074

go-ethereum 的原型實現在此處維護:

https://github.com/quilt/go-ethereum/tree/eip-3074

我們正在與一些對該機制有興趣的團隊合作。如果你覺得這個機制有用的話,請告訴我們,讓我們一起努力!歡迎大家提供對該提案的反饋,非常感謝!點擊該鏈接,留下你的反饋:https://ethereum-magicians.org/t/eip-3074-auth-and-authcall-opcodes/4880/49。

最後,如果你對我們的工作感興趣,我們的團隊正在火熱招聘中。我們致力於對以太坊核心協議進行中長期改進。如需了解更多信息,請直接私信我 @lightclients。

(完)

(文內有許多超鏈接,可點擊左下 ”閱讀原文“ 從 EthFans 網站上獲取)

原文鏈接:

作者: lightclients

翻譯&校對: 閔敏 & 阿劍

本文鏈接:https://www.8btc.com/article/6634123

轉載請註明文章出處

(0)
上一篇 2021-05-14 14:30
下一篇 2021-05-14 15:20

相关推荐