1. 程式人生 > >區塊鏈擴容系列之Plasma MVP

區塊鏈擴容系列之Plasma MVP

以太坊低TPS一直被詬病,最近V神提出一種將以太坊TPS提升到500的方案,一經發表就被BM調侃。

      

     可見以太坊低TPS目前確實嚴重阻礙了以太坊的發展,連V神都不得不經常發聲。我們知道以太坊低TPS的一個關鍵原因是以太坊採用POW,因而將部分交易計算量分散到其他非POW網路是提升TPS的一個方向。Plasma就是這樣一個非POW網路(側鏈),Plasma子鏈礦工可以是DPOS節點,甚至可以是任意確定的單獨個體,從而可以讓執行效率成本增長,並具備良好的scaling。

     由於Plasma子鏈資料由子鏈礦工維護,而子鏈礦工可能只有21個節點甚至一個節點,子鏈的資料安全性就是一個很大問題。當初以太坊採用POW就是為了保證鏈的安全性,如果為了提升TPS而損失安全性,那直接將以太坊從POW改為DPOS即可,沒必要搞Plasma側鏈了,因而Plasma子鏈仍要維持POW級別的安全。這個子鏈的安全性就是通過merkle驗證機制保障的。子鏈礦工維護子鏈的交易資料詳情,而主鏈只儲存交易merkle樹根Hash並驗證子鏈交易資料的正確性。下面就以Plasma MVP版本實現為例來解讀這個安全保障機制。

Plasma MVP

Plasma MVP 全稱是Minimal Viable Plasma,採用UTXO模型,整體結構圖如下

Plasma MVP目的是以非常簡單的方式提供Plasma鏈的基本安全屬性。

Plasma的安全性主要包括如下幾點:

        1)資產不能被雙花

                資產不能被雙花需要有兩個保證

                    轉移到Plasma子鏈的資產必須凍結,不能在主鏈使用,這個通過Plasma Contract合約鎖定主網資產

                Plasma子鏈不能存在雙花交易

                    由於子鏈安全性很弱,礦工也可能是作惡節點,因而需要有其他機制來保障子鏈交易的安全性。

        2)Plasma鏈下的資產能自由兌回主鏈

                這個通過startExit實現,使用者可以不需要通過operator直接呼叫,  因而能及時贖回資產。

Plasma系統角色

    使用者(client):

        參與Plasma系統的普通使用者,想在Plasma子鏈高效低成本轉賬的使用者

    Plasma子鏈礦工(operator):

        Plasma系統的維護者,負責將子鏈區塊資訊打包到主鏈

    Plasma主鏈智慧合約:   

        負責儲存子鏈少量資料,驗證子鏈操作的正確性合理性。

Plasma智慧合約介面

  • deposit():

    使用者充值資產,智慧合約會產生一個UTXO

  • startExit(uint256 _utxoPos, bytes _txBytes, bytes _proof, bytes _sigs)

     使用者退出以提取資產。退出時需要提供要退出的UTXO的資訊。智慧合約通過_utxoPos可以計算出區塊及oUtxoIndex,然後根據該交易的完整資料及_proof(Merkle路徑), 即可驗證該utxo是否是一個合法的utxo,但是該utxo是否在後面的區塊被使用掉(spent), 智慧合約是沒有足夠的資訊去檢測的。交易內容中有,startExit操作需要引用一筆交易TxA,用以證明代幣T的所有權歸屬於使用者U,以及TxA的“直接祖先”TxB,連同這兩筆交易所在的區塊。

  • challengeExit(uint256 _cUtxoPos, uint256 _eUtxoIndex, bytes _txBytes, bytes _proof, bytes _sigs, bytes _confirmationSig)

    由於智慧合約儲存的資料有限,沒法檢驗一個utxo是否已經被消耗。因而需要其他機制來檢測雙花行為。challengeExit就可以用於懲罰雙花行為的。client儲存了所有交易的細節,自然知道哪些exit操作是一個雙花行為,通過傳遞證據呼叫challengeExit來挑戰這些非法退出操作。

  • submitBlock(bytes32 root):

    子鏈礦工向合約提交區塊資訊的介面,只需提供區塊交易merkle樹根hash

Plasma區塊生產

           有兩種方式生產區塊。

            1)使用者充值主鏈資產(比如ETH)

                使用者通過呼叫Plasma主鏈智慧合約Deposit介面充值資產到Plasma鏈,智慧合約會構造一個充值交易和一個區塊,該區塊只包含該充值交易。Plasma子鏈需要監聽主鏈智慧合約事件,並將該充值區塊資料儲存到本地。

            2)子鏈礦工(operator)建立區塊。該區塊包含子鏈裡的交易

UTXO合法性檢驗

    任何一個UTXO都是一個交易的out, 要檢驗UTXO的合法性,只需要檢測某一合法交易的對應輸出是否包含該UTXO。由於Plasma主鏈智慧合約只儲存區塊的交易merkle樹根hash, 因而智慧合約時沒法直接檢測的,呼叫者必須提供證據。這個證據就是交易資料+merkle路徑。

        

    智慧合約通過交易資料算出葉子節點hash,然後通過橙色的兄弟節點hash(merkle路徑)遞迴計算就可以得到root hash,然後比較該root hash和合約裡儲存的root hash即可知道tx data是否是真正的資料。merkle樹的更多資訊可以看看這篇文章:https://blog.csdn.net/ITleaks/article/details/79992072

作惡懲罰機制分析

Plasma模型下,普通使用者和礦工(operator)都可作惡。

        使用者作惡:

            可通過startExit來提取已經被花掉的utxo,即雙花。這種情況下,只需其他使用者發現該行為並通過challengeExit即可阻止該行為。同時,為了給challengeExit足夠的時間,startExit呼叫後,呼叫者並不能立即獲得主鏈資產,必須等待7天且沒有被challenge成功才行。

        礦工作惡:

            1)向主鏈提交錯誤區塊,由於submitBlock只接受merkle root hash,沒有足夠資訊來檢測區塊內容的正確性。

                    這種情況下,普通使用者可以通過監聽區塊內容檢測是否是正確區塊,如果發現operator作惡,普通使用者啥都沒法幹,只有通過startExit贖回自己的資產並退出這個子鏈。

            2)operator不工作

                operator為了避免普通使用者發現自己的錯誤區塊資料,可以選擇不給使用者傳送區塊資訊,使用者自然就沒法發現operator的做惡行為。為了避免這種情況,普通使用者可以定時檢測operator是否在出塊及傳送區塊資訊,如果發現operator已失聯,可呼叫startExit贖回資產並退出該子鏈。

作惡行為檢測激勵

    利益驅動:

        當用戶A呼叫startExti贖回一個屬於使用者B的utxo時,使用者B自然有動力去發現並舉報這次作惡行為,否則B會丟掉屬於自己的資產。

    獎勵驅動:

        使用者在呼叫startExit時必須抵押一定量的資產,當被challenge成功時,挑戰者獲得押金。

MVP的限制

     Operator作惡或者子鏈癱瘓時,可能會出現擠兌現象而導致challengeExit操作阻塞,進而導致非法startExit超期而成功。

     Plasma參與方需要儲存全網所有資料。目前只支援ETH。 

|**************************************************
* 本文來自CSDN博主"愛踢門",喜歡請點關注
* 轉載請標明出處:http://blog.csdn.net/itleaks
***************************************************|
EOS生態訪問:https://eosfavor.com
公眾號:區塊鏈斜槓青年

歡迎大家加我微信:itleaks