V神長文:EVM Validiums的退出遊戲和Plasma的回歸
編譯 | Odaily星球日報
整理 | jk
特別感謝 Karl Floersch、Georgios Konstantopoulos 和 Martin Koppelmann 對反饋、審查和討論的貢獻。
Plasma 是一類區塊鏈擴容解決方案,它允許所有數據和計算(存款、提款和默克爾根除外)保持在鏈下。這為實現不受鏈上數據可用性限制的巨大可擴展性打开了大門。Plasma 首次在 2017 年被提出,並在 2018 年經歷了多次迭代,尤其是最小可行 Plasma、Plasma Cash、Plasma Cashflow 和 Plasma Prime。不幸的是,由於(i)大量的客戶端數據存儲成本和(ii)Plasma 的基本限制使其難以推廣到支付之外的應用,Plasma 已經在很大程度上被 rollups 所取代。
有效性證明(又稱 ZK-SNARKs)的出現使我們有理由重新考慮這一決定。使 Plasma 在支付方面發揮作用的最大挑战,客戶端數據存儲,可以通過有效性證明得到有效解決。此外,有效性證明提供了一系列工具,使我們能夠創建運行 EVM 的類 Plasma 鏈。Plasma 的安全保證不會覆蓋所有用戶,因為將 Plasma 風格的退出遊戲擴展到許多復雜應用的根本原因仍然存在。然而,實際上仍然可以保護非常大比例的資產安全。
本文描述了如何將 Plasma 的思想擴展到這樣做。
概述:Plasma 如何工作
要理解的最簡單的 Plasma 版本是 Plasma Cash。Plasma Cash 通過將每個單獨的硬幣視為一個獨立的 NFT,並為每個硬幣跟蹤一個單獨的歷史來工作。Plasma 鏈有一個運營者,負責制作並定期發布區塊。每個區塊中的交易都存儲為一個稀疏的默克爾樹:如果交易轉移了硬幣 k 的所有權,它就出現在樹的 k 位置。當 Plasma 鏈運營者創建一個新區塊時,他們將默克爾樹的根發布到鏈上,並直接將與用戶所擁有的硬幣相對應的默克爾分支發送給每個用戶。
假設這些是 Plasma Cash 鏈中最後三個交易樹。那么,假設所有之前的樹都是有效的,我們知道 Eve 目前擁有硬幣 1 ,David 擁有硬幣 4 ,George 擁有硬幣 6 。
任何 Plasma 系統中的主要風險都是運營者的不當行為。這可能以兩種方式發生:
1. 發布無效區塊(例如,運營者包含了一個交易,將硬幣 1 從 Fred 轉給 Hermione,即使 Fred 那時並不擁有該硬幣)
2. 發布不可用區塊(例如,運營者沒有將他的默克爾分支之一發送給 Bob,阻止他向其他人證明他的硬幣仍然有效且未花費)
如果運營者的行為與用戶的資產相關,則用戶有責任立即退出(具體來說,在 7 天內)。當用戶(“退出者”)退出時,他們提供一個默克爾分支,證明了將該硬幣從前一個所有者轉移給他們的交易的包含。這啓動了一個為期 7 天的挑战期,在此期間,其他人可以通過提供以下三種之一的默克爾證明來挑战該退出:
1. 非最新所有者:退出者籤署的後續交易,將退出者的硬幣轉移給其他人
2. 雙重支付:將硬幣從前一個所有者轉移給其他人的交易,在將硬幣轉移給退出者的交易之前被包含
3. 無效歷史:在過去 7 天內轉移硬幣的交易,沒有相應的花費。退出者可以通過提供相應的花費來回應;如果他們不這樣做,退出就會失敗。
根據這些規則,任何擁有硬幣 k 的人都需要看到過去一周內所有歷史樹中 k 位置的所有默克爾分支,以確保他們實際上擁有硬幣 k 並且可以退出它。他們需要存儲包含資產轉移的所有分支,以便他們可以應對挑战並安全地退出他們的硬幣。
擴展到可替代代幣
上述設計適用於非同質化代幣(NFT)。然而,比 NFT 更常見的是可替代代幣,如 ETH 和 USDC。將 Plasma Cash 應用於可替代代幣的一種方法是將每個小面額的硬幣(例如 0.01 ETH)視為一個單獨的 NFT。不幸的是,如果我們這樣做,退出的燃氣費用將會太高。
一種解決方案是通過將許多相鄰的硬幣作為一個單元進行優化處理,可以一次性轉移或退出。有兩種方法可以做到這一點:
1. 幾乎按原樣使用 Plasma Cash,但使用復雜算法非常快速地計算出大量對象的默克爾樹,如果許多相鄰對象相同的話。這出人意料地並不難做到;你可以在這裏看到一個 Python 實現。
2. 使用 Plasma Cashflow,它簡單地將許多相鄰的硬幣表示為一個單一對象。
然而,這兩種方法都遇到了碎片化的問題:如果你從購买咖啡的數百人那裏每人收到 0.001 ETH,你將在樹的許多地方擁有 0.001 ETH,因此實際退出這些 ETH 仍然需要提交許多單獨的退出,使得 gas 費用變得過高。已經开發了碎片整理協議,但實施起來頗為棘手。
另一種方法是重新設計系統,考慮到更傳統的“未使用的交易輸出”(UTXO)模型。當你退出一個硬幣時,你需要提供這些硬幣最近一周的歷史,任何人都可以通過證明這些歷史硬幣已經退出來挑战你的退出。
右下方 0.2 ETH UTXO 的提款可以通過顯示其歷史中任何一個 UTXO 的提款來取消,如圖中綠色所示。特別注意,中左和下左的 UTXO 是祖先,但上左的 UTXO 不是。這種方法類似於 2013 年左右彩色硬幣協議中的基於順序的着色思想。
實現這一目標有多種技術。在所有情況下,目標都是跟蹤歷史上不同點上“相同硬幣”的某種概念,以防止“相同的硬幣”被兩次提取。
推廣到 EVM 的挑战
不幸的是,將其推廣到支付以外的 EVM 要困難得多。一個關鍵挑战是 EVM 中的許多狀態對象沒有明確的“所有者”。Plasma 的安全性取決於每個對象都有一個所有者,這個所有者有責任監視並確保鏈上數據的可用性,並在出現任何問題時退出該對象。然而,許多以太坊應用並非如此運作。例如, Uniswap 流動性池就沒有單一的所有者。
另一個挑战是 EVM 不試圖限制依賴性。在區塊 N 中,账戶 A 中持有的 ETH 可能來自區塊 N-1 中的任何地方。為了退出一致的狀態,一個 EVM Plasma 鏈將需要有一個退出遊戲,在極端情況下,希望使用區塊 N 的信息退出的人可能需要支付將整個區塊 N 狀態發布到鏈上的費用:成本高達數百萬美元。基於 UTXO 的 Plasma 方案沒有這個問題:每個用戶都可以從他們擁有數據的最新區塊退出他們的資產。
第三個挑战是 EVM 中無限的依賴性使得很難有證明有效性的一致激勵。任何狀態的有效性都取決於其他一切,因此證明任何一件事都需要證明一切。在這種情況下,由於數據可用性問題,通常無法使解決失敗兼容激勵。一個特別煩人的問題是,我們失去了 UTXO-based 系統中存在的保證,即對象的狀態不能在其所有者不同意的情況下改變。這個保證非常有用,因為它意味着所有者總是知道他們資產的最新可證明狀態,並簡化了退出遊戲。沒有它,創建退出遊戲就變得更加困難。
有效性證明如何緩解這些問題
有效性證明最基本的作用是在鏈上證明每個 Plasma 區塊的有效性。這極大地簡化了設計空間:這意味着我們只需要擔心運營者的不可用區塊攻擊,而不是無效區塊。例如,在 Plasma Cash 中,它消除了對歷史挑战的擔憂。這減少了用戶需要下載的狀態,從過去一周每個區塊的一個分支,減少到每個資產的一個分支。
此外,從最新狀態提取(在運營者誠實的常見情況下,所有提取都將從最新狀態進行)不會受到非最新所有者挑战,因此在有效性證明的 Plasma 鏈中,此類提取根本不會受到任何挑战。這意味着,在正常情況下,提款可以立即進行!
擴展到 EVM:並行 UTXO 圖
在 EVM 的情況下,有效性證明還讓我們能夠做一些聰明的事情:它們可以用來實現 ETH 和 ERC 20 代幣的並行 UTXO 圖,並用 SNARK 證明 UTXO 圖與 EVM 狀態之間的等價性。一旦擁有了這個,你就可以在 UTXO 圖上實現一個“常規”的 Plasma 系統。
這讓我們能夠繞過 EVM 的許多復雜性。例如,在基於账戶的系統中,有人可以在未經你同意的情況下編輯你的账戶(通過發送代幣給你,從而增加它的余額),這不重要,因為 Plasma 構建不是在 EVM 狀態本身上,而是在與 EVM 並行的 UTXO 狀態上,任何你收到的代幣都將是獨立的對象。
擴展到 EVM:完整狀態退出
已經有更簡單的方案被提出來制作一個“Plasma EVM”,例如 Plasma Free,以及在此之前的 2019 年的這篇文章。在這些方案中,任何人都可以在L1上發送消息,迫使運營者要么包含一個交易,要么使特定的狀態分支可用。如果運營者未能做到這一點,鏈就开始回退區塊。一旦有人發布了整個狀態的完整副本,或者至少發布了用戶標記為可能缺失的所有數據,鏈就停止回退。進行提款可能需要發布懸賞,這將支付某人發布如此大量數據的用戶份額的燃氣費用。
像這樣的方案有一個弱點,即它們在正常情況下不允許即時提款,因為總是有可能需要回退最新狀態。
EVM Plasma 方案的局限性
這樣的方案很強大,但不能為所有用戶提供完全的安全保證。 它們最明顯的失敗案例是特定狀態對象沒有明確的經濟“所有者”的情況。
讓我們考慮一個 CDP(抵押債務頭寸)的案例,一個智能合約,用戶在其中鎖定了代幣,只有在用戶償還債務後才能釋放。假設用戶在 CDP 中鎖定了 1 ETH(按照本文寫作時的價格約為 2000 美元),並有 1000 DAI 的債務。現在,Plasma 鏈停止發布區塊,用戶拒絕退出。用戶可以簡單地永遠不退出。現在,用戶有了一個免費的選擇:如果 ETH 的價格跌破 1000 美元,他們就放棄 CDP,如果 ETH 的價格保持在 1000 美元以上,最終他們就會認領它。平均來說,這樣的惡意用戶會因此賺錢。
另一個例子是隱私系統,例如 Tornado Cash 或 Privacy Pools。考慮一個有五個存款人的隱私系統:
隱私系統中的 ZK-SNARKs 保持了進入系統的硬幣的所有者與離开系統的硬幣的所有者之間的聯系隱藏。
假設只有橙色已經提取,此時 Plasma 鏈運營者停止發布數據。假設我們使用帶有先進先出規則的 UTXO 圖方法,因此每個硬幣都與其下方的硬幣匹配。那么,橙色可以提取他們的預混和後混硬幣,系統會將其視為兩個獨立的硬幣。如果藍色嘗試提取他們的預混硬幣,橙色的更新狀態將取代它;同時,藍色將沒有信息來提取他們的後混硬幣。
如果你允許其他四個存款人提取隱私合約本身(這將取代存款),然後在L1上取出硬幣,這個問題可以得到解決。然而,實際實施這樣的機制需要隱私系統的开發者付出額外的努力。
還有其他解決隱私問題的方法,例如 Intmax 方法,它涉及將幾個字節以 rollup 風格放在鏈上,以及一個類似 Plasma 的運營者在各個用戶之間傳遞信息。
Uniswap LP 頭寸有類似的問題:如果你在 Uniswap 頭寸中用 USDC 交易了 ETH,你可以嘗試提取你交易前的 USDC 和交易後的 ETH。如果你與 Plasma 鏈運營者勾結,流動性提供者和其他用戶將無法訪問交易後的狀態,因此他們將無法提取他們交易後的 USDC。需要特殊的邏輯來防止這種情況發生。
結論
到 2023 年,Plasma 是一個被低估的設計空間。Rollups 仍然是黃金標准,並擁有無法匹敵的安全屬性。這從开發者體驗的角度尤其如此:沒有什么能比得上應用开發者甚至不需要考慮他們應用中的所有權圖和激勵流動的簡單性。
然而,Plasma 讓我們完全繞過了數據可用性問題,大大降低了交易費用。對於那些本來會是 validiums 的鏈來說,Plasma 可以是一個重大的安全升級。ZK-EVMs 終於在今年實現,這為我們重新探索這個設計空間提供了絕佳的機會,並提出更有效的構建方式,以簡化开發者體驗並保護用戶的資金。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。