撰文:Vitalik Buterin
編譯: jk,Odaily 星球日報
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 終於在今年實現,這為我們重新探索這個設計空間提供了絕佳的機會,並提出更有效的構建方式,以簡化開發者體驗並保護用戶的資金。
特別感謝Karl Floersch、Georgios Konstantopoulos 和Martin Koppelmann 對回饋、審查和討論的貢獻。