本文節選於 Nervos 組織的一場線下 Meetup。戰略合作方 AlphaWallet 在「未來百花齊放 Layer2」主題演講中,深度解析了 Plasma&State Channel 兩種解決方案。以下是現場實錄轉文字版,原汁原味。

口述 | AlphaWallet CTO 張韡武
整理 | Ryan

重現的歷史

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

這張圖描繪的是法國大革命的勝利,可是爲什麼在文章開篇,我們要放這樣一張圖在這裏?

歷史總會給我們教訓。法國大革命歷經五年,起義三次,不管人們有什麼樣的呼聲,都會有英雄站出來,來響應這個呼聲。把皇帝推上去的是他們,殺皇帝也是他們;捧起拿破崙的是他們,推翻拿破崙的也是他們。

歷史給了我們教訓,但有趣的是,歷史總會重演。就像我們現在的區塊鏈行業一樣:因爲人們有很高的呼聲,想要某種技術、某種功能的誕生,就有人提出相應的方案。

我從 2014 年就開始瞭解比特幣,之後在澳大利亞最大的金融機構——澳大利亞聯邦銀行做首席區塊鏈架構師,我就來聊聊銀行裏的「give them what they want」。

有人認爲建立和管理一批節點太麻煩了。於是,微軟就來滿足這個需求:它提供了全套的管理方案,包括主機、密鑰的管理,只要一個按鈕,六個主機全部打開,哪個主機作弊、哪個主機在處理交易都能看的清清楚楚。但是靠譜嗎?顯然我們心裏是知道的。

有人認爲管理私鑰太麻煩了。以前用戶名和密碼每個人都知道如何管理,因爲在中心化的數據庫中只需要簡單的加密就能夠保證安全,用戶能夠自行定義用戶名和密碼。但是區塊鏈上需要密鑰對,私鑰需要妥善保管,這時候大家就不知道怎麼管理了。怎麼辦?就有人發明了 Keyless Blockchain,就是不需要密鑰的區塊鏈。怎麼做?就是把數字簽名的不可抵賴性(non – repudiation)去掉,思路非常巧妙。這裏要提一句,不可抵賴性和我們常說的不可篡改性是有區別的。 前者是有「主」的,那個「主」不能抵賴他簽名的這些信息;後者可以無「主」,就是說這個消息是能確定不會被修改的,但是不知道誰寫的。區塊鏈那麼多功能,少一個問題不大。那麼 Keyless Blockchain 能做什麼呢?比如能夠當 IM (即時消息)來使用,那麼就不需要密鑰了。這也是一個很可笑的例子,即時通訊爲什麼要這樣用呢?

有人說銀行裏不停做 POC (Proof of Concept)怎麼辦。爲什麼只能做 POC?因爲現在區塊鏈還在早期,基礎設施不完善,或是替換需要高昂的成本。銀行裏的創新部門只能做 POC 而做不出實質性的產品,並且他們可能有一定的 KPI ,比如一年需要完成 10 個 POC。於是就有人提出來做一個 POC Factory,一個月時間幫創新部門完成十個 POC 的任務,那麼接下來的時間創新部門的就可以喝茶了。

有人說程序員不會 Solidity 怎麼辦?就有人賣 SQL Chain,也就是區塊鏈+ SQL。有很多人用奇葩的方式將 SQL 和區塊鏈結合。比如有人想象說,將 SQL 數據庫配置成分佈式,執行一個 SQL 就能夠在整個區塊鏈的範圍內執行一個交易,其他數據庫都會同步,把寫入的數據叫做「區塊」,那這就是 SQL Chain 了。但是目前是做不到的,如果能夠做到倒是真的不錯。

我們在銀行業看到了各式各樣的「呼應」。那如果我們跳出銀行業務的範疇,來看整個市場,特別是公鏈市場的時候,這種情況就更多了:有什麼樣的呼聲,就有什麼樣的解決方案。

有人提出來說,區塊鏈那麼安全,是不是可以用來管理醫療數據呢?就有人提出醫療鏈的解決方案,大致是提供安全的醫療數據流轉、存儲、驗證的解決方案。但實際上這裏「安全」這個概念是不一致的。區塊鏈的安全不涉及保密。在區塊鏈裏存在可信任的第三方(Trusted Third Party) 的概念,這裏的意思是「如果你執行交易,發起交易就會按照簽名的方式來執行」,比如比特幣的區塊鏈,就沒有任何加密的數據。而醫療數據的安全顯然是需要結合隱私保密的。但是爲什麼有人說能夠做?那就是愛屋及烏了:區塊鏈既然可信,那麼就能夠保證安全,也能夠保密,所以能夠管理醫療數據。這裏面的邏輯其實是錯誤的。

之後就有人在去中心化這個地方做文章。Facebook 今年陷入了史上最大的數據泄漏醜聞,股價一度暴跌。由此大家開始擔心中心化機構做惡的問題。有人就說我們能不能做個去中心化的 Facebook ?而現實是,目前區塊鏈技術距離建設去中心化的社交工具還有很長的一段路要走,但是有人有需求就會有人提出方案進行融資。

最後一個例子,就是以太坊擁堵,每秒只能處理 25 筆交易,並且交易費用昂貴,人民的呼聲是希望有一個更快、更便宜的以太坊,V 神不是沒聽到這些呼聲但是他現在還做不出來,畢竟這事不容易。因爲區塊鏈如去中心化這樣的假設條件存在,註定是不能處理無限的交易的。但是如果我們修改掉一些假設呢?比如以太坊是開放網絡,那麼能不能改成封閉的網絡,只有幾個已知的節點?幾個已知節點所需要的共識算法比開放網絡的簡單了太多,可以套用以前研究了三十多年的各種共識算法,如拜占庭容錯共識。這樣做的話交易速度多快都可以,甚至能夠上億。如果條件再修改一下,所有節點在一個辦公室裏面用光纖連接起來,那麼要多快就能夠多快。接下來,請大家投資。

整個 2017 年,上述故事不斷重演。

當初的法國大革命,必須經歷過流血,纔會有最後紅白藍三色的法國國旗,顯示着他們“自由、平等、博愛”的精神。

現在的區塊鏈世界,經歷過投資人的浪費、韭菜的血本無歸,我們纔會知道區塊鏈到底是什麼,爲什麼,能夠幹什麼。

在 Netflix 上有一步很火的動漫,叫馬男波傑克,他的主題就是作爲一個演員要給大家所要。有一期他想講自己內心真實的東西,最後被導演叫停並且剪掉了。 我們知道如何討好觀衆,但是我們該如何面對自己?我現在就像是馬男,我有兩個選擇:是說大家都想聽的,所有一切都沒有問題。還是我現身說法,講一下真實的情況?

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

以太坊的 Sharding 和 Casper 遇到了瓶頸性的問題導致推遲,分層方案現在被擺到風口上,就連一向推崇 Sharding 的 Vitalik 自己都開始關注 Layer2 方案。但是市面上這麼多的 Layer2 方案,真的都有那麼美好嗎?需要有一個人講一下實話,所以我來。

爲什麼需要 Layer2 的方案?在區塊鏈上的信任機制的前提下,網絡必須要是開放的,全世界必須對一些問題達成共識 —— 這個共識的內容就是:

  • 交易是否存在
  • 並且按照一定順序完成。共識的成本是非常高的,因此在 Layer1 上效率是有極限的,除非修改一些限制條件否則我們不可能突破這個極限。所以 Layer2 的思想是讓一部分事情在 Layer1 之外去做,通過和 Layer1 的交互能夠將信任傳遞到 Layer2。

接下來,我會對市面上常見的 Layer2 方案—— State Channel 和 Plasma 進行分析,我希望大家能夠知道:

  • 這些 Layer2 方案的侷限性;
  • 這些 Layer2 方案可能會遇到的攻擊模型。 我們要知道侷限,纔會知道怎麼用;要知道如何攻擊,才知道多安全。

State Channel

Layer2 的方案,首先是 State Channel,這是擴容的第一個 Layer2 解決方案。State Channel 的設計思路是把一部分的交易放在區塊鏈之外,把區塊鏈的共識由確認「每一步」變成只確認「結果」。

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

State Channel 基本的玩法是:在各方確認的情況下打開通道在其中完成交易,最後回到區塊鏈上結算。一般情況下在 State Channel 上這個各方的數量是不能變化的,當然針對這個問題有其他的擴展機制,我們留到後面去說。

*State Channel 有下面四個基本的特點: *

  1. 首先,基礎的 State Channel 各方的數量是穩定的,Channel 和 區塊鏈交互一次至少需要兩個 Commit:加入和退出 Channel。目前來看 Commit 都是用交易來做的,也就是 State Channel 和區塊鏈交互一次需要兩次交易。未來可能有 Commit 不用交易來做,所以這裏用 Commit 而不是用交易來表達。
  2. 關於在 State Channel 中的共識機制。由於影響的各方數量比較小,所以並不需要建立共識機制,簡單的 Gossip 協議,或者如果這個 Channel 是點對點的話直接點對點鏈接就好了。
  3. State Channel 是比較貴的,因爲它是事務性的,按照事務,完成一件之後大家退出 State Channel。加入和退出 Channel 都是有成本的,如果事務很多那麼費用就很高。而事務的大小隻和 Channel 的長度有關係,和費用無關。
  4. 最後,加入 State Channel 的各方都是需要相互知道的。

State Channel 攻擊模型

講完 State Channel 的特點,下面講一下 State Channel 的攻擊模型:有人把 State Channel 的安全程度列爲「非常安全」,但這也是相對的。因此我們要知道有這樣的攻擊方法,才能知道哪些是可以的,哪些是不可以的,才能知道有多安全。

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

首先,我們的假設是 State Channel 中的交易是逐步達成一致的。在 State Channel 中某一個時刻發生的事情我們叫做支票,但由於遊戲隨時都會有相反的事情發生,有新的支票那麼舊的支票就作廢了。

這樣的話,一種攻擊方法是出示已經作廢的支票。以象棋爲例,本來是 Alice 贏了 Bob,幾步之後 Bob 贏了 Alice,然後 Alice 退出了遊戲,但是出示當時她快要贏 Bob 的時候的支票向網絡要錢。對於這種攻擊方法,State Channel 需要建立一個智能合約給 Bob 證僞的機會,比如在看到 Alice 的支票的時候並不是立刻兌現而是給一天的時間,若 Bob 在這一天裏提出爭議並且證明他在後面和 Alice 的遊戲中自己多下了幾步並且贏了,也就是拿出新的支票並證明,那麼合約就能夠判斷 Alice 出示了作廢的支票,這是證僞的方式。

那麼聰明的讀者就會有問題了:爲什麼遊戲不設計成 Alice 和 Bob 在遊戲的任何中間階段都不能請求終止 State Channel,也就是規定成遊戲必須玩完,而且誰不玩完就懲罰誰。這樣就不會出現 Alice 拿了玩到一半的支票來向網絡要錢?

實際上這是做不到的,Alice、Bob 誰退出了網絡是不清楚的,所以 State Channel 必須做成遊戲中途能夠退出結算。因爲 State Channel 只在退出的時候結算,並不能知道誰退出了。

第二個攻擊方法,我們稱爲「出示作廢支票+掐網線」。比如 Alice 在某一個時刻快要贏了 Bob,但後來 Bob 贏了。Alice 開始做惡,先向合約提出自己即將贏的證明,然後 Bob 退出了。合約這時候提出來說 Alice 你等等,看看 Bob 會不會有異議。這時候 Alice 把 Bob 的網線掐斷了。大學的時候我們經常玩,在現實情況中用戶使用的大多數是手機客戶端,用戶手機下線了可能性會更大。那麼解決方法就是用戶找一個代理在自己下線的時候幫助自己提出證據。這裏的問題就是代理需要有用戶的數據,就會出現隱私風險,因此代理不能是區塊鏈本身,需要另外設計。

第三個攻擊方法思路和第二個類似,是在區塊鏈特別忙的時候出示作廢支票。也就是在 Alice 快贏了的時候(雖然後面幾手 Alice 輸了),在區塊鏈最忙的時候去證明自己快贏了,假設這個交易被打包成功了。這時候 Bob 因爲網絡忙碌沒有把自己的證據交給智能合約,而且一天時間網絡都很忙。那麼這樣就沒有特別好的方法,我們只好把提交證據的時間延長並且設置特殊機制,比如不以時間爲準而是以時間的變量爲準,但是這樣會更加複雜。

以上是 State channel 的攻擊模型,總結一下就是,*State Channel 做不到和區塊鏈一樣的可信度,至少是在強制在遊戲結束的時候去結算是做不到的。 *

State Channel 具體場景

講完攻擊模型,我們來講一下具體的場景。

State channel 最經典的場景就是象棋,一些項目做演示的時候也用這個場景。用 State Channel 做象棋可以很公平,這裏公平的意思是能夠判斷在半局的時候能夠判斷誰勝的更多。這裏需要有兩個條件:

  • 能夠產生公平的隨機數,因爲象棋的 First Mover 是有優勢的。
  • 能夠有押金或者類似的機制解決意外退出的問題。

對於第一個條件,隨機數如何產生?大致來說,如果只有雙方,那麼各方給出一個數字,把這個數字 Hash,公佈這個 Hash,放到合約裏面去,約定大家過一段很短的時間給出這個數字不然就罰款。因爲雙方只能看到 Hash 並不知道對方給出的數字是什麼,所以在給出數字的時候雙方是無法控制計算的結果的,將兩個數字做 XOR (異或運算) 之後得到隨機數,在這裏並不存在一方比另一方有優勢來控制隨機數結果的情況,因此能夠產生公平的隨機數。

第二點,押金解決意外退出的含義是,如果退出的話,能夠按照當時輸贏的情況來分配押金。

第二個場景是 SpankChain 色情遊戲。這是今年的 1CO 項目。我自己沒有玩過哈,但是估計的玩法是美女做表演視頻,用戶開通 State Channel 進行打賞,在視頻結束的時候進行一次結算,如果斷線那麼打賞到什麼地方就結算到什麼地方。這個 SpankChain 是少見的、正確的實施了 State Channel 的例子。

第三個場景是酒店用押金消費。爲什麼 State Channel 能夠做這件事情?因爲酒店押金在結算過程中結算方式是事先就能夠知道的,所以單獨用 State Channel 就能夠完成。中間會有以下流程:對押金進行簽名。比如用戶入住的時候抵押了一個比特幣,如果在酒店產生費用就能夠在這個押金裏面扣。用戶每產生一次消費就籤一次名進行授權,最後簽名完成結算,State Channel 關閉。這裏用戶可以選擇用或者不用 State Channel,如果使用無非就是在區塊鏈上結算的次數少一些,交易費用能夠少一些。這樣就不用喝一杯酒就需要一次 Transaction,只需要在最後結算一次就可以。類似的消費場景都能夠用 State Channel 進行結算。

第四個場景是裝修,也是一個典型的 State Channel 。這裏會需要原先不存在的第三方(這裏第三方是有條件的)。假設 Alice 找到 Bob 做裝修,Bob 裝修完 Alice 支付一個比特幣。但是條件是 Bob 裝修完需要提供一個第三方證明,比如環境檢測機構提供的材料無毒或者甲醛不超標的證明。Alice 用抵押的方法有兩個結果:Bob 裝修完、並且拿到第三方簽名獲得比特幣;或者時間超時,Alice 收回這個比特幣。這裏是一個 State Channel ,只有兩步。有人會提出問題,之前不是說 State Channel 需要提前知道是哪些玩家嗎?現在引入了 Alice 事先不知道的第三方(這個第三方是 Bob 找到的權威機構, Alice 事先並不知道是哪一個),這裏爲什麼可以?因爲這裏的機構只提供簽名但是並不參與交易。State Channel 需要知道的是哪些角色最後能夠拿到錢,而不是所有的角色(比如只需要簽名的角色)。

第五個場景,我們來看看即時性的遊戲,比如釣魚遊戲。釣魚遊戲原來是一種電子遊戲,理論上是可以用 State Channel 來做的,但是問題是結算必須在遊戲結束的時候進行而不能在遊戲過程中獎勵。那麼如果用戶中間退出了遊戲怎麼辦?那就需要有一個見證人的機制,因爲之前說過 State Channel 是不知道誰中途退出的。這個見證人可能需要兼職其他的工作,比如隨機數的生成也會需要見證人。所有魚的運動是需要隨機數來生成的,需要用雙方都不能控制的隨機數方案。之前說過隨機數在兩個人之間產生是沒問題的,但是如果在多人之間就變得複雜,因爲可能屏幕後面都是同一個人,這時候就需要依賴服務器,這後面都需要有一個見證人節點來做。但是即使是用了節點,我們也希望能夠讓節點的職能變得最小,從而不會影響整個遊戲。而且如果我們需要讓這個遊戲變得不可預測的話,就不能讓遊戲一開始 Alice 和 Bob 就 commit 的數據都 open 了,這樣雖然數據是隨機的但是沒有即時性,畢竟這個遊戲需要即時地、逐步地放出新的隨機數出來,這裏需要建立新的協議,會更加複雜。

但是如果要玩 World of Warcraft 這樣的遊戲那麼就會比較複雜了,因爲遊戲玩家數量是不確定的,任何人都能夠中途加入,那麼這個情況就必須 Plasma 這樣的網絡的情況。

Plasma

相比 State Channel,Plasma 增加了很多的功能,並且本身是十分複雜的,複雜到很多東西到現在都還沒有確定,我們簡單講一下 Plasma。Plasma 基本設計思路就是比特幣上常見的 Sidechain 的解決思路,但是它解決了 Sidechain 沒有解決的幾個問題。我們先聊一聊 Sidechain。

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

SideChain 在 2014 年就有,那時候是比特幣的時代。

我從 2014 年開始就搞比特幣,當時我們做了一些東西和 Sidechain 有一些相似。Sidechain 也是一個區塊鏈,需要有出塊節點和共識機制,然後它的交易要通過一定的方式到主鏈上證明。這個證明是有限度的,Sidechain 發展起來也是不容易。

以比特幣爲例,比特幣上的 Sidechain 沒有提供退出機制。它的基本機制就是用戶將比特幣用抵押的方法,依據某個共識算法抵押到一個 Sidechain 裏面去。這是一個原子化的操作,一旦完成抵押這個比特幣就不能在比特幣區塊鏈上使用,而是在 Sidechain 裏面置換成另一種幣。然後在符合一定退出規則的情況下就能夠回來變成比特幣。當然也有一些 Sidechain 沒有退出規則, 這一類 Sidechain 的節點上運行的會和比特幣一樣每十分鐘出一個塊,然後將這個 Block 的 Hash commit 到比特幣的區塊鏈上。如果 Sidechain 上完成一筆交易的話就可以引用 Sidechain 的 Markel Proof 來證明這個交易發生過,Markel Proof 會證明到比特幣的區塊上,然後比特幣本身也有自己的 Markel Proof。然後這樣的一環一環證明過去的話,可以證明交易確實發生過。

這是 Sidechain 的基本工作原理,它的缺點是失效的時候不能退出。進入 Sidechain 的時候就是 Sidechain 的規則。如果 Sidechain 上節點不斷減少最後變得不可信的時候,成員沒有辦法很容易離開這個有問題的 Sidechain,或者說沒有辦法在區塊鏈有問題的時候就離開。而 Plasma 就是在這裏提出瞭解決機制,這是第一點。

第二個就是 Sidechain 在 Plasma 中的定義改爲了 Childchain,也就是說 Sidechain 裏面可以運行其他的 Sidechain。這是非常有意義的,Sidechain 也需要定時向區塊鏈提供 Merkel Tree 的 Commit,這個成本是非常昂貴的。如果 Plasma 上有 Plasma 鏈的話,也需要提供 Merkel Proof。如果一個 Plasma 上面的業務非常少的話,業務帶來的利潤不足以支持這麼高的費用,那麼這個業務就應該在 Childchain 上運行。理想情況下一個以太坊會有多個 Plasma Chain,每個 Plasma 上有多個 Childchain。

第三個要點是,在 Plasma 上狀態(State )是用 UTXO 的方式來表示的。UTXO 有很多的優點,其中一個就是不用存儲過去的信息。UTXO 一旦被花費掉之後信息存在的意義就大大減少,清空這些信息能夠保證區塊鏈大小不會無限膨脹。另一個就是 UTXO 是一個布爾值,要麼是 0 要麼是 1 ,要麼被花費要麼沒有被花費。如果這樣的話一些分佈式計算的技術就能夠進來。要是業務有很多的值就會很複雜,狀態機很難達成共識。

Plasma 會有 UTXO 的 bitmap (位圖) commit 方法提供一些特性,比如設計個別用戶可以用在不信任的時候退出 Plasma 的機制。

第四個要點是在 Plasma 改變了信任的前提條件 —— 把”去中心化”改成了”無信任”。無信任和去中心化的意義是不同的,去中心化通常說就是比特幣的 “trusted third party” 這個角色,也就是說,一個去中心化的系統渠道是一個 trusted third party 的角色。在這個系統裏:

  • 被接受的交易就會按照規定的執行;
  • 交易次序是確定的;
  • 雙花是禁止的。

這三個點是去中心化能夠保障的特性。

無信任能夠提供的要小於這個,Trustless 不保證你提供的交易一定能夠被執行,但是能夠保證如果不被執行是有一個退出的迴路保證不會虧損,這意味着 Plasma 的信任等級和以太坊的信任等級是不同的。Plasma 可以崩潰,比如一些 Plasma 只有兩個服務器的時候可以宕機。用戶加入 Plasma 是爲了獲得更好的性能,並且能夠在不需要節點配合的情況下退出來防止自己虧損,這是 Trustless 的需求。

那麼退出機制是如何實現的呢?首先,Plasma 側鏈每過一段時間會向主鏈提供在側鏈上發生的 Merkel Root。如果參與側鏈的用戶有一個 Transaction,比如證明自己獲得了一定數量的幣,他會有一個 SPV (簡單支付驗證)和一個 Merkel Proof 來證明自己的 UTXO 是誰發給他的。如果是在以太坊上這樣證明就夠了,但是在 Sidechain 上這樣只能夠證明「某人持有了某個幣,有這個狀態的 UTXO」,但是並不能證明用戶沒有把這個錢花掉。

那麼如何進一步證明?在做 Merkel Proof 的時候會提供很多節點的信息,暴露 UTXO 在 Plasma 上的次序。如果子鏈每隔一段時間向主鏈提供一個 bitmap (位圖),上面每一個比特代表一個 UTXO 是否被花掉了。所以結合 Merkel Proof 和 bitmap,持有子鏈 UTXO 的用戶可以證明,他不但獲得了 UTXO 並且能夠證明這個 UTXO 沒有被花出去。這樣聯合起來可以成爲一個基本條件:

  • 用戶在退出 Plasma 鏈的時候還有資本;
  • 用戶的資本沒有被花費掉。

如果用戶的 UTXO 在一個子鏈上但是還沒有被寫入 Merkel Proof 的交易中,那麼這個證明就需要依靠超時機制,需要提供 Merkel Proof 和 Bitmap 來援引證明這個交易沒有被花出去,完成超時之後主鏈能夠允許用戶單獨退出。超時期間內是沒有辦法把資產在 Plasma 中花費出去的。結合這些機制,最終能夠讓用戶可以選擇自己退出區塊鏈(Plasma)。

Plasma 攻擊模型

那麼對 Plasma 的攻擊模型呢?主要有四種攻擊形式,分別是:節點作弊、節點停止工作、沒事瞎證僞、堵住門不讓退出。

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

第一個攻擊方式,Plasma 的節點作弊。比如 Plasma 節點雙花,許可了 Double spending。對於這種情況,如果用戶有一份 Plasma 節點上的區塊鏈全部信息,那麼就可以用這個找到兩個 double spending transaction 的 Merkel Proof ,在區塊鏈上參考這個 Proof 證明這件事情的發生。其他一些作弊方法都可以通過提供 Merkel Proof 來證明。

第二個就是 Plasma 節點停止工作。停止工作是說,Plasma 節點停止向主鏈提供 Merkel Proof。這時候主鏈上的智能合約可以檢測到異常事件的發生,原先建立的共識機制如果是允許用戶退出的話(通常是允許的),智能合約會觸發一個特殊規則讓資產持有人能夠集體退出,過程中需要每個人有自己的資產證明(Merkel Proof)。但是這麼做意味着錢包會厚一些,因爲 UTXO 需要足夠多的證據證明,在 Plasma 節點停止工作的時候有足夠的證據讓自己退出。

第二個情況是 block withholding,這個情況是說,Plasma 節點向以太坊提供了 bitmap 和 Merkel Proof,卻沒有向 Plasma 上的其他用戶提供區塊鏈的鏈本身,這樣其他節點和用戶不知道這個提交 Merkel 的節點是否作弊,你只知道 Merkel Root 不知道 Proof,不知道有沒有發生共識錯誤或者節點提交了不合法的 proof。這個需要激勵機制來完成,具體可以參考一些相關的論文。

第三個就是沒事瞎證僞。這需要設計一個機制,如果 Alice 提交了證僞,但是在證僞的挑戰期有人提出了相反的證明,那麼 Alice 會受到懲罰。

最後是堵住門不讓退出。在某個時刻 Plasma 節點失效需要大家集體退出,而這時候很不巧以太坊網絡非常擁堵,這個問題就不是很好解決。網上有一些方法但是沒有一個能讓人完全信服。這是因爲區塊鏈不提供可靠性保證,區塊鏈能夠提供的是「如果交易被接受,那麼交易一定會按照規定的交易指令執行」,但是交易並不一定是會被接受的,比如在網絡擁堵、手續費不足的情況下。拿我們熟悉的 1CO 來舉例子,我們用以太幣買向某個 1CO 項目合約地址打款的時候,如果以太坊擁堵那麼是不能保證能夠買到的,這時候如果 1CO 要停止進行存款,你是沒有理由以以太坊網絡太擁堵爲理由要求對方延長打款期限,以太坊並不提供 availabliity 的保證,也意味着很難保證在大家集體退出是成功的,因此還需要更好的解決方法。

Plasma 缺點

最後來談一下 Plasma 的缺點。

未來百花齊放 Layer2,AlphaWallet CTO 深度解析 Plasma&State Channel

首先 Plasma 的中的資產不能在 Plasma 中產生,或者能夠在 Plasma 中產生但是隻能夠在 Plasma 中使用。 因爲對 Plasma 我們一開始就假設它不一定永遠存在,用戶是隨時準備退出的,設計好了逃跑機制隨時準備退出這個市場。那麼這樣的話逃跑機制是要求資產在主鏈上面通過 commit 傳遞到 Plasma 的子鏈上去。如果資產是在子鏈上產生的話,要退出 Plasma 的時候如何退回到主鏈就成了問題,因爲沒有證明。

第二個是說,同一份資產同時只能在一個地方,如果資產被 commit 到 Plasma 節點上,那麼它在以太坊上就不能使用。而這個會影響區塊鏈的一個用例。我們假設一個場景,如果一個 Plasma 負責電子產品購買,另外有一個由保險公司維護的保險的 Plasma,如果你買了一臺 iPhone,如果需要保險那麼 iPhone 的購買憑證是保險承諾的前提。這時候問題就出現了,一個 Plasma 它的資產(也就是 iPhone 的所有權)是通過以太坊購買的,所有權在負責電子產品的 Plasma 子鏈上,保險的證明在另一個 Plasma 上面,如果一個交易需要雙方共同簽名的話,不在一個鏈上是解決不了的。這時候雙方可以把相關資產的證明退回到主鏈,但是這麼做是有額外的成本的。而且我們不知道資產會用在什麼場合,所以退出可能經常需要發生,那麼 Plasma 的用途可能會被削弱。

最後一個就是用戶需要一定的操作才能維護自己的權益。我們必須承認會有一些 Plasma 子鏈缺乏維護,儘管我們提供了退出機制能夠讓缺少維護的 Plasma 子鏈資產能夠退出 Plasma 子鏈,但是這個需要資產的持有方自己執行一定的操作,如果出現用戶下線,上線的時候發現贖回期結束,那麼資產就會有損失。比如以前交易所就出現過這樣的情況,交易所被關閉給大家一個月的時間提幣,一個月之後就不認賬了。這個現象其實和 Plasma 很相似,但是 Plasma 還沒有開始實施,我也不知道會怎麼樣,但是用戶是需要一定的操作來維護自己的權益的。

Bonus:Truebit

Truebit 和之前的方案都不同,是將複雜的計算任務外包的處理方法。拿拳皇遊戲舉例子,這樣的遊戲裏面是有的計算的,比如攻擊、防禦、技能傷害的計算。但是這些計算因爲很細節是不能寫進智能合約裏面去的。Truebit 提供了一種機制,能夠利用 Merkel Tree 的機制來幫助以太坊成爲一個判官的角色, Truebit 完成計算任務,最後在區塊鏈上結算。如果雙方出現爭議,可以在 Truebit 中運行遊戲的過程,把過程的每一步內存裏面的變量信息都變成 Merkel Tree 的節點。然後通過一些協議互相在區塊鏈上發佈證明,最後找到作弊的一方。這樣能夠讓遊戲在區塊鏈上玩,也能夠讓一些計算外包任務的場景能夠在區塊鏈上做。