在上一篇文章《將多筆 Layer2 合爲一筆 Layer1,Plasma 究竟如何做到的?》中,我們主要談到了 Plasma 的理論基礎和最小可行 Plasma (MVP) 的工作原理。在進入本文正題之前,我們會再稍微探討一下關於 MVP 的一些改進思路。

原文標題:《Understanding Plasma, Part 1: The 「Basics」》
原文作者:Daniel Goldman
編譯:喏唄爾

我們回到 MVP 的強制大規模退出漏洞:從某種意義上來說,「問題」的根源在於文中所討論的資產的可替代性。比方說,我們說 Bob「欠了」5 個以太幣。由於以太幣是一種可替代資產,因此談論 Bob 欠的是「哪幾個特定的以太幣」是沒有意義的。爲此,在我們的「悲慘情形(即運營者作惡的案例)」中,當運營者企圖攜帶超過其自身的份額退出時,我們無法清晰地確定「他偷的以太幣是誰家的」。以太幣就是以太幣,所以運營者竊取的其實就是集體的 Plasma 以太幣池子裏的資金。因此,從某種意義上說,其他用戶都必須把資金從該 Plasma 鏈中撤出。

那麼,有沒有一種方法能夠指定某「塊」特定的以太幣的所有者呢?相比起將 Plasma 合約中的總以太幣餘額表示爲一個 (非常大的) 數字,我們能不能認爲餘額就是一大堆不可分割的「以太硬幣 (沒錯,就是一個個獨立的哐當響的硬幣)」的面額的總和呢?這可以解決我們的問題嗎(或者可能引入新的問題嗎)?

Plasma Cash 登場!

Plasma Cash 是 Plasma 結構的一種變體,其誕生以後便成爲了 Plasma 社區大部分研究的基礎。它採用與 MVP 類似的「最小可行」方法,但從一開始就增加了一個新的限制:在 Plasma Cash 鏈上的所有資產都是不可替代代幣。一個 NFT (我們稱之爲「幣」)可以代表任何東西:固定的以太幣面額、一個 ERC 20 代幣、一捆 ERC 20 代幣、一窩謎戀貓,或者成爲能夠在 Plasma 鏈條上連續創建 100 個區塊的 Plasma 運營者的權利(免責聲明:我不知道這麼做會有什麼後果,建議不要隨意模仿)等。唯一的要求是,上述被代表物可以表示爲 ERC-721 資產。也就是說,這東西不可拆分或合併,並且是唯一的。

Plasma Cash 拋棄了 MVP 中比特幣式的 UTXO 交易模型。對於不可替代幣來說,創建新的交易輸出這一概念不再適用。相反,在每一個 Plasma 區塊中,每一個幣都需要進行記賬:某個幣的存在表明這個幣在該 Plasma 區塊中的所有者發生改變(即,Alice 將其發送給了 Bob);而幣的缺席(即不出現在區塊中)則表示這個幣的所有者仍然與前一個區塊中的所有者相同。因此,一個幣的完整歷史可以通過其在每個 Plasma 區塊中是否存在來進行描述 —— 我們只需從當前區塊一路遍歷回這個幣首次存入的區塊。

正如我們即將展示的那樣,一個幣的完整歷史能夠充分保護其持有者的所有權。並且更棒的是,在這個模型裏面,這個歷史不需要包含每個 Plasma 區塊中的所有數據:如果 Bob 想要證明他的幣存在於某個區塊中,那麼他只需要提供交易的默克爾路徑。然而,想要證明這個幣沒有在某個區塊中轉移,Bob 需要能夠證明數據的缺席。這一點是我們所熟知和喜愛的默克爾樹不支持的功能。

因此,爲了實現這種「缺席證明」功能,Plasma Cash 使用我們稱爲稀疏默克爾樹 (SMT) 的加強版默克爾樹結構。SMT 是具有額外的特殊功能的默克爾樹:樹的每一片葉子(在本文例子中,是幣)都被賦予一個唯一的識別號,以用於確定它們所在的樹的位置。本質上而言,我們就是對這些葉子進行分類排序,每一個幣只能位於分配給自己的「槽」中。這意味着,如果這個幣缺席的話,那麼我們一定能夠知道它所存在的位置;相反,如果這個幣出現了的話,那麼我們就能夠通過證明槽是「空」的(即等於某個 null 值,比如 0 或者「未定義」,等等)默克爾分支來證明這個幣已經易主了。

因此,既然我們可以在每個區塊中證明幣是否存在,我們就可以追蹤幣的完整歷史,這段歷史看起來可能會是這樣的:

深入理解與 UTXO 截然不同的 Plasma Cash 結構

依此類推。關鍵的一點是,證明這一歷史所需的數據僅爲每個區塊中那一丟丟微不足道的默克爾證明,而不是 MVP 所要求的完整 Plasma 區塊。哎,Plasma 輕客戶端有着落了!

現在我們再來推敲一下關於默克爾證明序列足以讓幣的當前所有者保護自有資金的說法。換句話說,只要 Steve 擁有他的幣的完整歷史(以上述形式存在),那麼他就得到客觀保證:

1、如果 / 當他試圖提現,那麼他將能夠對任何質疑作出適當的響應;
2、如果 / 當其他參與者試圖撤出他的幣時,那麼他將能夠發起質疑併成功推翻他人的撤回請求。

在上述例子中,截至第 505 個區塊時,Steve 都是該幣的正當所有者。這裏要強調的一個要點是,如果 Steve 想要確認自己的收款(在這個案例中,就是在第 504 個區塊時從 Bill 處收到的付款)是否已經最終敲定,他首先必須接收並驗證這個幣的完整歷史(即驗證先前每個區塊中的默克爾證明)。然後,並且只有在那時,他才能真正擁有這個幣的所有權。

現在,我們不妨來推演所有可能發生的事情,以及 Steve 該如何作出響應 (其中一些解決方案與 MVP 擁有熟悉的配方):

由於 Steve 在第 504 個區塊確立對這個幣的所有權,因此,作惡者有兩種方式可以偷取 Steve 的幣,即在先前或後續的區塊中聲稱擁有這個幣。

比方說,Alice 在第 501 個區塊中通過廣播她的「存在證明」來試圖竊取這個幣。在這時,Alice 理直氣壯地聲明在第 501 個區塊中發生的轉賬是最新且有效的幣交易。也就是說,她之後再也沒有花費這個幣。Steve 的響應行爲基本上與 Bob 在 MVP 的「令人髮指」的案例中的表現相同。他指出,Alice 在第 502 個區塊中已經轉賬給了 Bill (注意,Steve 不能僞造這個證據,因爲這筆交易需要包含 Alice 的簽名)。Alice 被捉個正着,她的退出請求被撤銷了。再一次,由於 Steve 擁有這個幣的完整歷史,他清楚自己能夠隨時準備應對任何類似的欺詐性退出意圖。

現在,假設 Alice 嘗試在第 506 個區塊(即在 Steve 確立對這個幣的所有權之後)中撤出她的幣。需要注意的是,如果 Alice 的默克爾包含證明能夠被智能合約接受 (即 Alice 手眼通天),那麼運營者可能將不得不在第 506 個區塊中惡意且欺詐地包含這筆無效支付。像往常一樣,我們假設任意一個運營者都可能是惡意的。

在這種情況下,Steve 通過提供其在第 504 個區塊中所發生的交易來作出響應。這時,他表明自己不僅在該區塊擁有這個幣,並且還可以理直氣壯地聲明自那以後自己再沒有花費這個幣。現在,Alice 有責任提供 Steve 將這個幣發送給另一方的交易,但 Steve 知道她無法這麼做,因爲他知道自己實際上根本沒有花費這個幣(並且他一直在用生命來保護着寶貴的私鑰)。再一次,Alice 的退出請求被撤銷了。

儘管上述示例隱藏了一些很棘手的邊緣案例(你可以把這些邊緣案例作爲家庭作業私下思考),但這些退出博弈足以概括 Plasma Cash 執行規則的要點。

等一等,還漏了一件事情!我們回憶一下之前提到過的 MVP 悲慘案例:運營者停止提供區塊數據,然後繼續嘗試無效的提現。那麼這一次,在 Plasma Cash 中,這個提現過程將只包含一個幣。因此,在作惡案例中,只有有爭議的幣的實際所有者需要採取行動。由於不可替代性的限制,提現資金「溢出」到其他用戶的鏈上資產餡餅的風險將不復存在。這將使得強制提現的風險與通道中心的風險對等。如果 Plasma 鏈無法操作,那麼用戶最終 (可能) 會退出。但這種退出不會帶來任何恐慌、時間敏感性以及強制大規模退出失敗的結果。

再進一步

最後,我們花一點時間來實現我們收穫的想法:我們已經升級了 MVP Plasma 結構,現在用戶可以運行輕客戶端,並且基本上消除了醜陋的大規模退出漏洞。

這是否意味着我們已經找到了我們孜孜以求的 Plasma 銀彈?

不完全是。首先,儘管我們已經最大限度地減少了每個用戶需要處理的數據量,但事實上,這個數據量仍然十分龐大。我們可以做一些速算,當一個幣在 Plasma 鏈中停留的時間足夠長時,每個 Plasma 區塊中的每一個幣的單個默克爾證明的大小就會變得很大。此外,請記住,每一次支付都意味着用戶需要將相關的完整歷史轉移給收款方。

但是,我們不要忘記我們在 Plasma Cash 中實施的初始限制:不可替代性。這可能會爲某些應用程序提供足夠的功能 —— 比如 NFT 市場 —— 但最終,我們希望 Plasma 資產能夠給予用戶真實的錢一樣的感受和功用。能夠以任意麪額來花費個人資金是非常重要的。如果缺乏這一特性,那麼 Plasma Cash 鏈上的支付網絡的用戶體驗可能就像在一個只能支付現金的餐廳中,你沒有零錢,你只能把支票撕開一樣。

在後續文章中,我們將繼續 Plasma 之旅,並討論基於 Plasma Cash 的方案,以最大限度地減少歷史數據的膨脹問題。最重要的是,挽救支付的可替代性,同時仍舊保留 Plasma Cash 的優勢。

來源鏈接:www.theblockcrypto.com