巴位元加速器技術公開課 | 你不知道的鏈下擴容技術
巴位元加速器推出的全球線上區塊鏈技術深度對話欄目Geekhub Global Online,定期邀請世界各地的資深技術大咖連線對話,旨在為技術社群輸送前沿高質量的區塊鏈技術內容;同時GeekHub技術社群成員也可以參與直播互動,共同探討區塊鏈的技術發展與未來。
擴容難題是現階段絕大多數區塊鏈企業的核心關注點。目前就區塊鏈擴容問題,目前市場上的擴容解決方案可大致分為兩類:1)鏈上擴容,即第一層(Layer1)擴容;2)鏈下擴容,即第二層(Layer2)擴容。第一期活動 ofollow,noindex">《分片與跨分片通訊技術的碰撞》 就對Layer1擴容中分片技術進行了探討。
時隔1個月,第二期活動Geekhub Global Online-Layer 2擴容周已於10月22日正式拉開帷幕。在為期一週的時間裡,活動將邀請Consensys、Plasma、Celer、Nervos、閃電HSL一同探尋Layer 2的現狀與發展。在前天早上(2018.10.24 10:24)進行的第三場活動中,Celer Network創始人董沫博士為大家帶來了主題為《鏈下擴容核心技術解析》的技術公開課,主要講述廣義狀態通道的基礎知識,核心技術挑戰以及完整的技術和加密貨幣經濟學架構設計。
狀態通道(State Channel)是一種用於執行交易和其他狀態更新的“鏈下(off-chain)”技術。但是,一個狀態通道“內”發生的事務仍保持了很高的安全性和不可更改性。如果出現任何問題,我們仍然可以選擇回溯到鏈上交易中確定的“穩定核心”。
大家可能會對支付通道(payment channel)比較熟悉,這一概念已存在多年了,並且最近通過閃電網路(lightning network)部署在了比特幣上。狀態通道是支付通道泛化出來的形式,它們不僅可用於支付,還可用於在區塊鏈上進行任意的“狀態更新”,就像在智慧合約內部進行更改一樣。 2015 年,Jeff Coleman 第一次詳細介紹了狀態通道。
以分層架構建立了一套鏈下擴容體系, 提出了廣義狀態通道和側鏈靈活結合的cChannel, 在不犧牲信任與安全保障的情況下不僅加速簡單支付, 同時也支援智慧合約和各類複雜應用的加速擴容。Celer團隊同時提出了第一個最優化的鏈下支付和狀態路由演算法cRoute, 一個簡單易用的應用開發框架和使用者移動端介面cOS作為區塊鏈應用的新入口。擁有極強的普適性, 可以廣泛相容主流區塊鏈。在技術創新的同時, 獨家首創了第一個基於博弈論和拍賣理論的鏈下擴容加密貨幣經濟學和代幣模型, 系統和完整地提供了鏈下擴容平臺中的核心激勵和安全保障機制。
一、擴充套件性的最終目標到底是什麼?
對標visa
作者認為應該對標整個資訊傳輸的體量。從8到15TPS,進步到5.3億TPS,10毫秒的延時。
假設在網際網路上傳輸1000kb的data,區塊鏈上也會有相應的transaction的話,我們將會需要支援500M TPS。
二、為什麼要做鏈下擴容
目前的擴容架構在區塊鏈底層上架設了各種各樣的dapp。在這樣的擴容架構下,存在擴容瓶頸。這是來自於整個分散式系統的節點之間互相通訊的over head,與此同時即使使用像分片也無法解決。
因為對於任何一個並行系統,只要在並行系統當中有任何不可並行的部分,那麼並行系統本身的好處就會很快的去被消磨掉。
這個東西也就是著名的Amdahl’s Law。
我們通過鏈上擴容方法遇到的瓶頸和真正我們期望的500M tps離得還非常遠,我們這時候就需要使用鏈下擴容的方法實現區塊鏈擴容的轉折點,這樣也能夠使區塊鏈真正達到大規模應用,讓區塊鏈走進千家萬戶。
三、鏈下擴容的基本概念
最基本的鏈下擴容來自於支付通道。所謂支付通道簡單的來說是兩人之間要互相發很多次錢的時候,且不願意每一筆錢都放在區塊鏈上去發,便構造一個on-chain的合約(bond contract),然後他們各自往這個在智慧合約中放入各自的錢,通過balance proof證明各自擁有的賬戶餘額,就可以進行鏈下交易,contract本身也成為支付通道,這也是狀態通道最簡單的一個模型之一。
有了這樣的狀態通道之後,兩個人之間就可以互相很快的用這樣的方法去互相的發錢,他們之間傳遞的訊息也就是一個共同簽名的Balance Proof。只要我給你發一個Balance Proof,我就相當於給你發了錢,我並不需要向整個區塊鏈去廣播(broadcast)的整個發行過程。
狀態支付通道可以比較簡單地拓展為多人支付通道,中間人每兩個人之間的state channel都要存錢,當人多了以後,存的錢就很多,對支付者壓力很大。因為發錢的人傳送帶鎖的交易,傳送給中間人,如果有人能用鑰匙解開,就可以獲得這個錢。中間人無法解開這個交易,就把這個帶鎖的交易傳送給下一個人。到了接收錢的人手裡,出示鑰匙,請求中間人將交易解鎖,中間人將這個請求轉發給上一個人,直到轉發到傳送者手裡,傳送者解鎖交易,交易才順利完成。
如果有中間人不願意轉發交易,交易無法達到接受者,或者接收者的鑰匙無法到達傳送者,就可以將交易放到真實的鏈上執行,交易仍然可以完成,所以流程仍然是安全的。也就是說鏈下是可以執行帶條件的支付(you can do off-chain conditional payment),也就是兩端的人或中間人並不需要互信就能完成整個多跳的支付,這是對於狀態通道非常簡單的概述。
四、鏈下技術生態
技術生態的擴容要求:技術生態不光要做非常簡單的支付通道,還要做各種各樣的鏈下智慧合約,也就是擴容不光是要去擴支付的能力,更重要的是擴充狀態通道的能力。
cStack:cChannel -> cRoute -> cOS
1、cChannel:
鏈下支付和鏈下智慧合約,state channel、side chain聯合架構,可以接入多個公鏈,為多個公鏈進行擴容。cChannel層實現了對於各種各樣的DAPP的廣義鏈下擴容,不光是簡單的支付擴容,同時訊息的overhead是非常低的。
我們不妨用這樣一個例子來對比一個鏈上的智慧合約執行過程和一個鏈下的智慧合約執行過程,來對比一下,到底為什麼鏈下的廣義狀態通道能夠達到這樣的擴容能力。
以象棋為例:
- On-chain情況下:
Alice和 Bob玩一盤$5Chess Duel,首先他們要在鏈上部署一個智慧合約,然後各自放$5進去,因為他們要實現誰輸了就給對方5的邏輯,然後在On-chain玩這個遊戲,那麼Bob動一個子,然後Alice動一個子,Bob動一個子。每次挪一個棋子的過程,實際上都是一個on-chain transaction或者說都是區塊鏈函式呼叫。
這部分大家知道實際上是非常緩慢的,因為每一步的一個函式呼叫,實際上都是通過Bob和Alice之間的這樣一個區塊鏈智慧合約呼叫來進行的。那麼每一個智慧合約呼叫的時間可能一兩分鐘三五分鐘都是有可能的。那麼最後整個chess game在非常長的時間之後終於進行完了。假設說Alice贏了十塊錢,這兩位都已經變成了白髮蒼蒼的老人,Alice從智慧合約中取出了十塊錢,五塊錢是她自己放去的,另外五塊錢是Bob當時在一開始的時候放進去。
- off-chain情況下:
和Bob只有最開始的時候的象棋合約的建立是在鏈上進行的,其他的時候都是在celernetwork的鏈下虛擬機器進行下棋。下棋的過程中不收取手續費,響應非常快,網際網路產品的體驗。
如果棋手作弊,則需要通過鏈上的智慧合約進行仲裁,對作弊者進行懲罰。
比賽結束,鏈下合約的條件支付自動改成無條件支付。新增賭資,合約可以根據象棋的結局決定誰能贏得比賽,獲取全部的賭資。
在cChannel鏈下智慧合約中,首先第一步假設我們在簡單的版本當中,我們把chess的合約部署在鏈上的,那麼相當於在鏈上有了chess怎麼玩的規定,接下來Alice發給了Bob5塊錢,Bob也發給了Alice5塊錢,但這兩個五塊錢的傳送不是像剛才on-chain完成的,而是在celer Network的cChannel的架構當中通過Celer Network的多跳relay給對方發錢。第二點需要注意的是整個發錢是有條件依賴性(conditional payment),每兩個人之間的state channel都要存錢,當人多了以後,存的錢就很多,對支付者壓力很大。
在這個過程之後,Alice、Bob再去玩這盤棋就可以通過互相簽名來進行遊戲,下棋的過程都是通過智慧合約鏈下執行進行。在cChannel實際實現當中,可以進一步優化使整個玩棋的合約甚至都不需要出現在區塊鏈上。只要在一開始發錢的時候兩人同意玩棋的程式程式碼初值和共同同意的隨機數,那麼智慧合約甚至都不需要出現在區塊鏈上,就是跟網際網路一樣的感覺。鏈下執行智慧合約是需要符合一定規範和介面的,我們也定義了一套介面來規範這樣的一個鏈下智慧合約的執行。
這是最完整的描述我們是如何定義一個狀態通道的圖,如何定義一個條件組,如何定義條件主動的條件,以及各個函式呼叫之間的關係來實現廣義狀態通道的能力。有了條件依賴能力,就可以實現非常複雜的條件依賴的狀態圖,那麼我們通過這樣的狀態圖,也就能夠實現各種各樣複雜的區塊鏈應用。
同時cChannel支援非常多功能,我們支援multi-hop payment。比如剛才Alice和Bob的遊戲,我們就可以通過Alice和Mo, Mo和Bob兩套channel也可以完成狀態支付以及狀態的互動和轉換。
2、cRoute:可證明最優的狀態路由
技術棧中的第二層叫cRoute,cRoute是整個狀態通道中的效能引擎,鏈下擴容的基礎架構中,鏈下擴容的的容量和運轉速度完全取決於狀態路由演算法。
為什麼狀態通道路由是非常有挑戰性的事情?因為狀態通道網路中的鏈路和傳統資料中的資料網路中的鏈路是非常不一樣的模型。在狀態通道網路中,我們面臨一個有狀態的鏈路模型,比如說兩個人之間開了一個狀態通道,我放了10元進去,你放了10元進去,我給你發了1元,我最多還能再給你發9元。那麼整個狀態通道的capacity決定於我們過去互相之間發錢的過程,這樣的鏈路模型實際上使網路的路由也就是從A到B的過程變得非常複雜,也就不能使用簡單傳統的狀態通道路由的方法來去做。資料網路路由就是這樣一個最短路徑路由,資料資料網路的路由最短路徑在狀態通道網路當中的效能實際上是非常低的,這時候面臨一個全新的問題。
狀態通道路由演算法不光考慮路徑本身的長短,同時也需要考慮整個網路的平衡性。我們往這條鏈路去繼續傳送的時候,會不會導致整個網路越來越不平衡,如果整個網路不斷失衡的話,那麼我們就應該去換一條路來發,或者幫助網路恢復平衡性。在cRoute層實際上用3層來保證perfomance的同時又能完全隱私化而分散式的狀態路由通道。可證明最優的狀態通道路由的實現方法,比以前的狀態路由演算法,比如雷電網路或者閃電網路效能提高大概到20到25倍。
3、cOS:開發者SDK,celer全節點,入口層
的第三層的技術棧也就是cOS,提供了使用者的runtime以及deep SDK,將已有鏈上應用放到鏈下執行。 cOS的套件也提供了使用者與celer Network互動的能力,幫使用者隱藏與celer Network互動過程當中所涉及到以及所需要處理的細節。
五、經濟學架構
Layer2的經濟學是一個非常重要的問題。這在整個業界研究非常缺乏。鏈下擴容很好,它能夠實現展平擴容的模式,同時也有隱私、安全的好處,但天下是沒有免費的午餐,那麼狀態通道擴容或者是鏈下擴容到底去犧牲了什麼?還有哪些重要的經濟學挑戰?
1、第一個經濟學挑戰叫做狀態可用性挑戰(state availability challenge)。
假設兩人之間有一個狀態通道,最新狀態是49,假設Bob掉線了,Alice可能變成壞人,向整個區塊鏈或者是整個狀態通道的合約提交舊的共同簽名狀態(比如說序號47),但在序號47的狀態中的state對Alice本身是更有利的。
當Bob不線上的時候,Alice可能向整個狀態通道網路去settle一箇舊的、但對她更好的state,這個問題怎麼解決?有人提出monitoring solution 幫看狀態,中心化的monitoring solution顯然是一個壞主意,因為中性化的monitoring solution和Alice可以非常簡單的合謀分你的利益。通過這樣的方法不光不能保證自己的安全,還可能白白的花錢。
在最新的research潮流中,大家說有沒有可能構建一種去信任的monitor service?去信任的monitor service大概怎麼工作?可能其實是這樣的,比如說我要掉線了,那麼我就把我的狀態交給一個狀態的看管者(monitor),同時monitor也會向另一個智慧合約放一定的保證金,如果他到時候沒幫我幹活的話,我待會上線發現沒幹活,我可以把他這部分保證金拿走。
那麼這時候假設Alice再去提交一箇舊的狀態(47號狀態),那麼monitor就可以幫你向智慧合約提交最新狀態proof。假設說monitor也是壞人,他就拒不提交狀態proof。
挑戰:但是這樣的解決方案實際上也有非常多問題,首先會將網路流動性的需求增倍。本來整個狀態通道網路中要降低一些流動性,才能夠使得整個service run起來。但現在你、你的peer和monitor都要付押金。與此同時守衛的狀態可能是不同的token,對應不同token都要提供不同的介面,並有不同的流動性去鎖定,但無法確定守衛的狀態。因此無法確認守衛的過程中應該給多少錢(pricing),同時整個interaction非常複雜,不斷需要守衛一個狀態的on-chain transaction實際上是一個非常慢的過程。 同時insurance model非常僵硬,只要這個x不是百分之百的話,那麼幫你看管狀態的 monitor還是可能去和壞人合謀你的錢。
狀態守衛者網路(SGN):狀態守衛者網路是一個特殊的側鏈,你需要有celer token才能進入側鏈變成一個狀態守衛者。當用戶離線,或者向IOT device去check pointing的時候,那麼他就會把自己的狀態連同payment提交給state guardian network(SGN)。有多少狀態守衛者實際上是基於支付給整個狀態守護者網路的錢相比於整個狀態守護者網路正在收到錢的比率。假設celer state越多,guarding任務也就越多,收費越多,這裡面實際上實現了激勵模式:通過token的設計,使得用的人越多,整個celer Network或是整個SGN的收入也就越高,這實現了一個真正動態和高效的pricing機制。同時SGN架構使得liquility的要求變得非常的低,同時狀態也可以是支付、遊戲等各種中間狀態,只需提交相應的payment。
防合謀的機制:後守衛者dispute,可以獲得前面沒有report者的token以及所收到的payment。假設說我們幾個人之間雖然商量好了,但實際上最後一個人去report的動機也就越來越大,因為假設說你有前面有一百個人,那麼這一百人都沒有report的話,你可能就會得到很多的額外的token。
那麼假設所有的SGN都是惡意的怎麼辦?這個情況也是有可能發生的。在這樣的最壞情況當中,使用者就可以向區塊鏈提交他所有的state guardian都沒有完成應該完成的任務的state proof,SGN的測量合約會將沒有按約定完成任務的state guardian node的token罰沒,並且將他們踢出SGN側鏈,與此同時罰沒的token將會作為對使用者的補償發還給使用者。
保險機制:這實現了非常靈活的保險機制,那麼我們不再是說我花一定的錢,我就是得到最大的X% insurance,使用者得到的補償是以token為計價的。在使用者開始決定用多少token在cover for him的時候,他實際上就是在靈活的決定,出現損失時他得到的token能夠用多快的速度恢復他所丟失的財產。實現了一種完全新的insurance model,也就另外一點非常重要的經濟學性質。
2、另外一個鏈下擴容經濟學的挑戰是connectivity challenge。
在整個鏈下的擴容體系當中,我們之間的整個鏈下狀態的推演是通過共同簽名一個新的狀態來完成的。假設兩個人在玩一局棋,A馬上要贏了,但B不想簽名,那麼出現這種情況怎麼辦?是不是說這時候只要A去向區塊鏈去提交新的state proof狀態我們就應該懲罰B呢?實際上並不是這樣的。因為區塊鏈並不能分辨如下這三種情形:第一種是B突然之間火了不幹了;另外一種是B明明好好的,A去區塊鏈上去誣告說B不理我;還有一種是A和B都沒有錯,只是中間網路出了一些問題。
最簡單的方法就是我們把整個區塊鏈作為data availability service,它非常available,但由於需要on-chain storage所以非常貴,另外需要O(log(n))N monitoring,因為每一個人都需要不斷地去monitor所有區塊,所以在解決data availability service時,我們就用SGN,可以使得整個終端的資源消耗變得非常少。
六、總結
在celer network當中,我們引入了state guardian network的側鏈,這個側鏈實際上可以幫助state channel有更高效的方法去執行。首先作為一個分散式的monitory service,提供了一套比較完整的不線上去challenge 這些解決方案,同時也提供了這樣一套data connectivity的解決方案,解決了傳統的approach當中有合謀、複雜的interface或liquility等等問題。
另外有另外兩個架構叫proof of liquility commitment mining和liquility backing auction,這兩部分實際上是去解決鏈下服務商的成本,或者是鏈下服務商的流動性的問題。因為鏈下服務商本身需要跟很多使用者去建立這樣的channel,那麼在建立channel的過程當中,它需要下很多的血本去把整個channel建立,那麼proof of liquility commitment mining是激勵使用者去鎖定自己的流動性,構造一個這樣的穩定liquility pool,同時使用者通過鎖定自己的流動性可以去獲得token,那麼獲得token的比例實際上是跟它的鎖定數量和鎖定時間是相應的成正比的。在整個網路有了一個穩定和充裕的流動性之後,我們使用流動性拍賣的機制去激勵使用者。
回看GeekHub layer2擴容周-巴位元加速器技術公開課,可以進入擴容系列課學習,課程連結:加入Geekhub Online社群微信群,連結及總結文章均釋出在社群中。
加入Geekhub Online社群方式
關注【巴位元加速器8BTCBoost】微信公眾號,聊天框中回覆【GGO】獲取【Geekhub Online】社群加入方式。
或微信掃二維碼進入課程中:
1、公開課:
演講者:Coogan Brennan(Consensys,Ethereum Foundation)
2、AMA:
演講者:John Adler(Consensys Plasma Researcher)
3、公開課:
演講者:董沫(Celer Network創始人)
4、公開課:
演講者:呂國寧(Nervos基金會聯合創始人)
5、Panel:
演講者:Celer Network創始人董沫、Nervos基金會聯合創始人呂國寧、閃電黃世亮、巴位元加速器聯合創始人胡夢迪