Plasma XT: Plasma Cash with much less per-user data checking

Lin Po-An
5 min readOct 8, 2018

--

原文:https://ethresear.ch/t/plasma-xt-plasma-cash-with-much-less-per-user-data-checking/1926

背景

簡單來說,Plasma XT = Plasma Cash + Checkpoint

Plasma Cash 原先有個問題是,client 每個 Block 都會需要同步 proof,因為在 Plasma Cash 的設計下,「non-inclusion proof」(證明該區塊並未有該 coin 的交易)也是必須的。所以,假如有個使用者長期持有某個 Plasma cash 的 coin ,他仍然必須同步每一個區塊的證明資料,所有的歷史資料就會變得過大。

Checkpoint 想解決的就是,只需要從某個 Checkpoint 來同步資料即可,可以定期的產生 Checkpoint,就可以減少需要儲存的歷史資料量。

接著作者提供兩個做法,先從簡單暴力的作法講起,接著說該做法有哪些問題,然後提供了另一個比較複雜的做法。

簡單暴力解

每 n 個 Block,Operator 就上傳一個 merkle proof,然後每個 merkle tree node 會記錄當下該 node 的 coin 的 owner 是誰。例如,#0 的 Owner 是 A 的話,該 node 就會紀錄 A 的 address。如此,就可以利用該 merkle proof 來追朔該 Checkpoint 的最終 owner 是誰,之前的狀態就可以捨棄。

這個做法的問題出在於 Data Availability。當 Operator 上傳該 Checkpoint 資料到 Root chain 的時候,其他 client/user 本身並無法知道該 Checkpoint tx 裡有什麼。如果 Operator publish checkpoint 到 Root chain 但是沒有公開該 Tree 的內容的話,其實沒有人可以驗證,大家只能用 exit 來逃離這個 Plasma 系統。這樣的 exit 對 user 來說需要自己付手續費,而且沒辦法藉由 Challenge checkpoint 來拿到 Challenge 成功可獲得的補償(一個好的 Challenge 系統,通常會讓被 Challenge 掉的人負擔 Challenge 所需成本)。

複雜解

要解決上面問題的一個方法是,讓所有 Owner 都先簽名不就好了!主要概念是,所有 Owner 先簽名的話,再傳該 Checkpoint tx 就大家都沒話講了!

很可惜的是,這樣做是不現實的,在 Root chain 驗證所有 owner 的 signature 成本太高了。所以這邊改成的作法是,Operator 會上傳一個 map 來記錄說哪些 user 簽過名了,然後開啟一段 Challenge period。只要該時間內沒人有異議,Checkpoint (該 map 裡面有紀錄的 Coin)就視為通過了!為了增加效率,作者提出的作法是用 Bitmap 來記錄。例如 #0 跟 #3 的 Coin 要放進 Checkpoint 的話,該 Bitmap 會紀錄 1001 這樣。

然後雖然有了以上優化,作者又接著指出,這樣的作法仍然需要太多的 Gas (手續費),因為 Smart contract 有 Gas 的上限,單一操作無法使用太多 Gas,所以仍然無法無限制地使用 Bitmap。

所以這邊作者提出了一個 Checkpoint Zones 的概念。既然一次做不完,就輪流做吧!每次先做編號 0~k 的 Checkpoint,接著做 k+1~2k 的 Checkpoint,以此類推。

至於如何 Challenge 呢?如果在 Checkpoint tx 被標記成有 sign 的 user,但其實該 user 並未簽名,或者在 Checkpoint tx 所標記的 address 根本不是該 coin 的 owner 的話,可以提出自己該 Coin 最後一筆的交易 proof 來 Challenge。如此,Operator 必須回應:

  1. Checkpoint tx 上有該 user 的簽名在該 Coin 上
  2. 在 user 所提出的 tx 後面,仍然有交易來移轉該 coin 的 owner。(證明該 challenge user 並非該 coin 的 owner)

最後作者也提到了一個可能的問題,就是如果 Checkpoint 說每個 user 都有簽名,結果不為真,會導致所有 user 都必須要提出 Challenge,會導致 Root chain 塞車。一個簡單解法就是限制每個 Checkpoint 可以提出的 coin 上限,例如 256。

個人心得

我覺得 Checkpoint 是一個必須的東西,其實不只是 Plasma cash 上,在沒有 Checkpoint 的情況下,Blockchain 勢必會面對資料量過大的問題。

然後我其實還是蠻喜歡簡單暴力解的,就個人實作 Plasma cash 時,實務上,發現基本上很難完全不依賴 Operator 來提供 Data availability。所以基本上當 Operator 無法提供 data 時,將其視為 malicious 我是覺得沒問題的。換句話說,Data availability 應該可視為 Operator 的義務與責任之一。

原文後面還有一小段關於 Gas cost、Liveness 等的討論,這邊主要以理解理論為主就沒有提及了,有興趣的歡迎去原文看。

除此之外,雖然並沒有實作 Plasma XT,但如果對 Plasma Cash 有興趣的話,歡迎去小弟有幫忙寫的 Github repo 按個star:

--

--