以太坊要真正普及,Layer2、錢包安全性以及隱私,這三項轉變缺一不可。本文源自 Vitalik Buterin 所著文章《The Three Transitions》,由 Foresight News 編譯、整理。
(前情提要:以太坊「坎昆升級」年底前啟動!納入5大EIP:降低Gas費用、改善區塊儲存 )
(背景補充:以太坊發展史》必知的12次重大升級 )
當以太坊從一項年輕的實驗性技術轉變為一項成熟的技術堆疊,能夠真正為普通使用者帶來開放、全球化和無需許可的體驗時,這個堆疊需要經歷三個主要的技術轉變,大致上同時進行:
- L2 擴充套件轉變 – 所有人都遷移到 rollups
- 錢包安全性轉變 – 所有人都遷移到智慧合約錢包
- 隱私轉變 – 確保提供隱私保護的資金轉移,並確保正在開發的所有其他工具(社交恢復、身份、聲譽)都能保護隱私
這是生態系統轉型的三角關係。你只能選擇 3 個中的 3 個。
- 沒有第一個,以太坊就會失敗,因為每筆交易都需要花費 3.75 美元(如果我們有另一輪牛市,那麼價格為 82.48 美元),並且每個面向大眾市場的產品最終都會忘記鏈,並且對一切採取集中化的解決方案。
- 沒有第二個,以太坊就會失敗,因為使用者不願意儲存他們的資金(和非金融資產),所有人都會轉移到集中式交易所。
- 沒有第三個,以太坊就會失敗,因為所有交易(和 POAPs 等)都公開給任何人看,這對於許多使用者來說是對隱私的過高犧牲,所有人都會轉移到至少有一些隱藏資料的集中化解決方案。
以上述原因,這三次轉變至關重要。但由於解決這些問題需要強烈的協調性,因此它們也是具有挑戰性的。不僅需要改進協議的功能,有些情況下,我們與以太坊互動的方式需要進行相當基礎的變化,需要應用和錢包進行深入的改變。
這三次轉變將徹底改變使用者和地址之間的關係
在 L2 擴充套件世界中,使用者將存在於許多 L2 中。你是 ExampleDAO 的成員,它位於 Optimism 上嗎?那麼你在 Optimism 上就有一個帳戶!你在 ZkSync 的穩定幣系統中持有 CDP 嗎?那麼你在 ZkSync 上就有一個帳戶!你曾經嘗試過一些恰好位於 Kakarot 上的應用嗎?那麼你在 Kakarot 上就有一個帳戶!使用者只有一個地址的日子將一去不復返。
我在四個地方有 ETH,根據我的 Brave Wallet 檢視。是的,Arbitrum 和 Arbitrum Nova 是不同的。不用擔心,隨著時間的推移,這會變得更加複雜!
智慧合約錢包增加了更多的複雜性,使得在 L1 和各種 L2 上擁有相同地址變得更加困難。如今,大多數使用者正在使用外部擁有的帳戶,其地址實際上就是用於驗證簽名的公鑰的hash – 所以在 L1 和 L2 之間沒有任何變化。然而,對於智慧合約錢包,保持一個地址變得更加困難。儘管已經做了大量的工作,試圖使地址成為網路間等價的程式碼的hash,尤其是 CREATE2 和 ERC-2470 單例工廠,但是要完美實現這一點非常困難。一些 L2(例如 “type 4 ZK-EVMs”)並不完全等同於 EVM,通常使用 Solidity 或中間裝配代替,從而阻止了hash等價。即使你可以擁有hash等價性,錢包通過金鑰變化改變所有權的可能性也會產生其他的非直觀後果。
隱私需要每個使用者擁有更多的地址,甚至可能改變我們處理的地址型別。如果隱私地址提議得到廣泛使用,每個使用者不再只有幾個地址,或者在每個 L2 上有一個地址,而可能在每個交易中都有一個地址。其他的隱私方案,甚至是現有的方案如 Tornado Cash,會以不同的方式改變資產的儲存方式:許多使用者的資金儲存在同一個智慧合約(因此在同一個地址)中。要向特定的使用者傳送資金,使用者需要依賴隱私方案自己的內部地址系統。
如我們所見,這三次轉變以不同的方式削弱了「一個使用者~= 一個地址」的心理模型,並且其中一些效果回饋到執行轉變的複雜性中。兩個特別的複雜點是:
1. 如果你想付款給某人,你如何獲得付款給他們的資訊?
2. 如果使用者在不同的鏈上不同的地方儲存了許多資產,他們如何進行金鑰更換和社交恢復?
三次轉變與鏈上支付(和身份)有關
我在 Scroll 上有硬幣,我想支付咖啡(如果「我」是字面意思,指的是我這篇文章的作者,那麼「咖啡」當然是「綠茶」的換喻)。你正在賣我咖啡,但你只準備在 Taiko 上接收硬幣。我該怎麼辦?
基本上有兩種解決方案:
1. 接收錢包(可能是商家,也可能只是普通個人)努力支援每個 L2,並具有一些非同步整合資金的自動功能。
2. 接收者提供他們的 L2 和他們的地址,傳送者的錢包通過某種跨 L2 橋接系統自動將資金路由到目標 L2。
當然,這些解決方案可以組合:接收者提供他們願意接受的 L2 列表,傳送者的錢包計算支付,這可能涉及直接傳送(如果他們幸運的話),或者通過跨 L2 橋接路徑。
但這只是三次轉變引入的關鍵挑戰的一個例子:像支付某人這樣的簡單行為開始需要比只有一個 20 位元組地址的資訊更多。
智慧合約錢包的轉變幸運的是對地址系統的負擔不大,但是在應用程式堆疊的其他部分仍然有一些需要解決的技術問題。錢包需要更新,以確保它們不僅僅是在交易中傳送 21000 gas,而且更重要的是確保錢包的支付接收端不僅追蹤從 EOAs 的 ETH 轉移,也追蹤由智慧合約程式碼傳送的 ETH。依賴於地址所有權不變的假設的應用(例如,禁止智慧合約以強制版稅的 NFT)將不得不找到其他方式來實現他們的目標。智慧合約錢包也會使一些事情變得更容易 – 特別是,如果有人只接收非 ETH 的 ERC20 代幣,他們將能夠使用 ERC-4337 付款人來用那個代幣支付 gas 費。
延伸閱讀:以太坊ERC-4337被低估了?淺談「帳戶抽象」的4大超棒功能
另一方面,隱私再次提出了我們還沒有真正解決的主要挑戰。最初的 Tornado Cash 並沒有引入這些問題,因為它不支援內部轉帳:使用者只能存入系統並提取出來。一旦你可以進行內部轉帳,使用者就需要使用隱私系統的內部地址方案。在實踐中,使用者的「支付資訊」需要包含(i)某種「支出公鑰」,即接收者可以用來花費的祕密的承諾,以及(ii)傳送者傳送只有接收者可以解密的加密資訊的方式,以幫助接收者發現支付。
隱私地址協議依賴於一個元地址的概念,其工作方式是:元地址的一部分是傳送者的支出金鑰的一個盲化版本,另一部分是傳送者的加密金鑰(儘管最小的實現可以設定這兩個鍵是相同的)。
這裡的關鍵教訓是,在一個注重隱私的生態系統中,使用者將擁有支出公鑰和加密公鑰,使用者的「支付資訊」將必須包含這兩種金鑰。除了支付以外,還有其他一些好的理由來擴充套件這個方向。例如,如果我們想要基於以太坊的加密電子郵件,使用者將需要公開提供某種形式的加密金鑰。在「EOA 世界」中,我們可以重新使用帳戶金鑰來實現這個目標,但在一個安全的智慧合約錢包世界中,我們可能應該有更明確的功能來實現這個目標。這也將有助於使基於以太坊的身份更兼容於非以太坊的分散隱私生態系統,最突出的例子是 PGP 金鑰。
三個轉型和金鑰恢復
在一個使用者可能有多個地址的世界中,實現金鑰更改和社交恢復的預設方式是讓使用者對每個地址單獨進行恢復程式。這可以一鍵完成:錢包可以包含軟體,以便在所有使用者的地址上同時執行恢復程式。然而,即使有這樣的使用者體驗簡化,天真的多地址恢復也存在三個問題:
- 燃氣費用的不切實際:這一點不言自明。
- 反事實地址:尚未釋出其智慧合約的地址(實際上,這意味著你還沒有從該帳戶傳送過資金的帳戶)。作為一個使用者,你有可能無限數量的反事實地址:每個 L2 上都有一個或多個,包括還不存在的 L2,還有一個完全不同的無限反事實地址集合,源自隱密地址方案。
- 隱私:如果使用者故意有許多地址以避免將它們連結在一起,他們肯定不希望通過在同一時間或差不多的時間恢復它們來公開連結所有的地址!
解決這些問題是困難的。幸運的是,有一個相當優雅的解決方案,表現得相當好:一種將驗證邏輯和資產持有分開的架構。
每個使用者都有一個金鑰庫合約,存在於一個位置(可能是主網或特定的 L2)。然後使用者在不同的 L2 上有地址,其中每個地址的驗證邏輯都是指向金鑰庫合約的指標。從這些地址中花費將需要一個進入金鑰庫合約的證明,顯示當前(或更實際的,最近的)支出公鑰。
證明可以通過幾種方式實現:
1. 直接在 L2 中讀取只讀的 L1 訪問許可權。可以修改 L2 以給予他們直接讀取 L1 狀態的方法。如果金鑰庫合約在 L1 上,這將意味著 L2 內的合約可以「免費」訪問金鑰庫。
2. 默克爾分支。默克爾分支可以證明 L1 狀態到 L2,或者 L2 狀態到 L1,或者你可以結合這兩者來證明一個 L2 的狀態的部分給另一個 L2。默克爾證明的主要弱點是由於證明長度的高燃氣費用:一個證明可能需要 5 kB,儘管由於 Verkle 樹,這將在未來減少到小於 1 kB。
3. ZK-SNARKs。你可以通過使用默克爾分支的 ZK-SNARK 而不是分支本身來減少資料成本。可以構建鏈下聚合技術(例如,基於 EIP-4337),讓一個單一的 ZK-SNARK 驗證所有的跨鏈狀態證明在一個塊中。
4. KZG 承諾。L2 或者在其之上構建的方案,可以引入一個順序定址系統,允許在這個系統內部的狀態證明只有 48 位元組長。像 ZK-SNARKs 一樣,一個多證明方案可以將所有這些證明合併為每個塊的單個證明。
延伸閱讀:科普|zk-SNARKs是什麼?V神定調零知識證明未來十年「非常重要」
如果我們想避免每次交易都做一個證明,我們可以實現一個更輕量級的方案,只需要恢復時做一個跨 L2 的證明。從一個帳戶中花費將取決於一個支出金鑰,其對應的公鑰儲存在該帳戶中,但恢復將需要一個事務,複製在金鑰庫中的當前支出公鑰。在反事實地址中的資金即使你的舊金鑰不安全也是安全的: 「啟用」一個反事實地址,將其轉變為一個工作合約將需要做一個跨 L2 的證明,複製當前的支出公鑰。這個在 Safe 論壇上的主題描述了一個類似的架構可能是如何工作的。
為了給這樣的方案增加隱私,我們只需要加密指標,然後在 ZK-SNARKs 中做所有的證明:
通過更多的工作(例如,以這個工作為起點),我們也可以剝離大部分 ZK-SNARKs 的複雜性,製作一個更簡單的基於 KZG 的方案。
這些方案可能會變得複雜。不過,這些方案之間有許多潛在的協同效應。例如,「金鑰庫合約」的概念也可能是前一節提到的「地址」挑戰的解決方案:如果我們希望使用者擁有永續性地址,這些地址不會在使用者更新金鑰時發生變化,我們可以將隱祕的元地址、加密金鑰和其他資訊放入金鑰庫合約中,並使用金鑰庫合約的地址作為使用者的「地址」。
許多二級基礎設施需要更新
使用 ENS 是昂貴的。今天,2023 年 6 月,情況還不算太糟:交易費用雖然高,但還是可以與 ENS 域名費用相比較的。註冊 zuzalu.eth 花費我大約 $27,其中 $11 是交易費用。但是如果我們再有一個牛市,費用將會飆升。即使沒有 ETH 價格上漲,燃氣費返回到 200 gwei 將會把域名註冊的交易費提高到 $104。因此,如果我們希望人們真正使用 ENS,特別是像去中心化社交媒體這樣的應用場景,使用者要求幾乎免費註冊(ENS 域名費用不是問題,因為這些平臺為他們的使用者提供子域),我們需要 ENS 在 L2 上執行。
幸運的是,ENS 團隊已經開始行動,ENS 在 L2 上實際上正在發生!ERC-3668(也稱為「CCIP 標準」),與 ENSIP-10 一起,提供了一種在任何 L2 上自動驗證 ENS 子域的方法。CCIP 標準要求設定一個智慧合約,描述了驗證 L2 資料證明的方法,域名(例如,Optinames 使用 ecc.eth)可以被放在這樣一個合約的控制下。一旦 CCIP 合約在 L1 上控制 ecc.eth,訪問 some subdomain.ecc.eth 將自動涉及查詢和驗證證明(例如,默克爾分支)的 L2 狀態,實際上儲存該特定子域。
延伸閱讀:ENS 域名封裝是什麼?為什麼重要?解放子域名靈活性
實際獲取證明涉及訪問儲存在合約中的一系列 URL,這 admittedly 感覺像是中心化,儘管我會辯稱它實際上並不是:它是一個 1-of-N 信任模型(無效的證明會被 CCIP 合約的回撥函式中的驗證邏輯捕獲,只要有一個 URL 返回有效的證明,就沒有問題)。這個 URL 列表可能包含數十個 URL。
ENS CCIP 的工作是一個成功的例子,應該被視為我們所需要的那種激進改革是可能的標誌。但還需要做更多的應用層面的改革。一些例子包括:
許多 dapp 依賴使用者提供鏈下簽名。對於外部擁有的帳戶(EOA),這很簡單。ERC-1271 為智慧合約錢包提供了一個標準化的方法來實現這一點。然而,許多 dapp 仍然不支援 ERC-1271;他們需要支援。
那些使用「這是 EOA 嗎?」來區分使用者和合約的 Dapp(例如,為了防止轉帳或執行版稅)將會破裂。一般來說,我建議不要試圖找到一個純技術的解決方案;弄清楚特定的加密控制權轉讓是否是有益權益轉讓的問題是一個困難的問題,可能無法在不借助一些鏈下社群驅動機制的情況下解決。最有可能的是,應用程式將不得不更少地依賴於阻止轉移,更多地依賴於像 Harberger 稅這樣的技術。
錢包如何與支出和加密金鑰互動將需要改進。目前,錢包通常使用確定性簽名來生成應用特定的金鑰:使用 EOA 的私鑰對一個標準隨機數(例如,應用程式名稱的hash)進行簽名,生成一個不能在沒有私鑰的情況下生成的確定性值,所以從技術上講是安全的。然而,這些技術對於錢包來說是「不透明的」,阻止了錢包實施使用者介面級別的安全檢查。在一個更成熟的生態系統中,簽名、加密和相關功能需要更明確地由錢包處理。
輕客戶端(例如 Helios)將不得不驗證 L2,而不僅僅是 L1。今天,輕客戶端專注於檢查 L1 頂級的有效性(使用輕客戶端同步協議),以及驗證源於 L1 頂級的 L1 狀態和交易的默克爾分支。明天,他們還需要驗證源於 L1 中儲存的狀態根的 L2 狀態的證明(這個更先進的版本實際上會檢視 L2 的預確認)。
錢包需要保護資產和資料
現在,錢包的業務是保護資產。一切都存在鏈上,錢包需要保護的唯一東西就是當前保護這些資產的私鑰。如果你更換了金鑰,你可以在第二天安全地在網際網路上釋出你以前的私鑰。然而,在一個零知識證明的世界裡,情況已經不再是這樣了:錢包不僅僅在保護認證憑證,它還在保護你的資料。
我們在 Zupass 看到了這樣一個世界的第一個跡象,Zupass 是在 Zuzalu 使用的基於 ZK-SNARK 的身份系統。使用者有一個私鑰,他們用它來認證系統,可以用來做基本的證明,比如「證明我是一個 Zuzalu 的居民,但不透露是哪一個」。但是,Zupass 系統也開始有其他應用程式建立在上面,最著名的就是郵票(Zupass 的 POAPs 版本)。
延伸閱讀:揭秘V神的社群實驗 Zuzalu;:位於美麗海灘的菁英烏托邦
我許多的 Zupass 郵票之一,證明我是 Team Cat 的驕傲成員。
郵票比 POAPs 提供的關鍵特性是,郵票是私有的:你在本地持有資料,只有當你想讓他們擁有你的這些資訊時,你才會向他們證明郵票(或郵票上的一些計算)。但這增加了風險:如果你失去了這些資訊,你就失去了你的郵票。
當然,持有資料的問題可以歸結為持有一個加密金鑰的問題:第三方(甚至是鏈)可以持有資料的加密副本。這有一個方便的優點,即你採取的行動不會改變加密金鑰,因此不需要與保持你的加密金鑰安全的系統進行任何互動。但即使如此,如果你失去了你的加密金鑰,你就失去了一切。反過來,如果有人看到了你的加密金鑰,他們就能看到被那把金鑰加密的所有東西。
Zupass 的事實上的解決方案是鼓勵人們在多個裝置上儲存他們的金鑰(例如,筆記型電腦和手機),因為他們同時失去所有裝置的機率很小。我們可以更進一步,使用祕密共享來儲存金鑰,將金鑰分割在多個守護者之間。
這種通過 MPC 進行的社交恢復對錢包來說並不是一個足夠的解決方案,因為這意味著不僅當前的守護者,而且之前的守護者可能會串通起來盜走你的資產,這是一個無法接受的高風險。但是,洩露隱私通常比完全失去資產的風險要小,如果某人需要高度保護隱私的用例,他可以通過不備份那些需要保護隱私行動的關聯金鑰,來接受更高的損失風險。
為了避免用一個複雜的多種恢復路徑系統壓垮使用者,支援社交恢復的錢包可能需要同時管理資產恢復和加密金鑰恢復。
回到身份問題
這些變化的一個共同主題是,你在鏈上使用的代表「你」的加密識別符號的「地址」概念必須進行徹底的改變。「如何與我互動的指示」不再僅僅是一個 ETH 地址;他們必須以某種形式,包含在多個 L2 上的多個地址,隱祕的元地址,加密金鑰和其他資料的某種組合。
實現這一點的一種方法是讓 ENS 成為你的身份:你的 ENS 記錄可以包含所有這些資訊,如果你向某人傳送 bob.eth(或 bob.ecc.eth,或…),他們可以查詢並瞭解如何支付和與你互動的所有事情,包括在更復雜的跨領域和保護隱私的方式中。
但是,這種以 ENS 為中心的方法有兩個弱點:
- 它將太多的事情與你的名字繫結。你的名字不是你,你的名字只是你的許多屬性之一。你應該可以改變你的名字,而不需要移動你的整個身份配置檔案並在許多應用中更新一大堆記錄。
- 你不能有無信任的反事實名字。任何區塊鏈的一個關鍵 UX 特性是能夠向還沒有與鏈互動過的人傳送幣。如果沒有這樣的功能,就會有一個雞蛋和母雞的問題:與鏈互動需要支付交易費用,而支付費用需要… 已經擁有幣。ETH 地址,包括帶有 CREATE2 的智慧合約地址,都有這個特性。ENS 名稱沒有,因為如果兩個 Bob 都在鏈下決定他們是 bob.ecc.eth,沒有辦法選擇哪一個得到這個名字。
一種可能的解決方案是將更多的東西放入這篇文章前面架構中提到的金鑰庫合約中。金鑰庫合約可以包含關於你和如何與你互動的各種資訊(通過 CCIP,其中一些資訊可以在鏈下),使用者可以將他們的金鑰庫合約作為主要的識別符號。但他們接收的實際資產將被儲存在各種不同的地方。金鑰庫合約不與名稱繫結,它們是反事實友好的:你可以生成一個只能由擁有某些固定初始引數的金鑰庫合約初始化的地址。
另一個解決方案類別與放棄使用者面向地址的概念有關,這與比特幣支付協議的精神相似。一種想法是更多地依賴於發件人和收件人之間的直接通訊渠道;例如,發件人可以傳送一個索取連結(作為明確的 URL 或 QR 碼),收件人可以使用該連結以他們希望的方式接受支付。
無論是發件人還是收件人首先採取行動,更多地依賴錢包直接即時生成最新的付款資訊都可以減少摩擦。話雖如此,持久的識別符號是方便的(尤其是與 ENS 一起),並且在實踐中,發件人和收件人之間存在直接通訊的假設是一個非常棘手的問題,所以我們可能會看到不同技術的組合。
在所有這些設計中,保持事物既去中心化又對使用者易於理解至關重要。我們需要確保使用者能夠輕鬆地訪問他們當前資產的最新檢視,以及已釋出的面向他們的資訊。這些檢視應該依賴開放的工具,而不是專有解決方案。避免更複雜的支付基礎設施變成一個開發人員難以理解正在發生的事情並將其適應到新環境的不透明的「抽象塔」將需要努力工作。儘管面臨挑戰,但是實現以太坊的可擴充套件性、錢包安全性和普通使用者的隱私至關重要。這不僅僅是關於技術可行性,而是關於普通使用者的實際可訪問性。我們需要迎接這個挑戰。