本文首發於深刻淺出區塊鏈社區 原文連接:深刻理解Plasma(一)Plasma 框架原文已更新,請讀者前往原文閱讀git
這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本運行原理,具體操做細節,安全性討論以及將來研究方向等。本篇文章做爲開篇,主要目的是理解 Plasma 框架。github
Plasma 做爲以太坊的二層擴容框架,自從 2017 年被 Joseph Poon(Lightning Network 創始人)和 Vitalik Buterin (Ethereum 創始人)提出以來[1],一直是區塊鏈從業人員關注的焦點[2]。首先須要明確的是,Plasma 實質上是一套框架,而不是一個單獨的項目,它爲各類不一樣的項目實際項目提供鏈下(off-chain)解決方案。這也是爲何不少人對 Plasma 感到疑惑的一個重要緣由,由於在缺少實際應用場景的狀況下很難將 Plasma 解釋清楚。 所以,理解 Plasma 是一套框架是理解 Plasma 的關鍵。web
在介紹 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 也被稱爲「鏈中鏈(blockchains in blockchains)」。任何人均可以在底層區塊鏈之上建立不一樣的 Plasma 支持不一樣的業務需求,例如分佈式交易所、社交網絡、遊戲等。學習
<img src="https://raw.githubusercontent.com/gitferry/mastering-ethereum/master/Plasma-in-depth/images/Blockchains-of-blockchain.png" width="600" height="230" alt="Blockchains of Blockchain" />
這裏能夠舉一個例子來理解 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 運行過程的細節進行剖析。
本文的做者是蓋蓋,他的公衆號: chainlab
深刻淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。