這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本執行原理,具體操作細節,安全性討論以及未來研究方向等。本篇文章作為開篇,主要目的是理解 Plasma 框架。
Plasma 作為以太坊的二層擴容框架,自從 2017 年被 Joseph Poon(Lightning Network 創始人)和 Vitalik Buterin (Ethereum 創始人)提出以來[1],一直是區塊鏈從業人員關注的焦點[2]。首先需要明確的是,Plasma 實質上是一套框架,而不是一個單獨的專案,它為各種不同的專案實際專案提供鏈下(off-chain)解決方案。這也是為什麼很多人對 Plasma 感到疑惑的一個重要原因,因為在缺乏實際應用場景的情況下很難將 Plasma 解釋清楚。
因此,理解 Plasma 是一套框架是理解 Plasma 的關鍵。
從區塊鏈擴容談起
在介紹 Plasma 之前,不得不先介紹區塊鏈擴容。我們都知道,比特幣(Bitcoin)和以太坊(Ethereum)作為目前最廣泛使用的區塊鏈平臺,面臨的最大問題就是可擴充套件性(Scalability)。這裡需要注意的是,區塊鏈中的可擴充套件性問題並不是單獨特指某個問題,而是區塊鏈想要實現 Web3.0[3] 的願景,為億萬使用者提供去中心化服務所要克服的一系列挑戰。雖然以太坊號稱是“世界計算機”,但這臺“計算機”卻是單執行緒的,每秒鐘只能處理大約 15 條交易,與目前主流的 Visa 和 MasterCard 動輒每秒上萬的吞吐量相比實在相形見絀。因此如何在保證區塊鏈安全性的情況下,提高可擴充套件性是目前區塊鏈發展亟待解決的問題之一。
目前關於區塊鏈擴容的解決方案無外乎兩個方向:一層(Layer 1)擴容和二層(Layer 2)擴容[4]。一層擴容也被稱為鏈上(on-chain)擴容,顧名思義,這類擴容方案需要更改區塊鏈底層協議。但同時也意味著需要將區塊鏈硬分叉。這類擴容方案就像將原來的單核 CPU 改裝成多核 CPU,從而可以多執行緒處理計算任務,提高整個網路的吞吐量。
目前最典型的一層擴容方案是 Vitalik 和他的研究團隊提出的“Sharding(分片)”,也就是說將區塊鏈劃分成不同的部分(shards),每個部分獨立處理交易。想要了解更多關於 Sharding 的資訊,可以參考以太坊官方的 Wiki[5]。
二層擴容也稱鏈下(off-chain)擴容,同樣非常好理解,這種擴容方案不需要修改區塊鏈底層協議,而是通過將大量、頻繁的計算工作轉移到“鏈下”完成,並定期或在需要時將鏈下的計算結果提交到“鏈上”保證其最終性(finality)。二層擴容的核心思想是將底層區塊鏈作為共識基礎,使用智慧合約或者其它手段作為鏈下和鏈上溝通的橋樑,當有欺詐行為發生時鏈下的使用者仍然可以回到鏈上的某一狀態。雖然將計算轉移到鏈下會在一段時間內損失最終性,但這個代價是值得的,因為這樣做不止可以極大提高區塊鏈的靈活性和可擴充套件性,也極大降低了使用者進行交易所需要的代價。將計算轉移到鏈下也並不意味著完全放棄安全性,因為最終的安全性還是由底層所依賴的區塊鏈來保證,因此二層擴容主要關注的問題就在於如何保證鏈上鍊下切換過程的安全性。這種思想最早被用在閃電網路(Lightning Network)當中作為比特幣的其中一個擴容方案,並取得了很好的效果。
本文所要介紹的 Plasma 就屬於基於以太坊二層擴容方案,類似的解決方案還有 State Channels 和 Trubit。這些方案雖然面向的問題有所區別,但基本思想都是將複雜的計算轉移到鏈下進行。那麼,接下來我們將進入 Plasma 的世界,一窺究竟!
理解 Plasma
在前文中我們已經明白 Plasma 是一種二層擴容框架,那麼該如何進一步理解 Plasma 是什麼?它區別於其它二層擴容方案的地方在哪呢?
Plasma 也被稱為“鏈中鏈(blockchains in blockchains)”。任何人都可以在底層區塊鏈之上建立不同的 Plasma 支援不同的業務需求,例如分散式交易所、社交網路、遊戲等。
這裡可以舉一個例子來理解 Plasma。假如企鵝公司建立了一個 Plasma Chain 叫作 Game Chain。使用者通過向 Game Chain 傳送一些以太幣換取 Token,用於購買皮膚等遊戲內的增值商品。加入 Game Chain 的操作是在鏈上進行的,以太坊區塊鏈將這部分資產鎖定,轉移到 Game Chain 上。之後每次我們購買虛擬商品的交易就會轉移到鏈下進行,由企鵝公司記賬。這種方式幾乎跟我們現實生活中游戲內購的體驗一樣,不僅結算迅速,而且手續費低廉(相比於以太坊之上需要給礦工支付的手續費)。那麼問題來了,如果企鵝公司從中作祟,修改賬本,惡意佔有我們的資產怎麼辦?這時我們就可以提交之前每次交易的憑證到以太坊區塊鏈上,如果確實是企鵝惡意篡改了賬本,那麼我們不但能夠成功取回自己的資產,還能獲得之前企鵝公司建立 Game Chain 存入的部分或全部押金。
通過上面這個例子是不是已經明白 Plasma 大致是如何工作的了?但上面這個例子還是過於簡單,只涉及使用者自己和企鵝公司。下面我們使用區塊鏈的語言對上面的例子進行解析。
首先,企鵝公司在以太坊主鏈之上建立了一系列智慧合約作為主鏈和子鏈 Game Chain 通訊的媒介。這些智慧合約中不僅規定了子鏈中的一些基本的狀態轉換規則(例如如何懲罰作惡的節點),也記錄了子鏈中的狀態(子鏈中區塊的雜湊值)。之後企鵝公司可以搭建自己的子鏈(可以用以太坊搭建一套私鏈)。子鏈實際上是一個完全獨立的區塊鏈,可以擁有專門的礦工,使用不同於主鏈的共識演算法,例如 PoS(Proof of Stake)等。
當子鏈建立完畢後,企鵝公司可以使用 ERC721 合約建立 token 作為遊戲內的商品(就像 Cryptokitty)。但這裡需要注意的是,所有數字資產必須在以太坊主鏈上建立,並通過 Plasma 子鏈的智慧合約轉移到子鏈中。使用者也需要在主鏈上購買數字資產後轉移到子鏈上。在上面這個例子中,Game Chain 的智慧合約將主鏈上的資產鎖定,之後在子鏈上生成等值的資產。之後使用者就可以完全脫離主鏈,在子鏈上進行交易。企鵝公司在子鏈上扮演 operator 的角色,如果一切執行正常,子鏈中的礦工會正常打包區塊,並在需要時由 operator 將區塊的雜湊值提交到主鏈作為子鏈的狀態更新證明。在這個過程中,使用者完全不需要和主鏈互動。
我們可以看到,將複雜的計算操作轉移到鏈下確實使得整個交易過程變得簡單。但沒有強大的共識演算法和龐大的參與者,資產在子鏈上是很不安全的。Plasma 給了我們一種避險機制,即使 operator 作惡,我們也能取回屬於自己的資產。下圖(來源自[1])簡單說明了這個過程。圖中,在第 4 個區塊中的交易被篡改。由於 Alice 本地儲存有 Plasma Chain 中所有的區塊資料,因此她可以向主鏈提交一個含有“防偽證明(Fraud Proof)”的交易。如果證明生效,那麼主鏈將狀態從 4 號區塊回滾到 3 號區塊,一切恢復正常。Plasmas Chain 中的參與者也可以隨時提交資產證明,返回到主鏈。
到這裡我們應該已經理解了,Plasma 所要做的工作並不是保護子鏈的安全,而是當有安全事故發生時,保證使用者可以安全地取回自己的資產,並返回到主鏈上。並且採用一系列經濟激勵的方式減少作惡情況的發生。
下一篇文章將對 Plasma 執行過程的細節進行剖析。
相關資源
- https://plasma.io/
- https://ethresear.ch/c/plasma
- https://medium.com/l4-media/making-sense-of-web-3-c1a9e74dcae
- https://blog.ethereum.org/2018/01/02/ethereum-scalability-research-development-subsidy-programs/
- https://github.com/ethereum/wiki/wiki/Sharding-FAQs
- https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4
- https://medium.com/@argongroup/ethereum-plasma-explained-608720d3c60e
本文的作者是蓋蓋,他的微信公眾號: chainlab
深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術部落格。