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