近段時間著名的比特幣投資者Olivier Janssens發布的推特投票中,Vitalik Buterin表達了其對ERC20 CBDC(央行數字貨幣)的支持。當被問到有關延展能力的問題時,Buterin回答,即將到來的Plasma部署能夠解決這類問題,這樣區塊鏈網絡就足以支撐央行需要的容量了。
本期研究院的主題就詳細為大家詳解Plasma擴容方案如何做到支持極高的交易,并且成為行業內最風靡的落地技術方案。
Plasma到底是什么
Plasma是由Joseph Poon和Vitalik Buterin提出的一種區塊鏈擴容方案。Plasma是指在根區塊鏈或者說主鏈(例如以太坊區塊鏈)上運行一系列智能合約,這些合約會制定相關的規則。基于根區塊鏈上部署的合約延伸出來的區塊鏈被稱為子鏈,合約中制定的狀態交易規則將用于子鏈,這些子鏈也可以進一步衍生出自身的子鏈。
大多數情況下,子鏈能夠完成大量的計算,僅僅周期性的將正常狀態的Merkle證明廣播到根鏈,根鏈只需處理少量來自子鏈的請求,這樣可以大大擴展整個系統的容量。
根鏈和子鏈形成了一種樹狀的分層結構,如下圖所示。區塊的提交依次向下流動。用戶想要退出Plasma子鏈時,退出申請可以提交給任意父鏈,最終被提交到主鏈。
Plasma類似于一個法院的系統,位于不同樹深度的Plasma區塊鏈就像是各級法院。更高一級的法院可以否認下層法院的審判結果,根鏈就是級別最高的法院。一般情況下由低級別法院進行審判,若用戶不認同審判結果,則可以回到更高級別的法院。這樣可以最大化下層法院的可用性,最小化非共識狀態的成本。
Plasma中蘊含的博弈機制
Plasma是通過創建經濟激勵和獎懲機制使整個區塊鏈系統正常工作。在Plasma區塊鏈中,子鏈擁有自己的共識算法,且獨立于根鏈。與現有區塊鏈類似,子鏈中也存在區塊生產者,稱為Plasma鏈的運營者(Operator)。但是這些區塊生產者需要抵押一部分資產,如果他們保持誠實,正確地記錄子鏈的區塊內容,那么他們會得到經濟上的獎勵;而如果他們出現不良的欺詐行為,則抵押的資產將被銷毀。
在一個Plasma子鏈中,驗證者(validator)或運營者負責將子鏈的相關活動通知給根鏈。為節省存儲空間,只有區塊頭的哈希提交到根鏈,其他信息保存在子鏈上。
若要使用Plasma鏈,用戶需要向Plasma鏈中存入資金。用戶通過將資金移動到根鏈上部署的Plasma智能合約上的方式,將資金從根鏈轉移到相應的子鏈上。
Plasma區塊鏈中,根鏈是所有全局計算的強制執行者,并僅在給予欺詐行為操作者懲罰。若Plasma子鏈中的用戶發現運營者提交了偽造的信息給根鏈,那么他們可以提交相關的欺詐證明數據給根鏈,以證明運營者提供的數據是偽造的。一旦證明成功,Plasma子鏈的區塊將回滾到偽造之前的狀態,同時,運營者也將受到懲罰。
如何取回質押資產
如果用戶想要取回自己的資產,或者用戶對自己所在的Plasma鏈產生信任危機,想將資產轉移回根鏈或Plasma父鏈。用戶可以發起一個取款交易(Withdrawal transaction)或者退出交易(exit transaction),即用戶提交其交易歷史的Merkle證明,以證明其擁有一定數量的資金。
一般地,取款的類型分為兩種。一種是簡單取款(Simple Withdrawal),即單方從子鏈中取回資產;另一種是大量取款(Mass Withdrawal),即多方一起從子鏈取回他們的資產。
簡單取款包含以下幾個步驟:
1.用戶提交一個簽了名的取款交易(Withdrawal transaction)給根鏈或者Plasma父鏈。用戶在發起取款交易的同時需要附上一筆押金作為獎勵金。
2.提交取款交易后進入一個挑戰期。在挑戰期時間內,任何人都可以提交欺詐證明來挑戰該用戶的資產聲明,證明該用戶的資產聲明無效或者過期。若挑戰成功,那么該筆取款交易會被取消,且挑戰者可以得到該用戶提供的獎勵金。
3.若直到挑戰期結束都沒有人能夠提供欺詐證明,那么就認定該取款交易是正確的,該用戶可以贖回在根鏈或Plasma父鏈上的資金,且獎勵金會退回給用戶。
Plasma的設計模型有兩個主要的分支:Plasma MVP(Minimal Viable Plasma,最小可行的Plasma)和Plasma Cash。Plasma MVP的目標是為最基本的可用的Plasma提供設計規范。Plasma cash是做了部分修改的一個Plasma版本,使用戶進行資產證明或驗證時所需提供的數據更少。
阻止運營者的欺詐行為
假設在Plasma鏈中,Sam的資產為2.5個PETH,Alice的資產為3.5個PETH,若此時Plasma鏈的運營者創建了一個無效的Plasma區塊來聲明自己具有很多PETH,并將該無效的Plasma區塊信息提交給根鏈。這種情況下,Sam和Alice可以通過向根鏈發起退出交易來阻止Plasma鏈運營者的欺詐行為,具體過程如下:
(1) Plasma運營者創建一個無效的Plasma區塊,該區塊包含一筆交易,該交易虛構運營者具有9999個PETH;
(2)Plasma運營者將該無效區塊的信息提交給根鏈;
(3)根鏈中的礦工發現運營者提交的信息,在創建根鏈的區塊時將該信息包含在區塊中,此時相當于無效的Plasma區塊被確認;
(4)Sam和Alice注意到Plasma運營者的欺詐行為,他們向根鏈提交退出交易。為了得到這一大筆虛造的PETH,Plasma運營者也立即向根鏈提交一個退出交易;
(5)此時,根鏈上的Plasma合約共有6個PETH。根鏈根據用戶的交易最初被創建的時間,按照從最早到最新的順序處理Plasma用戶的退出交易。根據Plasma鏈中的交易情況,Sam最早向Plasma鏈轉入5個PETH,然后是Alice轉入了1個PETH。因此Sam的退出交易最早被根鏈處理,然后是Alice,最后才是Plasma運營者。
(6)根鏈根據Plasma鏈和根鏈的區塊順序,依次清算各區塊里的交易,首先退回Sam2.5個ETH,加上Sam原來擁有的5個ETH,Sam共有7.5個ETH。然后,根鏈退回Alice3.5個ETH。此時,Plasma合約中沒有多余的資金可以退給Plasma運營者,因此Plasma運營者的欺詐行為失敗。
上述描述的系統運作方法以及對于欺詐行為的處理方法已經可以滿足一個基本的Plasma系統的要求。
Plasma Cash
Plasma Cash相比最早提出的Plasma進行了以下修改:
(1)每個單筆存款都對應有一個唯一的幣ID,代幣無法分割也無法合并;
(2)交易不是按照txindex的順序存儲在二進制Merkle樹中,而是存儲在稀疏簡單的Merkle樹或Patricia樹中,并且索引是所花費的幣的ID。
簡單理解,就是在Plasma Cash中,對于用戶存入的某一筆代幣,其會被分配一個唯一的ID,該代幣相關的交易記錄存儲在稀疏的Merkle樹或Patricia樹的葉子節點中,通過這個唯一的ID可以檢索到葉子節點的位置,進而查到代幣的交易記錄。這有點類似于房屋買賣——交易時房屋并不會動,但是房屋的主人會更換,而房屋契據則會記錄交易相關方以及所有權易手的頻率。這極大降低了檢查代幣歷史記錄的難度,因為知道應該去查找樹上的哪個位置。
如上圖所示,要驗證某個代幣,只需要查詢該代幣ID在樹中對應的葉子節點。例如圖中樹的最左邊的葉子節點顯示該節點對應的代幣ID為Sam的資產。
Vitalik在對Plasma Cash的說明中提到,用戶在證明他們的幣沒有被雙花時只需提供:從幣被存入之后的所有交易,代表幣的交易歷史,加上每個區塊的不包含證明,用于證明那些區塊不包含花費了該幣的交易。用戶需要將幣轉給另一個用戶時,只需要將幣完整的證明發送給那個用戶。Plasma運營者只需要和每個用戶連接,每次創建一個區塊,只需將證明發送給對應的用戶。對于每個用戶,不需要發送任何不屬于該用戶的幣的相關數據。顯然,任何不屬于這些證明的數據不能用來欺詐退出或雙花用戶的幣。
Plasma Cash是一個比較新穎的想法,與傳統的必須驗證所有幣的整個交易鏈相比,其驗證方法更高效。目前,Plasma Cash的部分設計細節還不夠詳細,相信以后區塊鏈研究人員會對其進一步地完善。
總結
和許多區塊鏈擴容方案類似,Plasma的設計思想也是將大量的計算、狀態管理等分離出主鏈,減少主鏈所需處理的信息。
Plasma系統的一個較大的優點是使用退出機制來保障資金安全。當Plasma鏈的用戶想要將資金轉移到根鏈時,只需要提交一個退出交易。而根鏈對多用戶的退出交易的處理優先級方法,可以保證即使Plasma區塊鏈網絡發生黑客攻擊,用戶也不會失去其資金,最糟糕的情況也只是所有用戶被強制從Plasma子鏈上撤出。
當然,Plasma系統也存在一些問題。一個重要的問題就是當Plasma子鏈網絡出現問題或其他原因導致大量用戶將資金轉移回根鏈時,根鏈可能沒有足夠的能力在挑戰期內處理這些用戶的退出交易,這可能會導致用戶損失資金。這一點也可能會被黑客用來攻擊Plasma系統。針對這個問題,有人提出一個簡單的方法,就是延長用戶退出交易的挑戰期,以使根鏈有足夠的時間來處理。理論上可以在一定程度上解決這個問題,具體的實際效果,讓我們拭目以待吧。
評論
查看更多