Plasma 讓我們完全繞過了數據可用性問題,大大降低了交易費用。
原文:Exit games for EVM validiums: the return of Plasma(vitalik.eth)
作者:vitalik
整理:jk
編譯:Odaily 星球日報
特別感謝 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 終於在今年實現,這為我們重新探索這個設計空間提供了絕佳的機會,並提出更有效的構建方式,以簡化開發者體驗並保護用戶的資金。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。