序言
如果我們仔細回顧一下今年區(qū)塊鏈技術的進展,就會發(fā)現(xiàn)各種有新的想法的公鏈團隊越來越少出現(xiàn)了戳鹅,大家談論以及關注的點也都不那么聚焦在公鏈上了搏屑。反倒是很多新的 Layer 2 項目在不斷涌現(xiàn),非撤鄢活躍。
要知道在這之前亮垫,尤其是 2017 年模软,大家無人不談公鏈,無人不做公鏈饮潦,各種 ICO 的項目宛如烈火烹油燃异,火的一塌糊涂。
為什么會有這樣的思潮轉變呢继蜡?
這里還是需要提到不可能三角問題
2017 的很多區(qū)塊鏈團隊都是野心勃勃回俐,說要顛覆比特幣,顛覆以太坊稀并,各種區(qū)塊鏈 3.0仅颇,甚至是區(qū)塊鏈 4.0。比特幣和以太坊所為人所詬病的 TPS 碘举,也成了區(qū)塊鏈團隊攻擊并且用來給自己 PR 的材料忘瓦,很多宣稱有百萬 TPS 的項目誕生。
而經(jīng)過一年的發(fā)展引颈,大家發(fā)現(xiàn)要純靠一套算法和共識來解決區(qū)塊鏈的不可能三角問題是不現(xiàn)實的耕皮,因為如果你要保證系統(tǒng)的去中心化和安全性,每一筆交易必須由網(wǎng)絡中每個節(jié)點進行處理蝙场,而這樣就注定了它的性能肯定是達不到我們要求的凌停。
于是大家的關注點開始轉變罚拟,越來越多人開始關注第一層的擴容方案。以太坊生態(tài)其實一直在研究相關的擴容方案拉庶,只是大家在做公鏈遇到瓶頸的時候秃励,很多人才反過來關注這些東西。
讓每個節(jié)點做更多的工作量皆尔?
公鏈吞吐量的根本限制來自于它不能高于我們對單個節(jié)點所要求的交易吞吐量慷蠕,由此突破的方向我們可以想到,是不是能夠讓每一個節(jié)點做更多的工作食呻?
我們確實可以讓每個節(jié)點做更多的工作流炕,比方說把擴大區(qū)塊大小擴大四倍,這個意味著每一個節(jié)點的工作量是之前的四倍仅胞,但是這樣它就提高了加入門檻和犧牲了部分去中心化每辟。
因為擴容之后,節(jié)點做的工作多了,計算量也需要擴展,這樣會把一批算力小的機器給淘汰鸡典,會導致算力變的更中心化疟暖。
而且說實話,這種擴容方式對提升到我們需要的區(qū)塊鏈性能還差的遠。
那么現(xiàn)在的問題是,我們怎么在不增加單個節(jié)點工作量的情況下做更多有用的事情?
每個節(jié)點不需要處理每個操作舔稀?
在我們慣常的思維中,每一個節(jié)點是需要并行處理每一個交易的掌测,那么如果每一個節(jié)點不需要處理每一個操作呢镶蹋?
設想一下,網(wǎng)絡分成了兩個部分赏半,每個部分可以半獨立運作贺归。A 部分處理一批交易,B 部分處理一批交易断箫,A 和 B 之間彼此獨立拂酣,目前的交易限制就變成了兩個節(jié)點同時處理的交易總量,區(qū)塊鏈的吞吐量是翻倍的仲义。
而如果我們把區(qū)塊鏈分成很多部分婶熬,盡可能的細分赵颅,我們就可以成倍的增加區(qū)塊鏈的 Tps捂刺。
這就是我們俗稱的分片技術( Sharding )
區(qū)塊鏈被分成不同的部分族展,稱為碎片,每個部分都可以單獨處理交易恰画,這個技術通常被稱為第一層的擴展方案,它是在以太坊本身的基礎協(xié)議中實現(xiàn)的。
分片從設想上來說是一個非常棒的想法树瞭,但是在技術實現(xiàn)上,還是遇到了很多挑戰(zhàn)和問題凉敲。
從現(xiàn)有的容量擠出更多有用的業(yè)務爷抓?
我們如果從相反的方向考慮,我們并不增加區(qū)塊鏈本身的容量渤昌,但是我們用已有的容量做更多的事情呢迈窟?
這個很自然聯(lián)想到的是壓縮計算狂秘。
目前區(qū)塊鏈上絕大多數(shù)的共識的達成其實并不需要經(jīng)過所有節(jié)點的確認破衔,有些東西只發(fā)生在你我之間读第,我們兩者之間清楚就好怜瞒。
那么我們可不可以考慮把這些東西放在鏈外去做,最后底層擔任一個 Crypto Court 的角色呢漾橙?這樣可以兼顧去中心化、安全性和性能淘捡。
我覺得是完全可以的,而且我認為這個才是正確的一個方向
這就是我們接下來要著重講述的「鏈下」技術险绘,它們包括狀態(tài)通道瓣距、Plasma蹈丸、Truebit 等奋岁,它們也叫做第二層解決方案,簡稱 Layer 2蓝翰。
狀態(tài)通道(State Channel)
我們先來談談狀態(tài)通道畜份,舉一個例子方便大家理解。
Alice 和 Bob 一起玩一個劃拳游戲钙态。
Alice 贏了可以從 Bob 那里得到 1 塊錢驯绎,而如果 Alice 輸了需要給 Bob 1 塊錢,反之亦然册着。
如果這個游戲是在以太坊主鏈上運行,我們通常的方法是 Alice 和 Bob 一起創(chuàng)建一個智能合約司顿,每當劃拳游戲開始的時候大溜,他們向智能合約發(fā)起一個交易座云,當其中一個玩家贏了的時候,智能合約會執(zhí)行規(guī)則付給贏家 1 塊錢璧帝。
這個很清晰,也很簡單理疙,但是在以太坊上還是效率太低了。因為這個只局限 Alice 和 Bob 之間的交易需要整個以太坊來處理。
而且每次玩家需要操作的時候,都必須支付 Gas 費用,他們必須等待幾個塊之后才能開始行動击蹲,這個對于來玩游戲是很不友好的。
那么我們在這里可以不可以設計出一種系統(tǒng)骗露,盡可能的減少 Alice 和 Bob 在鏈上的操作柿隙?
是可以的。
Alice 和 Bob 能在鏈下更新游戲的狀態(tài),同時有必要可以恢復到以太坊主鏈的狀態(tài)的這種系統(tǒng)狈究,就叫做狀態(tài)通道缕探,它實現(xiàn)的過程可以概括為以下幾個步驟。
- 打開狀態(tài)通道
- 質押資產(chǎn)
- 建立一個去中心化的制衡機制
- 在鏈下發(fā)送交易
- 對狀態(tài)簽名并發(fā)送
- 雙方確認狀態(tài)的改變
- 關閉狀態(tài)通道
具體的過程如下:
首先鞋邑,我們在以太坊上創(chuàng)建一個智能合約,這個是一個類似法官的角色遵堵,Alice 和 Bob 為兩個參與游戲的玩家陌宿。
然后 Alice 和 Bob 開始玩游戲。
Alice 創(chuàng)建并簽署了一個描述她第一次操作的交易弥虐,并且把這個交易發(fā)給了 Bob,Bob 簽了名之后颖对,把簽名版本發(fā)了回去缤底,并且自己保留了一個副本,然后 Bob 創(chuàng)建并簽署了他第一次操作的交易魄梯,把這個發(fā)送給了 Alice 狭园,Alice 也對交易進行了簽名,再發(fā)回去,并且為自己保留了一個副本烘豹。
每次他們都能更新當前的游戲狀態(tài)构订,每個交易包含一個聲明,這意味著后面的交易總是能知道每個操作發(fā)生的順序挤渐。
這個其實暫時還沒有任何事情發(fā)生在鏈上或杠,他們只是在網(wǎng)站上互相發(fā)送交易覆享,沒有任何東西傳到區(qū)塊鏈上。但是所有的游戲交易都能發(fā)送到智能合約上厌衙,它們都是有效的區(qū)塊鏈交易瓷们。
我們可以把這個看成是兩個人互相寫在一系列區(qū)塊鏈認證的支票焕檬,實際上沒有錢存入銀行或者取出乎赴,但每個人都有一堆可以隨時存入的支票。
當 Alice 和 Bob 結束游戲之后丈冬,他們需要向法官提交最終的狀態(tài)來關閉這個通道蔑担,這樣只付一筆交易的費用届搁。
假設最后劃拳游戲經(jīng)過了很多輪,Alice 合計贏了 5 局瓶逃,那么 Bob 要給 Alice 5塊錢调违。法官合約保證這個最終的狀態(tài)是雙方都簽過名的虚婿,經(jīng)過一段時間挑戰(zhàn)期之后,確保沒有人能夠合法的修改這個結果屉符,合約就會向 Alice 付 5 塊錢唆香。
而需要「挑戰(zhàn)期」的原因是防止玩家作惡躬它。
如果 Bob 發(fā)送給法官的是更早的狀態(tài)倘待,沒有發(fā)送最終的真實狀態(tài)延柠,由于法官只是一個智能合約,它是無法知曉這個是不是最新的狀態(tài)的增热,那么 Alice 的資產(chǎn)就會受到損失。
所以我們有挑戰(zhàn)期摄咆,讓 Alice 有向法官合約證明 Bob 游戲狀態(tài)作惡的機會。
比方說涩金,如果 Bob 發(fā)送的是更早的狀態(tài),那么 Alice 是保留過這個狀態(tài)的副本的全度,她可以把這個狀態(tài)提交給法官合約。法官合約通過查看聲明就能判斷 Alice 發(fā)送的狀態(tài)是最新的咨堤,拒絕 Bob ,并且罰沒掉 Bob 的押金凸克。
再舉個例子咐容,不是很精確蚂维,但是方便大家簡單的理解狀態(tài)通道在做什么。
我們去賭場賭博苹祟,都要把現(xiàn)金換成籌碼,而賭場不管你在賭場游戲過程發(fā)生了什么砂轻,他們只看你結束游戲時候的籌碼曲初。
而每一次游戲結束你都可以離開賭場,你可以把你當時你的籌碼給到賭場官方杯聚,他們會把相應的籌碼兌換成現(xiàn)金給你臼婆。
就好比我們在狀態(tài)通道進行的交易是可以即使終結的
中間有很多不一樣的東西,例如在賭場是你一個人在執(zhí)行幌绍,而狀態(tài)通道需要兩個人甚至是多人等等颁褂,而且中間有很多博弈過程,我們不做詳細比較傀广,我只是想通過這個例子給大家描述清楚狀態(tài)通道大致在做什么颁独。
而通過描述過程,我們可以發(fā)現(xiàn)狀態(tài)通道有以下幾個特點。
優(yōu)點
- 狀態(tài)通道具有良好的隱私性
不管在狀態(tài)通道上發(fā)生了多少的瞬時交易蕾各,這些交易都是在通道內部發(fā)生的内颗,并沒有廣播和記錄在鏈上糟袁,其他人不會知道仿耽,所以具有非常好的隱私性。
- 即時終結性
只要狀態(tài)雙方都簽署了狀態(tài)更新砌滞,這個狀態(tài)就可以被認為是最終狀態(tài)打掘,大家可以隨時退出。
- 適合長時間多狀態(tài)更新
狀態(tài)通道特別適合那些需要長時間里交換許多狀態(tài)更新的參與者粪牲,因為在部署合約的時候,創(chuàng)建的狀態(tài)通道有一個初始成本,而一旦部署完畢求妹,狀態(tài)通道的邊際成本就接近于零强挫。
缺點
- 每打開和關閉一個狀態(tài)通道都需要一個鏈上交易
打開狀態(tài)通道如果只給發(fā) 1 筆交易,這樣會很不合算,因為還需要在鏈上做其他的兩筆交易便斥,它不適合低頻操作驶臊。
- 狀態(tài)通道的參與者要保持隨時在線
由于挑戰(zhàn)期的存在,狀態(tài)通道的參與者需要一直在線窖逗,如果不在線词爬,資產(chǎn)就有可能損失掉,我們平常用 imToken 做轉賬恕洲,等待幾個區(qū)塊的確認就好了殊校,需要一直在線對于參與者來說確實是一件很不友好的事情蹂安。
- 比較適合具有一組確定參與者的應用程序
因為狀態(tài)通道的法官合約始終需要知道作為通道的一部分的實體(地址)椭迎,當我們需要添加和刪除成員的時候,每次都需要更改合約田盈,重新建一條通道畜号,這個也是很麻煩的一個點。
接下來我們講講通過狀態(tài)通道實現(xiàn)的項目允瞧,幫助大家來理解其應用简软。
閃電網(wǎng)絡( Lighting network )
這個是比特幣網(wǎng)絡的微支付通道,已經(jīng)做了很多年了述暂,但是由于比特幣本身對于腳本和智能合約的支持非常的差痹升,它的解鎖和鎖定的流程設計的非常的復雜,所以這個項目一直發(fā)展很緩慢畦韭。
雷電網(wǎng)絡( Radien Network )
這個是以太坊上的微支付通道疼蛾,叫做雷電網(wǎng)絡,和閃電網(wǎng)絡類似廊驼。由于以太坊支持智能合約据过,所以它比閃電網(wǎng)絡要簡單很多,發(fā)展也快很多妒挎。
雷電網(wǎng)絡借鑒了閃電網(wǎng)絡的技術理念绳锅,關鍵技術也和閃電網(wǎng)絡一致,包括 RSMC酝掩、HTLC 等技術鳞芙。
它們出眾的地方在于,你不必與每個想要與之交易的特定人員都開通一個狀態(tài)通道期虾,你可以打開一個連接著更大的狀態(tài)通道網(wǎng)絡的通道原朝,這樣的話你可以向任何連接在這個狀態(tài)通道網(wǎng)絡上的人付款,并且不需與額外的費用镶苞。
參與者越多喳坠,網(wǎng)絡處理轉賬能力越高。但是在網(wǎng)絡建立初期茂蚓,由于支付通道很少壕鹉,所以需要有人多主動建立中介點,才能讓整個網(wǎng)絡更有價值聋涨。
Sprites
它引入了經(jīng)濟模型晾浴,給保持狀態(tài)通道的用戶提供經(jīng)濟激勵,以使他們能夠保持狀態(tài)通道牍白。
A 和 B 交易脊凰、B 和 C 交易時需要創(chuàng)立狀態(tài)通道,它們交易完之后都會把狀態(tài)通道關掉茂腥,而當下次 A 和 C 需要交易的時候狸涌,還需要另外建立狀態(tài)通道切省。
如果我們能通過經(jīng)濟激勵的模式把 A 和 B、B 和 C 之間的狀態(tài)通道給保持住杈抢,那么下次 A 和 C 交易数尿,就可以以 A 和 B仑性、B 和 C 的狀態(tài)通道作為跳板惶楼,進項交互。那么它們就不需要再建了诊杆。
這就是 Sprites 在做的事情 歼捐,提供了經(jīng)濟激勵鼓勵大家維護狀態(tài)通道,讓其能夠幫別人去做交互晨汹。
Counterfactual
它做的事情是 Generalize State Channel豹储。
我們之前提的都是 Payment 的狀態(tài)通道,如果是一個基于游戲的狀態(tài)通道淘这,像下五子棋剥扣、卡牌,它的退出的時候铝穷,法官的智能合約相對會寫的很復雜钠怯,工程實現(xiàn)方面更難。
而 Counterfactual 做的就是把法官這一層給 Generalize 了曙聂,只要你做完一次狀態(tài)通道的 Open晦炊,它就可以適應于各種應用,各種退出的方式宁脊。它抽象化了狀態(tài)通道的打開和退出機制断国,通過通用模塊化的實現(xiàn),允許大家更方便的使用狀態(tài)通道榆苞。
Liquidity Network
Liquidity Network 旨在解決以太坊支付速度的問題稳衬,它相對于閃電網(wǎng)絡和雷電網(wǎng)絡做了很多優(yōu)化。
雷電網(wǎng)絡是兩方之間的一個單向通道交易坐漏。而 Liquidity Network 采用了 Hub 的網(wǎng)絡拓撲結構薄疚,用戶可以加入到任意一個 Hub 中,通過 Hub 與其它用戶進行交易和支付轉賬仙畦,實現(xiàn)了多方之間的雙向通道交易输涕。
在之前的狀態(tài)方案當中,如果 A 要發(fā)給 C慨畸,他們之間沒有建立通道莱坎,但 A 和B、B 和 C 都有建立通道寸士,那 A 可以付費給 B 來「借道」完成與 C 的交易檐什,如果中間環(huán)節(jié)過多的話碴卧,“借道費”都也是一筆不小的開支。而由于 Liquidity Network 采用了 Hub 的結構乃正,所以 A 如果要發(fā)給 C住册,就不再需要通過 B 了,也就不存在「借道費」的概念了瓮具。
而且在 Liquidity 里面荧飞,利用 REVIVE 的押金再平衡算法,解決了雷電網(wǎng)絡通道之間資金獨立名党,不能自動平衡的問題叹阔。
比方說在雷電網(wǎng)絡中,如果 A 給 B 發(fā)交易传睹,然后 B 給 C 發(fā)交易耳幢,假設 B 的余額是 0,那么 A 發(fā)給 B 之后欧啤,B 不能直接發(fā)交易給 C睛藻,它必須跟 C 建立支付通道,并且充值足夠的錢(大于交易金額)邢隧,才能和 C 交易店印,顯得很麻煩。
而 Liquidity 通過 REVIVE 技術可以直接讓 B 和 A 交易完之后府框,立即和 C 交易 吱窝,大大增加了交易的效率。
FunFair
FunFair 是一個由以太坊智能合約支持的去中心化游戲平臺迫靖,其通過一對一的狀態(tài)通道( Fate Channel )建立了一個 P2P 的賭場院峡,旨在實現(xiàn)在線區(qū)塊鏈博弈的公平公正,解決「賭場」游戲高費用和低信任度的問題系宜。
SpankChain
SpankChain 是一個基于以太坊的照激,成人娛樂平臺,其現(xiàn)有產(chǎn)品包括 Vynos盹牧,一種點對點微支付處理錢包俩垃,它已經(jīng)為成人參與者建立了單向支付通道( 其 ICO 的時候使用的就是狀態(tài)通道)
Plasma
Plasma 是一個鏈下交易的技術,由 Vitalik Buterin 和 Joseph Poon 在2017 年 提出汰寓,它相當于貢獻了一條子鏈口柳,可以讓你在主鏈上質押資產(chǎn),然后在子鏈上產(chǎn)生資產(chǎn)有滑,而且它提供一個服務器跃闹,不需要點對點的交互,在服務器上就可以進行交互。
Plasma 子鏈可以更快地操作望艺,且交易費用更低苛秕,因為它的操作不需要在整個以太坊區(qū)塊鏈存留副本
它的基本流程和狀態(tài)流程也比較相似。
主鏈上抵押資產(chǎn)
在子鏈上交易
提現(xiàn)退出
不過狀態(tài)通道更多的是針對你想交易的那幾個點找默,是兩個人之間的交互艇劫,而它想要在一個大的庫里面進行復雜的操作是一個很困難的事情。而 Plasma 可以在子鏈上進行各種形式的交易惩激,調動智能合約店煞,轉賬給多個人等等,非常靈活咧欣,不像 State Channel 一樣浅缸,只有打開通道的人能用,任何人都可以隨時進來魄咕。
Plasma 是一個大的框架,細分有好幾種不同的實現(xiàn)方式蚌父。
首先哮兰,讓我來詳細介紹一下整個過程,來幫助你理解 Plasma 的整個框架苟弛,如下圖所示喝滞。
我們在以太坊上創(chuàng)建一套智能合約,作為 Plasma 的 Root Chain膏秫,而 Root Chain 包含了子鏈的狀態(tài)交易規(guī)則右遭,記錄子鏈的哈希值,并且其作為一個橋梁缤削,讓用戶在以太坊主鏈和子鏈之間轉移資產(chǎn)窘哈。
然后我們創(chuàng)建子鏈,子鏈可以擁有它們自己的共識算法亭敢,假設這里我們使用 POA ( Proof of authority )共識機制滚婉。
這個是一個依賴可信區(qū)塊生產(chǎn)者的共識機制,每個驗證者都必須都是通過身份驗證的可信人帅刀,打個簡單的比方让腹,以前交易需要一群互不認識的人來比拼算力,艱難計算一道復雜的數(shù)學題扣溺,但是現(xiàn)在我們有一個可信的人做擔保骇窍,所以便可以快速通過交易,要是這個人使壞锥余,其他的人可以把他踢出網(wǎng)絡腹纳。
假設游戲公司是唯一一個創(chuàng)建區(qū)塊的實體,這個實體運行著幾個節(jié)點,而這些節(jié)點被當作子鏈的塊生產(chǎn)者只估。
而子鏈一旦創(chuàng)建開始工作志群,塊生產(chǎn)者將定期向根合同做出聲明,這個將被記錄在 Plasma 的鏈上蛔钙,作為子鏈發(fā)生計算的證據(jù)锌云。
而用戶要玩游戲的時候,他們得先在主鏈上抵押資產(chǎn)獲得在子鏈上的資產(chǎn)吁脱,然后在子鏈上交互桑涎。
因為不需要與主鏈交互,而且只有少數(shù)幾個節(jié)點必須處理交易兼贡,所以交易費會很低攻冷,而且操作會很快。
我們結束游戲之后遍希,可以選擇提現(xiàn)退出等曼。
下面我將通過幾個問題,幫你更加深入理解 Plasma 的細節(jié)凿蒜,包括周期性提交和安全退出機制禁谦。
當你在子鏈上宣布要退出,你有 100 個以太要提現(xiàn)時废封,由于主鏈不一定知道子鏈的情況州泊,它是不能相信你擁有這筆資產(chǎn)的。
此時你就得提交證明漂洋,像默克爾樹證明遥皂,而默克爾樹證明是要證明到一個默克爾樹的根哈希的,你也得證明你上傳的根哈希是真實的刽漂。
這個就要求 Plasma 的子鏈周期性的把它的狀態(tài)(默克爾數(shù)的根哈希) Commit 到主鏈上演训,讓主鏈清楚子鏈根哈希的狀態(tài)。這就是周期性提交
不過這樣會存在問題
如果記賬節(jié)點放出來的信息是假的呢爽冕,他提交的根哈希和這條鏈實際產(chǎn)生的根哈希是不對應的仇祭,因為主鏈其實也不清楚,這個時候怎么辦颈畸?
我們就需要提供一個數(shù)學證明乌奇,證明它在同一個區(qū)塊高度簽名的數(shù)據(jù)都是一樣的,比方說 Validator 如果在這個區(qū)塊高度發(fā)出的信息是 A 眯娱,而 Commit 到主鏈上的區(qū)塊信息是 B 礁苗,我能通過這種數(shù)學形式發(fā)現(xiàn)記賬節(jié)點是作惡了的,這樣就可以罰沒它主鏈上的押金徙缴。
但是如果子鏈壓根就不公布區(qū)塊信息试伙,這樣就沒有作惡證明提交到主鏈上嘁信,這個時候怎么辦?
這個時候 Plasma 提供了一種 Safe Exit 的機制疏叨。
每一個在子鏈上的節(jié)點潘靖,如果意識到子鏈有可能作惡,而且他自己沒辦法證明子鏈作惡的時候蚤蔓,這個機制能夠允許參與者退出卦溢。參與者提交他最后的一個的可信證明,有多少余額秀又,就把這個余額提現(xiàn)到主鏈上单寂,保證資金的安全
這個是 Plasma 的核心理念,Plasma 不會為了速度犧牲安全吐辙。你可以在子鏈上自由交易宣决,并且在子鏈作惡之前,把幣提走昏苏。
MVP ( MInimal Viable Plasma )
這個是 Plasma 最早的實現(xiàn)尊沸,它采了取一條 UTXO-Based 的鏈作為子鏈,由于它需要子鏈不是概率確認的鏈捷雕,所以它一般采用的是 PoA 共識算法(或者 BFT)
所有的 Plasma 的核心都是在退出和挑戰(zhàn)的機制上椒丧,我們這里也著重強調一下它的退出和挑戰(zhàn)機制。救巷。
我們從圖可以很清楚的看到,用戶在主鏈上抵押了 Fungible Token 之后句柠,在子鏈上獲得了未花費的 UTXO浦译。
假設這個用戶花費掉了這筆 UTXO,分成了四筆輸出溯职,然后決定要退出精盅,要把這個錢提交到主鏈上,發(fā)起了一個 Start Exit谜酒。 同時他提交我擁有這個 UTXO 的證明叹俏,這個證明在默克爾樹的根哈希中,這個是由記賬節(jié)點定期的 Commit 到主鏈上的僻族。這兩個數(shù)值就可以證明這個用戶擁有這個 UTXO粘驰。
但是這樣就需要一個 Challenge 的過程,因為用戶提交的證明只能保證他在當前的區(qū)塊是擁有這個 UTXO 的述么,它并不能保證用戶之后不會花費這個 UTXO蝌数。
所以這里有一個比較長的挑戰(zhàn)期( Challenge Period),即一定的出塊時間度秘,讓別人去提交他作惡的證明 顶伞。
假設用戶在發(fā)起提現(xiàn)之后又給一個人轉了一筆賬,那么挑戰(zhàn)者是可以將這個轉賬交易記錄和這個默克爾樹哈希發(fā)送到主鏈上來證明用戶 Exit 是無效的,以此來罰沒用戶在主鏈上的押金唆貌,這個時候挑戰(zhàn)者就可以拿到這筆押金滑潘。
這里我們細化談談它的作惡和退出機制。
如果現(xiàn)在有一個密碼學證明锨咙,證明這個東西屬于張三语卤。因為這個交易打包在區(qū)塊里,這個區(qū)塊的默克爾樹哈希放在這個主鏈上蓖租。
但是如果一條線都是作惡的粱侣,出塊節(jié)點是作惡的,出塊節(jié)點做一個假的交易蓖宦,做了一個假的區(qū)塊和一個假的默克爾樹哈希齐婴,放到了根鏈上,這個時候根鏈實際是無法判斷的稠茂,如果我不把這個區(qū)塊公布出來柠偶,它是不知道我作惡的證據(jù)的。
這個時候用戶如果需要退出睬关,怎么才能保證用戶能夠正常退出呢诱担?
假設我作為一個作惡節(jié)點,知道你們要退出电爹,我可以先生成一批金額特別大的交易蔫仙,優(yōu)先你們退出,假設你要提現(xiàn) 100 個以太丐箩,我就可以偽造一個 101 以太的提現(xiàn)交易摇邦,這個等于說拿著你的錢就跑了。
因此 MVP 設置了一個優(yōu)先級的設計屎勘。每一筆進入 Plasma 的交易都會有一個優(yōu)先的序號施籍,高位是區(qū)塊高度,然后是交易在區(qū)塊里面的次序和這個 Output UTXO 在這個交易中的次序概漱。這樣就形成了一個全局唯一的序號丑慎,所有人按照這個序號退出遭殉。
如果某一個時刻大家開始發(fā)現(xiàn)節(jié)點開始作惡赶掖,要退出,一定是早期交易的區(qū)塊先退出剿涮,后期作惡的區(qū)塊后退出姻灶,我作惡區(qū)塊的意義不大铛绰。
但是這里還有一種作惡的方法。
如果誠實的交易被礦工打包到了作惡交易的后面产喉,因為礦工是可以選擇打包次序的捂掰。在這個錯誤的塊里面敢会,誠實的交易打包到錯誤的交易后面,導致誠實交易的退出優(yōu)先級低于作惡交易的優(yōu)先級这嚣。
1 個大戶把 1000 個以太打入到 Plasma 鏈上鸥昏,作惡礦工在存入的這個區(qū)塊里優(yōu)先造了一個假交易,然后放到區(qū)塊里面姐帚,先把 1000個 以太提走了吏垮,大戶是沒有辦法的
這里的解決辦法是對每個存款( Deposit )都做二次確認,第一次是存進去罐旗,確認這筆交易被打包在 Plasma 的區(qū)塊里膳汪,第二次是在用戶把幣存進去,確認存進去的區(qū)塊以及之前的區(qū)塊都是真實九秀、合法的情況下遗嗽,再發(fā)一筆交易,去確認這個交易是正確的鼓蜒。
在做了兩次確認痹换,證明交易都是真實之后,用戶再去退出就能夠安全退出了都弹。
More Viable PlasmA
不過 MVP 每一筆存儲交易多了一次簽名之后娇豫,對系統(tǒng)來說還是開銷很大的,所以有人提出了 More Viable Plasma畅厢。
它退出的次序不是以打包的次序為準冯痢,而是以退出的時候提交的 UTXO 的證據(jù),UTXO 輸入最早的一個 Input( Input 可能有四五個)框杜,哪個早就哪個先退出系羞。
這個的好處在于,早的 Input 一定是已經(jīng)被打包到交易區(qū)塊里面了霸琴,如果這個 Input 是假的,那么在 Input 發(fā)生的那一刻就已經(jīng)有人開始做退出了昭伸,這個是不可能的梧乘。
因此這個時候我可以假設這個 Input 是真實的,越早的 Input 它的真實性就越高庐杨,我退出的時候就按照 Youngest 的 Input 退出选调,它的保障性最高, 這個是 More VP灵份。
Plasma Cash
Plasma 還有一個實現(xiàn)叫做 Plasma Cash仁堪。
MVP 的缺點是,每一個人填渠,不光是礦工弦聂,都要時刻緊盯著這條鏈鸟辅,如果有人作惡,就趕緊退出莺葫。
而且一旦出現(xiàn)問題匪凉,退出還需要提供相應的數(shù)學證明。數(shù)學證明還得從本地同步的區(qū)塊中獲取捺檬,因為別人同步的可能都是假的再层,這就要求你還要同步區(qū)塊。
這一系列的過程對用戶是很不友好的堡纬。
這個時候有人就提出了 Plasma Cash聂受,它最大的特點是用戶只需要關注自己的數(shù)據(jù)就好了。
它采用的是 Non-Fungible Token 的存儲機制烤镐,它的 Deposit 進來之后是不分割的蛋济,每一筆存款,比方說 1號是 10 個以太职车,2 號是一只貓瘫俊,它們被打包成一個 Non-Fungible Token 放進來,系統(tǒng)給每一個打包的包裹一個序號悴灵,如圖所示扛芽,這個系統(tǒng)現(xiàn)在是有八個存款,每一個存款都是一個包裹积瞒。
假設三號包裹原來的持有人是 A川尖,他把這個包裹轉給了 B,在這個區(qū)塊里茫孔,它就包含了一個 A 到 B 的交易來指向三號包裹叮喳,六號包裹是 D 到 B,把所有權轉向了 B缰贝,剩下的包裹沒有動作馍悟。
而用戶只需要關心和自己有關的數(shù)據(jù),像圖中的 A 剩晴,他只需要關注 3 號和 5 號包裹锣咒,不需要關注其他人,因為所有人的錢是自成體系的赞弥,不是像 Fungible Token 捆在一起的毅整,所以像 6、7绽左、8 該退就退悼嫉,因為不是 A 的東西。
不過這里有一個問題拼窥,比如說 Bob 擁有 7 號包裹戏蔑,要轉給 A蹋凝,但是由于 A之前沒有和 7 號包裹交易,他只關注自己辛臊,他是不了解 7 的歷史的仙粱,所以Bob 給 A 轉賬的時候其實 A 是不確定對方是否擁有 7 號包裹的所有權的。
而 Bob 要證明擁有 7 號包裹的所有權彻舰,就必須把 7 號資產(chǎn)從創(chuàng)生到現(xiàn)在所有的資產(chǎn)伐割、每一個默克爾樹和默克爾樹哈希都給 A,來證明這個塊是真實屬于 Bob 的刃唤。
所以 Plasma Cash 轉賬的時候數(shù)據(jù)量是很大的隔心。
Plasma Cash 要求退出的時候,需要把最后關于這個 Token 的兩筆交易上傳尚胞,比方說 A 轉給 B硬霍,B轉給 G,而G要退出笼裳,那么 G 就把這兩筆交易提交到子鏈上退出唯卖,退出其實不復雜,復雜的是 Challenge躬柬,其 Challenge 主要有三種拜轨。
- 假設 A 退出之后又花費了資產(chǎn)
A 提出申請之后又把這個錢轉給了別人,這個時候 Challenger 可以把這個這個交易提交給主鏈允青,讓 A 退出失敗
- 雙花交易
A 和礦工串通同時轉給 G 和 F橄碾,Challenger 可以采取和 1 相同的方式,讓 A 失敗颠锉。
- 歷史的證明
因為退出的時候只提供最后的兩筆交易法牲,而它們可能都是假的,這個時候 Challenger 可以任意指定一個塊琼掠,要求對方證明是怎么到這個狀態(tài)的拒垃,以保證系統(tǒng)安全性。
Plasma Cash 的挑戰(zhàn)很復雜瓷蛙,轉賬證明也很復雜恶复,優(yōu)點是無需關心別人的狀態(tài),只需要關心自己速挑。
Plasma Debt
Plasma Debt 和 Plasma Cash 比較像,轉賬副硅、證明和挑戰(zhàn)都很類似姥宝,其區(qū)別是 Plasma Cash 里每一個包是一個 Non—Fungible 的資產(chǎn),而在 Debt 里每一個包是一個狀態(tài)通道恐疲,這意味著和狀態(tài)通道的交互可以不按整個包來交互腊满。
比如說我有 100 個以太套么,在 Plasma Cash 中,這 100 個以太我只能一起轉給張三或者一起轉給李四碳蛋,但是在 Debt 里面胚泌,這100個以太,我可以轉一部分給張三肃弟,轉一部分給李四玷室,不用全轉。
每一個 Token 都是使用者和 Plasma 鏈的運營者的一個小型狀態(tài)通道笤受,這個狀態(tài)通道也可以按照 Plasma Cash 的方式進行流轉穷缤,這樣可以讓用戶可以不需要把資產(chǎn)當成 Non-Fungible Token,還可以進行比較高效的運轉箩兽。
不過狀態(tài)通道按照 Cash 方式進行流轉還是會和 Cash 面臨一樣的問題津肛,轉賬證明很復雜,因為它依舊需要所有的歷史交易汗贫。
Plasma Leap
Plasma Leap 是在 MVP 的基礎上做的身坐,MVP 是一個類似比特幣的一個 UXTO 鏈,在比特幣里面是有一個解鎖腳本來做智能合約的落包,Plasma Leap 就把這種類似比特幣的智能合約的理念帶到了 Plasma 里部蛇,引入了 P2SH 加鎖腳本,對于存儲結構進行了提升妥色。
在每一個交易里面是可以加一個 EVM 的二進制代碼作解鎖腳本的搪花,這個代碼是對應一個智能合約,由智能合約來進行解鎖嘹害。
不過這個智能合約不像以太坊上的智能合約撮竿,那么完整完善,它做的事情很簡單笔呀,就是證明用戶能不能花費這個 UTXO幢踏,就像比特幣一樣,用戶能不能花費它许师,什么時候花費它房蝉,它不能做更復雜的智能合約。
鏈下計算( Off Chain Computation )
以太坊聲稱要做計算機微渠,EOS 要做全球操作系統(tǒng)搭幻,但無論是做計算機還是做操作系統(tǒng)都得正視計算這個問題,鏈上計算的開銷是非常大的逞盆,鏈上每一個 EVM 的 Code 計算需要全球計算機都算一遍檀蹋,才能得出結果,所以有人做了這么一個計算的擴展云芦,在鏈外做 Computation俯逾。
這個方式大致有兩種
TEE( Trusted Execution Environment )
第一種是在可信的執(zhí)行的環(huán)境中贸桶,把這個計算算出來,然后傳到鏈上去桌肴,再加上可信環(huán)境的一個證明皇筛。
這個證明不是計算結果的對和錯,而是證明這個計算是在安全的環(huán)境里運行的坠七。
可信的執(zhí)行環(huán)境在工業(yè)界相對來說還是比較成熟水醋,ARM 芯片是支持 TrustZone 方案的,我們用的蘋果和安卓手機的指紋灼捂,它的秘鑰信息都是存在 TrustZone 里面的离例。
它的優(yōu)缺點通過介紹其實也比較清楚了。
s
優(yōu)點
- 隱私性很強悉稠,因為所有東西都是在黑箱子里面的宫蛆。
- 性能也非常的高,單個機器執(zhí)行即可的猛,因為我信任的不是這臺機器耀盗,而是這個 Trust Zone。
- 功能非常的靈活卦尊,不像 Plasma 比較單一叛拷,它可以做各種各樣的東西甚至是遠超過 EVM 的東西,因為 EVM 里面做一些加密運算是很難的
缺點
黑箱計算引入了未知的風險
依賴于硬件限制了它的擴展性岂却,因為不可能每個人都有一個符合硬件要求的設備來運行這套系統(tǒng)忿薇。
系統(tǒng)的安全性是依賴于廠商的,廠商是可以在 Trustware 里面做任何的事情躏哩,這個也引入了風險.
所以這種依賴于安全執(zhí)行環(huán)境的 Layer 2 方案一般是由聯(lián)盟鏈或者是企業(yè)內部的鏈來使用的署浩。
Truebit
第二種叫 Trurbit,它解決的也是鏈外運算的問題扫尺,這個項目很有趣筋栋。
這里面有好幾個角色,包括用戶正驻、Solver 和 Challenger弊攘。
第一個是計算需求的提出者(用戶),這個計算需求是用 Truebit 的 VM 來描述的姑曙,在實際操作的時候襟交,Truebit 的 VM 是用 Rust 實現(xiàn)的
用戶可以選擇懸賞的方式找人來幫他做運算,運算的執(zhí)行人叫做 Solver伤靠。
Solver 把每一步的運算狀態(tài)都算成一個哈希折疊到默克爾樹里面婿着,在最后,Solver 把所有運算結果的默克爾樹的根哈希,以及運算的最終結果提交到區(qū)塊鏈上竟宋。
而 Challenger 需要自己算一遍生成結果,如果他發(fā)現(xiàn)算的結果和 Sovler 算的不一樣形纺,他就能根據(jù)錯誤信息找到哪一步或者是哪幾步錯了丘侠。Challenger 就能把這個狀態(tài)和狀態(tài)運行的指針上傳到區(qū)塊鏈上,挑戰(zhàn)這個 Solver逐样。
因為 Truebit 在鏈上擁有指令集蜗字,而且 State 可以證明它在原來的默克爾樹里面,于是鏈可以計算這個 State 加指令得到一個新的 State脂新,通過這個鏈可以開始判斷挪捕,這個 State 是 Solver 生成的 State 還是 Challenger 生成的 State,誰對誰錯争便。
Truebit 只需要鏈上的一步運算级零,就能夠證明所有運算是正確的還是錯誤的,它能把普通運算折疊成了最關鍵的計算滞乙,交給主鏈去運算奏纪,驗證。
鏈間通信( Interoperation )
跨鏈通信是一個跨鏈的技術斩启,它和 Plasma 不一樣序调,兩條鏈之間沒有特別強的主次關系,其子鏈和側鏈仍然有權利自己產(chǎn)生資產(chǎn)兔簇,自己運行发绢,然后通過某種協(xié)議和主鏈或者其他鏈進行跨鏈交互,大家進行數(shù)據(jù)互通垄琐。
它嚴格來說不是 Layer 1 的 Layer 2边酒,但是它對整個系統(tǒng) Scability 的提升是很有好處的。
接下來我簡單介紹兩個項目此虑,方便大家來理解甚纲。
Cosmos
Cosmos 的系統(tǒng)架構如圖所示,它中間有一個 Cosmos Hub朦前,周圍的叫做 Zone介杆,可以認為中間是一個交換鏈,周圍其他是子鏈韭寸。
Zone 是用 Tendermint 來做的春哨,采用的是 BFT 共識以及區(qū)塊鏈框架,它也滿足 Instant Finality(即時終結性)恩伺,如果系統(tǒng)是少于三分之一的作惡節(jié)點赴背,它一定是正確的。
它引入了鏈間通訊協(xié)議( Inter-Blockchain Communication ,簡稱 IBC) 凰荚,這個是類似 Plasma 和 State Channel 的一個協(xié)議燃观。
它的簡單流程如下,A便瑟、B鏈都是 Zone缆毁。
- 用戶在 A 鏈上鎖了 10 個幣
- A 鏈10 個幣被鎖住的密碼學證明被提交到了 B 鏈上
- 如果被 2/3 的驗證者驗證通過,則它是有效的到涂。
- B 鏈上將會產(chǎn)生 10個幣
而之所以需要 Cosmos Hub 的原因是它能夠把 Zone 相互建立的IBC 的數(shù)量從 N^2 變成 N脊框,不過這個也是有前提的,即所有的 Zone 必須是 Instant Finality践啄,你給我一個證據(jù)浇雹,我就認為你的幣就鎖在那里,拿不出來了屿讽,它不能是概率確認的昭灵,不能這里生成,那里又推翻了聂儒。
但是由于比特幣和以太坊是概率確認的鏈虎锚,如果這樣 Cosmos 就連接不到它們上面了,所以它做一個Peg Zone衩婚,這是一個代理鏈窜护,給概率確認的鏈做了一個代理,這樣 Cosmos 就能和它們交互了非春。
Polkadot
相對 Cosmos 來說 柱徙,Polkadot 是非常完善的項目,但它的架構和 Cosmos 幾乎是一致的奇昙。
它的中間叫做 Relay Chain 护侮,是 Cosmos 中 Hub 的角色,周圍的 Para Chain 是 Cosmos 中 Zone 的角色储耐。
Para Chain 用的是 Parity Substrate 這么一個框架羊初,這個鏈是基于 BFT 的,所以也是 Instant Finality什湘,而這樣同樣會遇到連接概率確認的區(qū)塊鏈的問題长赞,所以它提了一個 Bridge Chain 這樣的概念,這個和 Cosmos 的 Peg Zone 是一樣的闽撤。
但是 Polkadot 的 Parity Substrate 相對 Cosmos 的 Tendermint 是做的是比較完善的得哆。
Polkadot 的創(chuàng)始人用 Rust 實現(xiàn)的 VM 以及 BFT 做了一個升級,增加了隨機選舉驗證節(jié)點的方式加速了共識協(xié)議哟旗,所以它的速度會非撤肪荩快栋操,而且它部署智能合約以及升級節(jié)點的能力也很強。而且 Substrate 上引入了相對其他鏈更完善的治理機制饱亮。
現(xiàn)在我們重點來說說它的安全機制矾芙,這個是和 Cosmos 區(qū)別非常大的。
它提了一個概念叫做共享安全池( Shared Pool Security )近上,在 Polkadot 里面蠕啄,它的記賬節(jié)點和出塊節(jié)點是混在一起的。
其中有幾個角色戈锻, Collator、Validator和媳、Fisherman 格遭、高階Validator、 Nominator留瞳。
其中 Collator 是做區(qū)塊的打包和收集和交易的驗證拒迅,但是它沒有權利把這個區(qū)塊給確認,即他不能把區(qū)塊寫到區(qū)塊鏈里面她倘,而把區(qū)塊寫到區(qū)塊鏈里是 Validator 來做的璧微。
Collator 是針對每一條鏈的,每條 Para Chain 都有一組有相對應的 Collator硬梁,但是 Validator 是整個全網(wǎng)公用前硫,是隨機選出來的。
假設 PareChain 有一組 Collator 生成了一個區(qū)塊荧止,這個區(qū)塊由哪些 Validator來驗證我們并不清楚屹电,它是隨機選的,而選出的 Validator 將會投票看區(qū)塊是否合法跃巡,只有合法才能寫到這個子鏈的區(qū)塊鏈里面危号。
而 Fisher Man 是用來監(jiān)督 Validator的,那些經(jīng)得起考驗的 Validator素邪,可以變成一個更高階的 Validator外莲,高階的 Validator 可以判斷這個 Fisherman 的監(jiān)督是正確還是錯誤,比方說 Fisherman 舉報這個 Validator 作惡兔朦,之后高階 Validator 會判斷它是不是真的作惡了偷线。
高階 Validator 的選舉需要滿足兩個要求,一方面 Fisher Man 沒有舉報過低階 Validator 烘绽,另外一方面 Nominator 會來提名誰能來當高階的 Validator淋昭,這是一個互相制衡的結果。
但是它是怎么制衡安接,它最新的設計里面還沒有公開翔忽,它只是大致實現(xiàn)了這樣的一個點英融。
通過以上,我大致介紹了一些 Layer 2 團隊和項目歇式,雖然有的嚴格意義上來說并不能稱作是 Layer 2驶悟,但是我也一并列了出來,方便大家理解材失。
目前的情況就是痕鳍,公鏈的創(chuàng)新和熱度已經(jīng)逐漸趨于平緩,各種 Layer 2 的新團隊在不斷地涌現(xiàn)龙巨,我覺得這也是一個正確的趨勢笼呆,Layer 1 本來就不需做這么多事情,做好去中心化和安全就可以了旨别。
這也是 Nervos 在做的事情诗赌,我們認為一個好的 Layer 1 只需要做好 Key State 的存儲, Key Computation 以及對 Layer 2 友好就夠了秸弛。
像 Turebit 只需要鏈上的一步運算就能夠證明所有運算是正確還是錯誤铭若,和我們認為 Layer 1 需要做好的 Key Computation 是非常一致的,而 State Channel 和 Plasma 中所強調的 State 也和我們的方案很契合递览。
希望文章對你有所啟發(fā)叼屠,以上。