上期《衆說區塊鏈》討論的主題是「中美貿易談判後雙方共同聲明對智能合約應用的影響」,圍繞這個主題Sasha和你們一塊兒分享了一些見解和看法。算法
本期《衆說區塊鏈》討論的主題是「區塊鏈中的側鏈技術」,圍繞這個主題,楊鎮老師帶領你們展開討論,爲各位有關側鏈的問題進行了一一解答。數據庫
主題:區塊鏈中的側鏈技術安全
時間:6月30日(週六)晚9點-10點微信
主持人:佩瑤網絡
特約嘉賓:楊鎮多線程
**參考資料:**https://www.jianshu.com/p/d049845a8ac9 架構
討論實錄框架
@顏顏:你們好,本週六,HiBlock區塊鏈社區特別欄目《衆說區塊鏈》準時和你們見面啦,我是主持人佩瑤,很是感謝你們對社區的支持。ide
《衆說區塊鏈》由HiBlock區塊鏈社區發起,每週六晚9點,在社羣內組織一個區塊鏈相關主題的討論,在討論過程當中加深社區成員對區塊鏈的理解。性能
【衆說區塊鏈】欄目開展至今已經60天了,本着「輸出即學習」的理念,這次衆說以問答形式爲主,本期特約嘉賓楊鎮老師將針對你們提的問題進行詳解,固然,若是您時間上有衝突,您能夠提早把問題發給我,到時我會在羣裏以「@+您的微信名+問題」的方式提出來,您能夠在羣裏直接看到反饋,或者關注咱們的微信公衆號,羣裏討論的內容咱們會以文字的形式輸出發佈。
本期《衆說區塊鏈》的主題是「區塊鏈中的側鏈技術」。
接下來歡迎本期特約嘉賓 楊鎮老師,帶領你們一塊兒聊聊側鏈技術~~~
@楊鎮: 你們好,很高興又來跟你們聊天了……做爲開場,我想先問你們一個問題:如何評估區塊鏈的「性能」?或者是你們認爲比較成熟的公鏈,好比比特幣和以太坊在技術上面臨的最大的問題是什麼?你們能夠隨意聊,咱們這個活動的目的就是活躍氣氛,增長溝通,互相學習
@胡建:確認交易慢
@楊鎮:是的,還其餘的嗎
@James: 我我的以爲最大的問題是如何吸引更多的開發者,更多的開發者就會有更多的應用,更多的應用會吸引更多的用戶意味着更多的資源會匯聚過來,而後就能夠解決所謂的性能問題。
@楊鎮:哈哈,我問的仍是但願能從技術的角度聊聊,畢竟是個技術話題
@James:技術哈,工做量證實就是個最大的問題
@楊鎮:這個其實我不敢苟同,這個問題比較複雜
@海陽之新:成本高
@楊鎮:具體指什麼?交易費麼?
@海陽之新:是的
@楊鎮:嗯嗯,其餘朋友尚未沒有別的見解?
@王剛:我以爲是節點的性能,通常的節點很難支撐有實際價值的應用落地
@普羅米修斯:以爲是最終經過共識後真正寫上鍊的數據量吧
@王剛:是的,數據量大的應用都難以支撐
@龔濤:區塊鏈最主要的做用就是記帳,因此性能的評價我認爲就是一筆交易從開始到最終確認所須要的時間
@海陽之新:區塊數據愈來愈大,同步起來難
@Ray:Tps
@冉謹華:Tps是一個指標
@龔濤:在一個就是剛纔普羅米修斯提到的,寫上去的數據量,我理解的就是每筆交易能夠寫入的數據量
@楊鎮:對的,這個專業,哈哈哈
@楊鎮:我我的認爲,對於目前基於區塊鏈架構的公鏈平臺的所謂「性能」的評估,應該考慮兩個方面。
@楊鎮:被討論最多的就是所謂的 TPS(Transactions Per Second),這個維度衡量的是區塊鏈在單位時間內所能處理的交易數量;咱們近幾年最常提到的所謂「擴容」指的就是這個維度。
@楊鎮:若是把以太坊比作「世界計算機」,那麼目前,它只能用單核(單線程)來進行計算(同一時間只能有一個礦工來記帳,或者說只有一個礦工記的帳會被接受);而所謂「擴容」能夠想象爲把這個「世界計算機」擴展爲多核(多線程),使它在單位時間內能夠同時運行多個任務(同時有多個礦工在記帳,他們記的帳均可以被接受),最終反映爲 TPS 的提升。這也就是所謂的 Layer1 擴容。在以太坊裏,指的就是如今已經合二爲一的 Casper + Sharding
@楊鎮:可是在實際應用中還有一個衡量性能的維度是不能忽視的,那就是「平均處理時間」。基於剛剛的比喻,在以太坊中,這個維度就至關於這臺「世界計算機」的單核(單線程)處理能力。
@楊鎮:你們對我說的第二個維度有什麼認識麼?或者有沒有據說個這個提法?
@龔濤:平均處理時間是指記帳到確認的平均處理時間?
@角落:出塊速度
@海陽之新:Casper這個技術已經應用起來了麼,在以太坊中
@楊鎮:V神說明年上線
@海陽之新:嗯嗯,但願快一點,如今但願以太坊要蓋過eos,eos很變態
@楊鎮:哈哈哈,那我繼續說了
@楊鎮:咱們假設某個基於以太坊智能合約的業務流程須要 5 個步驟(交易)才能完成,也就是說,我大概有個智能合約,這個合約會有 6 個狀態:初始狀態,狀態1,...,狀態4,最終狀態。那麼要完成整個流程,就至少須要 5 個區塊時間(從初始狀態變爲狀態 1,須要交易 1 來完成,以次類推,則至少須要 5 個交易才能把狀態變爲最終狀態)。
@楊鎮:很顯然,在這個例子裏,區塊鏈性能的瓶頸就變成了「區塊時間」。(這是由於智能合約本質上就是一個可定製的狀態機,若是它有 6 個單向變化的狀態,那麼必須通過 5 次變化才能達到最終狀態,因此 5 個交易是必須的。)而區塊時間是由公鏈協議所規定的,好比在比特幣裏是 10 分鐘,在以太坊裏如今大概是 16 秒,這是沒法簡單縮減的;整個流程的 5 個區塊時間是最樂觀的估計,也就是性能上限。那麼咱們如何縮短這個流程的執行時間、下降「平均處理時間」呢?
@楊鎮:這就是所謂的區塊鏈 Layer2 擴展要解決的問題。而答案就是—— off-chain(這個詞的譯法大概尚未共識,我這裏姑且譯爲「脫鏈」,也就是不在主鏈上處理的意思)。
@龔濤:只是按照出塊速度,我以爲有侷限
@海陽之新:有點支付通道的意思
@楊鎮:嗯,這個具體的維度也許並不確切,我只是爲了引出後邊的介紹,哈哈,看看對這個例子你們有沒有什麼想法?
@角落:EOS 0.5秒出塊
@楊鎮:嗯,EOS這個咱先不討論,咱們以比特幣或者以太坊爲例,EOS的算法是不同的,並且實際上也未必能達到他們吹的這個性能
@冉謹華:還請老師講解如何縮短這個時間
@SoWhat:區塊大小,參與共識的節點數量都有影響吧
@楊鎮:其實這個例子的問題,就是區塊鏈的所謂 Layer2 擴展要解決的問題。而答案就是—— off-chain(這個詞的譯法大概尚未共識,我這裏姑且譯爲「脫鏈」,也就是不在主鏈上處理的意思)。EOS的事咱們最後有時間再討論哈
@王剛:其實比起記帳,我更關心,做爲革命性的技術,區塊鏈想替代中心化的應用,它在性能上的問題。若是不解決這個問題,區塊鏈的實際價值很難體現,最終只能用來炒幣。好比咱們要實現一個基於區塊鏈的視頻分享網站,如何讓節點可以支撐相應服務?
@楊鎮:這種 off-chain 解決方案的思路是:咱們能夠把計算、交易等業務處理拿到主鏈以外來執行,只在主鏈上反映最終的結果,中間過程不在主鏈作記錄。
@楊鎮:@王剛 區塊鏈並不適合解決你說的這個問題,區塊鏈並非是個通吃業務場景的技術
@楊鎮:這樣,在上邊例子裏,咱們要在主鏈上保存的狀態就是初始狀態和最終狀態,中間過程的 4 個狀態變更咱們能夠不關心,那對應的 4 個交易就能夠拿到「鏈外」去執行;由於 off-chain 方案一般處理性能會很是高(後文中我會具體解釋技術方案的原理),頗有可能在主鏈的一個區塊時間內就處理完這 4 個交易,並將結果發送回主鏈(即達到最終狀態);因而從結果來看,整個處理過程只通過了一個區塊時間(也就是最終狀態的確認交易)就完成了。
@楊鎮:很明顯,若是採用這樣的方案,越複雜的流程獲得的性能提高越大;好比一些有高交互性能需求的應用——遊戲。另外對於支付的場景,由於相對高昂的交易手續費,那些高頻的小額交易從經濟上講也顯然成本太高。因此不管是支付仍是合約的應用場景中,都有對 Layer2 擴展的強烈需求。
@楊鎮:你們對這些內容有沒有什麼問題?
@海陽之新:這個觀點跟如今幣乎的模式有點像
@楊鎮:幣乎的什麼模式?
@海陽之新:中心化數據庫+區塊鏈數據庫
@楊鎮:哦哦,我這裏說的仍是公鏈的狀況,不存在中心化數據庫的問題
@海陽之新:一些頻繁交易在中心化數據庫操做,把最終結果同步到區塊鏈上
@楊鎮:嗯嗯,有些類似,這裏邊的區別咱們最後會提到
@Sasha:閃電網絡就是這麼幹的,計算、交易等業務處理拿到主鏈以外來執行,只在主鏈上反映最終的結果,中間過程不在主鏈作記錄。
@角落:增長性能就是下降出塊時間,增長tps,使用pos共識
@楊鎮:是的,我下面就會介紹具體的方案
@冉謹華:側鏈和跨鏈有什麼區別呢
@楊鎮:前邊這些只是爲了引出後邊的內容,@冉謹華 跨鏈是單獨的topic,今天咱們不涉及,側鏈,待會兒會說到
@楊鎮:Off-chain 方案的整體思路是相似的:首先須要把主鏈上的部分「狀態」拿到鏈外來,能夠本地存儲(基於某種客戶端)或者臨時存儲;而後在鏈外作具體的操做,好比轉帳或者其餘會影響「狀態」的處理;當處理完成或者到達須要同步「狀態」的時間點時,再把最終狀態傳回主鏈保存。
@楊鎮:目前已經成體系的 off-chain 技術方案大概能夠分爲兩大類:狀態通道(State Channel):以比特幣的 Lightning Network [1] 和以太坊的 Raiden Network [2] 爲表明,側鏈(Side-Chain):以以太坊的 Plasma [3] 協議爲表明
@楊鎮:有沒有朋友瞭解狀態通道?
@海陽之新:狀態通道就是支付通道吧
@楊鎮:是的,相似的概念,狀態通道是一個臨時的點對點(交易的兩個參與者間)價值轉移通道:在開啓時,一般會在主鏈上分別鎖定必定的餘額,並設定一個有效時間,並能夠由任意參與方主動關閉,也就是參與方之間會基於特定的技術協議進行數據交互、價值轉移(數字資產轉移);而後當能夠接入網絡、到達某個約定的時間點或者某方主動向主鏈同步數據時,會將最終結果提交到主鏈。
@楊鎮:狀態通道主要解決的是前邊提到的高頻、小額支付這樣的場景中手續費太高的問題,但它的侷限也很明顯:
首先,它是一個臨時的通路,數據並非永久存儲的,而是由參與雙方本身本地保存;若是某個參與者使用的設備出現故障,損失基本上沒法避免(雖然絕對的經濟損失大概並不會過高)。
其次,一個狀態通道僅能支持兩個用戶之間的價值轉移;當系統中同時存在大量用戶間的狀態通道時,實際上就構成一個通道網絡:網絡中的兩個用戶有交易需求的時候,並非簡單地在他們兩點間建立新的通道,而是經過特定的路由(routing)算法來查找是否有可用路徑,然後再決定如何建立他們之間的數據通道;但這自己也增長了實現的難度和相應的技術風險。你們讀一下,看看有沒有什麼問題
@張後富:爲何不在兩個之間新建通道而要路由呢
@楊鎮:主要是資源問題,狀態通道通常能夠理解爲很輕的客戶端,好比手機,若是你要在一個時間段裏和不少人交易,那麼全創建通道的話,資源消耗就很高,至關於浪費了貸款和數據鏈接,帶寬
@張後富:明白了
@海陽之新:瞭解,以前看過這個概念
@楊鎮:關於這裏邊提到的路由,我稍微解釋一下
@楊鎮:上圖是一個狀態通道網絡示意圖。咱們能夠看到,若是 A 要向 C 進行轉帳,能夠經過 A -> B -> C 的路徑完成的(經過 A -> B -> E -> D -> C 的路徑也能夠完成,但這一般會須要更多的網絡傳輸,因此並非首選);而若是 D 要向 F 轉帳,則能夠經過 D -> E -> B -> A -> F 或 D -> C -> B -> A -> F 的路徑完成。因此理論上說,若是某個節點與狀態通道網絡中的任意一個節點之間有通道,那麼就不須要再建立新的通道,而能夠經過路由算法找到對應的路徑完成價值轉移。
@楊鎮:這裏能夠看到,並非全部節點間都有相互的直接通道,固然,狀態通道自己就是用來處理小額支付場景的,因此這些侷限是能夠接受的;即便出現不可恢復的故障,實際經濟損失也不會過大。但這種技術自己顯然限制了擴展的通用性和數據容量。因此,能夠進行永久存儲、能夠容納更多交易、能夠擁有獨立的地址空間的所謂「側鏈(side-chain)」方案就應運而生了。
@海陽之新:嗯嗯
@楊鎮:側鏈能夠認爲是主鏈的分支,是能夠獨立記帳、獨立增加的子區塊鏈,因此其中一樣會有記帳人(礦工)、有永久存儲機制和共識算法(由於參與側鏈記帳的一般會是實現了側鏈協議的多個節點)。
@海陽之新:請問這個要gas嗎
@楊鎮:這跟gas不要緊,這是協議級的擴展,gas是智能合約執行的消耗
@海陽之新:可是仍是要記帳吧
@楊鎮:側鏈就是一個子區塊鏈,你能夠認爲和主鏈差很少,其實就是一個獨立的鏈,掛在了主鏈上
@海陽之新:能夠理解成企業私鏈+公鏈嗎,就是企業開一個私鏈,小數據就在私鏈上跑,最終結果同步到公鏈上去,這個私鏈也能夠是聯盟鏈,我瞎想的
@楊鎮:不是這樣的,今天聊的都是公鏈的技術,企業級區塊鏈是另外一個topic
@龔濤:感受增長了交易複雜度,部署點對點的直接交易,不是點對點的直接交易
@楊鎮:嗯,上邊只是個示意圖,實際的算法會有優化,若是路徑過長,也可能直接建立通道
@張後富:這個至關於作了一個0確認的交易能夠秒到帳
@楊鎮:是的,就是這個意思
@SaSha: 1.閃電網絡中對若是某方設備出現故障,只要密鑰沒丟,損失是能夠避免的。
@楊鎮:嗯,前提是存儲也沒壞,我說的是可能性, 哈哈
@SaSha: 假如存儲壞了,密鑰本身寫在紙上也能夠避免損失吧?
@楊鎮:據我所知不行,由於你的本地數據只有你和交易對方有,其餘地方沒有備份,用私鑰是找不回來的, 不過客觀講我沒有仔細研究過狀態通道的客戶端,智能說不肯定了,哈哈, 那我繼續說側鏈了
@楊鎮:下面我將基於以太坊的 Plasma 協議的思路來簡單介紹側鏈的實現方案。
對於側鏈來說,咱們能夠把它與主鏈的交互抽象爲若干的「狀態遷移(State Transition)」:在側鏈產生時,須要把若干「狀態」轉移到側鏈的「創世區塊」中,做爲側鏈的「初始狀態」;在側鏈本身演進的過程當中,須要按期把側鏈的狀態變更在主鏈進行記錄,以便在發生爭議或者有用戶想「退出」側鏈時能夠恢復相應的狀態。
@楊鎮:從應用角度看,側鏈要解決的主要技術問題就是用戶如何「進入」側鏈以及如何「退出」側鏈。
因爲側鏈自己就是個區塊鏈,因此側鏈也能夠擁有本身的地址空間;當主鏈用戶「進入」側鏈時就能夠經過簡單的「地址映射」,將主鏈用戶的「狀態」——好比帳戶餘額或者持有的數字資產(ERC20 或者 ERC721 Token)——所有或者部分轉移到側鏈地址上。
@楊鎮:複雜的,固然是「退出」機制。
當一個用戶 A 想從側鏈「退出」的時候,他應該要提出一個申請,將本身在側鏈中的「狀態」變更映射回主鏈。但由於用戶在側鏈中的狀態變更必然是由於與其餘用戶進行了交互(交易)纔會發生的,因此這也將會影響其餘用戶的「狀態」。於是,這須要一個爭議期,在這個期間內,若是側鏈的其餘用戶對用戶 A 的退出狀態有異議,他們能夠發起一個「爭議(dispute)「,提交他們本身所留存的「狀態」數據,並提交「技術證實」(或者請求側鏈上的無利益衝突的第三方證實人提供「技術證實」,好比某個礦工或全節點提供的數據狀態證實);主鏈上的所謂「仲裁合約」就能夠根據「技術證實」來自動化地判斷誰的狀態變更纔是「合法」的,從而進行最終在主鏈上的狀態更改。
這塊稍微有些難度,你們讀一讀看看有沒有什麼問題,你們沒有什麼問題哈?
@海陽之心 :仲裁徹底由合約來執行麼
@楊鎮:仲裁過程就是自動的,整個是由合約完成的,不然就不是協議了,哈哈
@楊鎮:這裏邊有不少技術點,時間關係無法展開了
@胡建:其餘用戶怎麼判斷有衝突?
@楊鎮:其餘用戶看本身的狀態就知道對方是否是做弊了,若是對方提交的結果和我這裏看到的一致,那就不會有dispute了,這種仲裁機制就是要解決雙方對最終狀態有異議的狀況
@楊鎮:那我繼續了哈,由於側鏈自己是一個有永久性存儲的子區塊鏈,裏邊一樣須要礦工來記帳,因此與普通公鏈相似的經濟激勵機制、共識算法以及數據存儲結構設計就都是必然要考慮的東西。在側鏈中,一般爲了達到更高的處理性能,會採用 PoS、DPoS 或者其餘改進算法,而不會採用 PoW 算法。同時還會在側鏈本身的經濟模型中考慮對有欺詐行爲的礦工的懲罰機制。
一般在側鏈開啓的時候,會要求側鏈中的礦工質押一些資金,就好像casper合約裏的那種質押以太幣的方式,以便執行後續的懲罰機制
@楊鎮:此外,由於側鏈自己也是一個區塊鏈,因此在側鏈之上再建立側鏈,理論上也是可行的。這就至關於提供了一種多層的、幾乎無限的擴展方案。
看起來這是種「完美」的方案;但事實上並無「完美」的方案,Plasma 中也還有不少須要解決的問題。但時間關係,就不細說了,最後一個問題,你們以爲側鏈上能夠作智能合約麼?
@rico:應該能夠
@楊鎮:嗯嗯,是的,那側鏈上實現智能合約的難點在哪裏?
@rico:協議兼容
@Ray:Rootstock
@楊鎮:概念上是這個意思,哈哈
@Ray:和btc合併挖礦的
@楊鎮:這個項目我還真沒看過,暫不評論,那我繼續了
@楊鎮:在 Plasma 中,爲了簡化「狀態轉換」的驗證,側鏈的數據模型使用了 UTXO 模型,而對帳戶餘額變更的驗證則很天然地採用了所謂的「Merklized Proof」。但這樣的設計也對側鏈上的智能合約執行框架提出了挑戰。
咱們知道,智能合約本質上是一個「狀態機」,因此,必須有永久性的存儲來保存其狀態數據,也就是相似於以太坊中的「存儲樹(Storage Trie)」這樣的設計。因此若是在側鏈上運行智能合約,也就一樣須要某種用來保存合約狀態的機制。
以太坊當初選擇帳戶模型而不是 UTXO 模型的主要緣由就是實現狀態機的難度問題;顯然,基於帳戶模型的狀態機更容易實現,範式也更清晰。因此如何在基於 UTXO 模型的側鏈上實現智能合約運行環境就有了不少能夠研究和討論的東西。咱們能夠基於 UTXO 模型構建狀態驗證機制,問題是這個帳戶狀態(餘額)變更若是不是經過交易直接產生的,而是經過合約代碼產生的,那麼如何證實這個改動是「合法」的就成了側鏈在與主鏈間進行狀態轉移時的驗證機制的關鍵。
@楊鎮:這裏我只拋出問題哈,具體的解答還有待研究,目前也沒有真正成熟的項目能作到,好了,以上就是對今天這個話題我想給你們分享的內容。看看你們還有沒有什麼問題?
@Ray:Omisgo不是作支付的嗎?爲何沒有用第一種,而是用了plasma
@楊鎮:你說的這個項目我沒有研究過,很差回答。但Plasma實際上是個通用的 off-chain 方案
@Ray:Rootstock應該也算side chain的一個典型表明了
@楊鎮:我會抽時間研究下,謝謝
@Ray:老師說的l2層方案,感受有點像permissioned blockchain
@楊鎮:我說的只是概念,具體的細節須要去看plasma的協議文檔,不少項目的high-level思路都是相似的,RSK貌似是基於Bitcoin的擴展,我一直在研究以太坊的相關生態Bitcoin自己的腳本機制功能性還不太強
@Ray:Rsk是兼容evm的,號稱是btc的安全加ethereum的合約
@楊鎮:我看下白皮書
@楊鎮:我爲了今天的分享寫了篇博客,已經發出來了,你們有興趣也能夠再看下。
https://www.jianshu.com/p/d049845a8ac9
RSK的白皮書裏貌似沒有提EVM的事,可能由於它的白皮書比較早了
@顏顏:很是感謝楊鎮老師分享和各位的參加
衆說一路走來,離不開你們的支持,你們對咱們的活動有什麼建議或者想分享一些乾貨給羣裏的各位,歡迎您私聊我,但願衆說在咱們共同的努力下辦的愈來愈好,各位有所收益/筆芯/筆芯/筆芯
下週六晚9點,《衆說區塊鏈》不見不散~~~
(注:《衆說區塊鏈》是一個羣討論的欄目,每期圍繞一個現象或技術進行討論,不作投資建議。)
本文內容來源於:HiBlock區塊鏈社區微信羣討論
【衆說區塊鏈】是HiBlock區塊鏈社區組織的微信羣討論活動,每週六晚9點準時開始,圍繞一個主題進行討論,有興趣的小夥伴加小助手:baobaotalk_com入羣吧~
如下是咱們的社區介紹,歡迎各類合做、交流、學習:)