EKT多鏈技術丨閃電網絡、多鏈、分片、DAG——區塊鏈的橫向擴展

 

      大家好,我是周迅,今天我來給大家分享一些區塊鏈提速方面的內容。

 

      前言:認真來說,傳統的BFT共識機制是一種效率不高的算法,由於每筆交易都要通過所有節點驗證,驗證結果需要被廣播到網絡,換句話說,一筆交易要先被廣播到網絡一次,然後每個節點都要再廣播一次,這就導致了一筆交易有O(N^2)的消息複雜度。計算機背景的同學都知道,O(N^2)是一個很低效的 方案,直接導致BFT在大於1000個節點之後同步能力明顯下降。對於比特幣的POW,因爲任何礦工節點發現符合當前難度的塊之後,把交易打包進塊裏,向全網(N)廣播,然後網絡上的所有的全節點驗證這個交易的哈希,即可證僞,所以實際上是一種一對多且不需要回復的共識機制,也即O(N)的複雜度。目前共識算法研究的前沿是如何實現O(1)算法,叫做橫向擴展(scale-out),也即一筆交易不廣播到全網,或者說,有的交易有的節點並不知道,這樣就可以解決區塊鏈的可擴展性問題。目前出現在大家視野裏的O(1)共識算法有off-chain(鏈下通道),sharding(分片),DAG(有向無環圖),multi-chain(多鏈)等等,每種算法都有其特點和長處,本文將解讀這類橫向擴展的解決方案。

 

     【鏈下通道】

 

      off-chain這個概念來自比特幣社區,2013 年 12 月提出,後來形成了我們熟悉的鏈下鏈的一套體系,也即側鏈。off-chain的誕生是由於比特幣本身或者某一區塊鏈本身的機制存在一些問題。但是直接在比特協議或者比特幣鏈條上進行修改的話,又容易出錯。而且比特幣區塊在一直不斷運行,萬一出錯了涉及的資金量太大了。這個是不被允許的。這種情況下,誕生了側鏈。本質上來說,側鏈機制,就是一種使貨幣在兩條區塊鏈間移動的機制,它允許資產在比特幣區塊鏈和其它鏈之間互轉。降低核心的區塊鏈上發生交易的次數。側鏈實質上不是特指某個區塊鏈,而是指遵守側鏈協議的所有區塊鏈,該名詞是相對與比特幣(或某宿主鏈)主鏈來說的。

      針對比特幣的側鏈項目名叫閃電網絡,它的運行機制也比較簡單:你是A,要給B發起一筆交易。首先你要創建一個On-Chain交易,在這個交易中,你需要開通了一個A和B之間的支付通道(State channel),而且,你必須要做相應的抵押。比如,A打算給B轉100BTC,那麼A必須要先抵押最少100BTC,然後纔可以轉100BTC給B。A抵押後,就可以開始給B轉賬了。A可以隨心所欲的今天給B發1BTC,明天再給B發2BTC,都不打緊的,反正是Off-Chain交易,沒有交易費。閃電網絡在於給A和B之間提供這種支付通道,即Off-Chain(鏈外)交易通道。

      那麼,如果A或B想把BTC餘額提出來,並停止和對方的轉賬交易,怎麼辦?此時就需要關閉A和B之間的支付通道,並利用閃電網絡的一系列協議進行清算了。

      假設此前A抵押了100BTC,其中總共給B轉了10BTC,那麼A的餘額爲90BTC,B的餘額爲10BTC。在此過程中,A是無法篡改交易記錄的,所以最後A可以轉出的數額爲90BTC,B可以轉出的數額爲10BTC。

      簡單總結一下閃電網絡的工作方式:

 

      a. 建立支付通道;

      b. 需要抵押。

 

      建立支付通道,就是普通的鏈上交易,和正常的鏈上轉賬交易一樣;抵押則需要兩者之間的最終清算金額少於抵押金額,否則,一方完全可以關閉支付通道後跑路。嗯,大體看上去是沒問題的,反正不虧就好。

      所以閃電網絡的適用情況

 

      a. 資金頻繁往來;

      b. 雙方之間的交易金額小於抵押金額。

 

      例如大交易所之間使用閃電網絡就特別合適,資金你來我往的,速度快先不說,光交易費就可以省出一大筆。如果是沒什麼聯繫的兩個人,要交易的話,就必然會橫跨數個不穩定state channel或者要經過一個大的中繼者,這個中繼者可以是具有公信力的,也可能突然跑路,所以既然這樣爲什麼大家不繼續愉快地使用支付寶呢? state channel還有一個問題,剛纔說到的保證金,如果持續從一方發送資金到另一方,保證金就會越來越少,最後被迫關閉,這也是一種不穩定因素。

      還有一個問題,A在關閉支付通道時,B不在線的話,B可以用A之前的簽名數據申請抵押金,以補償自己的損失。可是如果B不在線,協議就只能要求A在申請關閉支付通道後,允許B先轉出餘額,然後A再轉。這個過程是設置了超時機制的,在這個機制下,假設B突然發生不幸,就無法先轉出餘額,那麼這也意味着A永遠都無法轉出自己的那部分餘額了。

 

      最後,總結一下目前off-chain存在的問題:

 

      a. 中繼過於中心化問題;

      b. 在線狀態不穩定問題;

      c. 抵押資產問題。

 

    【分片】

 

      分片又稱Sharding,它首先出現在數據庫領域。起初,所有的數據都放在一臺服務器上。雖然不同的用戶訪問的是不同的數據,但是隻有一臺服務器提供服務,隨着用戶訪問的不斷增加,即使這臺服務器是超人,在客官的不斷所求下,也會累趴下。那麼人們想到最容易的改進辦法就是:將不同數據放在不同的服務器上,此時,訪問不同的數據就會由不同的服務器提供服務,從而突破單節點數據服務器I/O能力限制,系統處理能力得到線性增長。這就是計算機領域裏分片的原初概念,是對數據進行分類,將不同類的數據放在不同的服務器,提供並行處理能力,這類分片的學術名稱叫做“垂直分片”。

      既然有垂直,那可能也有“水平分片”。可以進一步想象,隨着訪問同一類數據的請求越來越多,單臺服務器依然會成爲瓶頸,那麼可以進一步將數據分爲多個部分,分佈到多臺服務器,這就是水平分片。簡而言之,分而治之就是分片的核心思想。

      以太坊的分片,簡單來說就是將區塊鏈網絡劃分成若干能夠處理交易的較小組件式網絡,以實現每秒處理數千筆交易的支付系統。設置一個區塊鏈,在這個區塊鏈系統中有一百個各自不同的宇宙,每一個宇宙都是一個獨立的賬戶空間。使用者可以在某個宇宙中擁有一個賬戶,該用戶發起的交易也只會對交易相關的宇宙產生影響。是不是似曾相識?聽上去是不是和側鏈很像?是的,如果說側鏈是通過“外部嫁接”到主鏈,那分片就是將主鏈進行“內部分割”,顯然後者的實現難度要比前者複雜的多!也因此很多人都認爲V神把事情複雜了……其具體爲何要如此實現V神自有他的道理,不在本文討論,但基本可以確定的是,即使是分片,也會爲效率犧牲一定程度的“去中心化”。順帶一提,EOS也有分片,叫Region。

      基於分片技術的區塊鏈的實現對公共區塊鏈有着不同的好處。首先,區塊鏈上處理交易的速度變成了每秒上千筆甚至更多,這改變了人們對加密貨幣作爲支付方式效率的看法。改善交易吞吐量將會給去中心化的系統帶來使越來越多的用戶和應用程序,而這將反過來促進區塊鏈的進一步採用,也使挖礦變得更有利可圖,同時也能吸引更多加入到公共網絡上的節點,從而形成一個良性循環。

此外,分片技術可以幫助降低交易費用,因爲驗證單筆交易的處理量減少了;節點可以在依然盈利運營的同時收取較小的費用。在現實世界中,我們將低費用與高交易處理能力結合起來,會使公共鏈將變得越來越有吸引力。這些積極的趨勢所持續的時間越長,我們就會越能看到更多的主流的加密技術和區塊鏈應用程序的出現。

      分片的最重要的挑戰是創建碎片。開發者需要開發一種機制來確定哪些節點可以按照安全的方式保留在哪些碎片中,這樣就能避免那些控制大量特定碎片的人所發起的攻擊 。打敗攻擊者的最佳方法(至少在大多數情況下)就是建立隨機性。通過利用隨機性,網絡可以隨機抽取節點形成碎片。這樣一種隨機抽樣的方式可以防止惡意節點過度填充單個碎片。

      但是,我們如何建立隨機性呢?最容易獲得公共隨機性的來源是區塊,例如,交易的Merkle tree root。在區塊中所提供的隨機性是可被公開驗證的,並且可以通過隨機提取器中提取統一的隨機比特。

      然而,簡單地使用隨機機制將節點分配給碎片仍是不夠的。我們還必須要確保網絡的一個碎片中不同成員意見的一致性。這可以通過像工作量證明這樣的共識協議來實現。分片技術是區塊鏈的一個令人興奮的技術,它讓我們看到了希望,它可以在程度非常小的影響去中心化和透明度的情況下解決擴容問題。然而,毫無疑問的是,分片技術,尤其是狀態分片,在設計層面和實現層面都是非常困難的。這也是以太坊一直想走卻沒有完全走通這條路的原因。

 

  【有向無環圖】

      DAG 是有向無環圖(Directed Acyclic Graph)的縮寫,這是一種有頂點和邊的圖結構。它可以保證從一個頂點沿着若干邊前進(有向),但永遠不能回到原點(無環)。在IOTA這個項目中,提到的Tangle(纏結)就屬於DAG的一種數據結構,真正意義上講,IOTA已不屬於“區塊鏈”,你可以理解爲如果比特幣、以太坊使用的是底層數據結構是BlockChain,而IOTA的底層數據結構則是DAG,但它依然屬於“去中心化”的範疇。

      讓我們回顧一下這張圖:

 

       有向無環圖(Tangle)在 IOTA 裏發起一筆交易的流程如下:你需要先找到網絡裏的兩筆交易,驗證它們的合法性,然後做微量的POW計算,把自己的交易與它們綁定,再廣播到網絡。你的交易會被後來的交易以相同的方式驗證。如果驗證你交易的其他交易越多,則你的交易的確定性越高。當達到一個臨界值時,就認爲這個交易被確定了,這和比特幣6個區塊確定交易狀態的思想一致。簡單來說,IOTA是把算力作爲交易的一部分。只要你想加入這個網絡,那必須先成爲Mini版礦工,做出微量的POW貢獻,也因此它是去中心化的。DAG的優勢可以做到高併發,理論上是無限多的併發,意味着它可以大幅提升交易速度。

 

      有向無環圖(Direct Acyclic Graph或DAG)是近些年來區塊鏈項目的技術熱點之一。許多業內人士認爲,這項技術有可能在根本上解決區塊鏈的擴容問題,因此相關的項目都有較高的熱度。然而,由於其更高的技術門檻和開發難度,採用這項技術的區塊鏈項目仍爲少數,在國內更是鳳毛麟角。

 

      傳統的線性架構的區塊鏈,在維持良好的多中心化與安全性的前提下,在底層上的吞吐容量有根本的瓶頸問題。因此這些區塊鏈項目的擴容方案,一種是以犧牲多中心化的記賬方式來換取整個鏈的吞吐容量,一種是依賴側鏈、分片等第二層(Layer 2)技術來處理小額交易。要根本性地獲得更好的底層鏈效率,需要採取與完全不同的架構。DAG就是較被看好的潛在挑戰者。DAG相對於傳統線性區塊鏈的優勢是非常明顯的,主要在於可延展性和交易吞吐量上。

 

      可延展性:由於採取DAG的數據結構的話,每個節點不需要再等其它節點的數據達到統一就可以處理新的交易,避免了因網絡延遲和數據同步造成的時間浪費。因此,參與DAG記賬的節點很容易大幅延展。因此,DAG非常適合IoT一類設備非常多且網絡狀況往往不穩定的應用。相比之下,在線性區塊鏈系統中,節點一旦碰到通信延遲而數據不統一,就無法參與下一次區塊的生成,甚至在極端情況下有網絡分叉的危險。

 

      交易吞吐量:此外,DAG的尾端可以平行增加任意多的新數據,因此天生具有很強的交易吞吐量。這一點更是完勝線性區塊鏈線性區塊鏈每次只能增加一個區塊大小的數據量,所以可以處理的交易量是很難改變的。

 

      DAG的主要安全問題有:

 

      雙花:DAG異步處理數據的特徵導致攻擊者可能利用節點間的信息差進行雙花。具體來說,如果兩個頂點間沒有明確的父子關係,攻擊者可以分別在只看到這兩個頂點中的一個的不同節點處,對同一筆存款進行雙花。這種雙花只有在同時看到兩個區塊的節點處才能被檢測到,並且只有在兩個頂點重新匯合到一個新頂點時才能最終判定哪一筆是雙花。爲了防止這種雙花的發生,需要額外通過制定更周密的雙花檢測規則。

 

      影子鏈攻擊:DAG允許多重並行交易的特徵,導致攻擊者可能暗中生成一條影子鏈,並且時不時地將影子鏈跟主鏈進行對接以逃避檢測算法。極端情況下,這條影子鏈有可能代替主鏈成爲全網的共識。

 

      雖然DAG的缺點明顯,但由於DAG高併發、異步的特徵,非常適合IoT類應用,許多IoT類項目都會偏愛DAG架構。IOTA就是以處理機器間小額高頻交易爲應用場景。另一方面,IoT設備一般不具備PoW挖礦所需的算力,因此PoS/DPoS+DAG或者BFT+DAG更有可能成爲未來DAG項目的共識機制。

 

    【多鏈】

      多鏈,即拋棄了“一鏈治所有”的傳統方案,採用“多鏈分而治之”的新方案重新設計了一個保障每個合約都能正常運行的公鏈。這一創新極大程度上簡化了架構,降低了數據處理壓力,確保一條鏈上流量激增不會影響到另一條鏈的效率,在鏈上進行的任何業務都不會收到其他業務干擾,有效實現了資源隔離。

 

      區塊鏈的互操作性本身就是一些應用的基礎需求。想象一個理財應用,用戶可以用某項資產交換不同機構的理財產品,不同的資產就需要在多條鏈上做轉移、交換。還有一些ORACLE應用同樣需要多鏈間的跨鏈喂入交互,譬如匯率牌價、天氣、股價、特定指標等等。區塊鏈的某些應用在單鏈上無法完整實現,需要在多鏈架構下的可擴展性、隔離性、高性能、互操作等特性的幫助下實現。

 

      在EKT中Token鏈是一個並行多鏈的結構,多鏈多共識,共享用戶基礎。EKT的token是鏈上的一個屬性,就像使用了utxo模型的鏈utxo有其他token一樣,我們的轉賬事件也是內置的。

      EKT的中心思想是設計一個社區的機制,讓開發者可以輕易的開發一個DAPP,其他的交給EKT來處理, EKT 的“一鏈一主幣,多鏈多共識”的機制爲後來的區塊鏈項目開發提供了很大的便利,可以使用於任何區塊鏈適用的應用場景。 EKT 提供了一套底層的區塊鏈機制,其他的區塊鏈項目可以很容易的基於 EKT 的主鏈代碼部署一套自己的主鏈。在EKT上編寫的區塊鏈項目將無需過於擔心安全性問題,因爲每一個接口都是非常簡單並且在許多條並行主鏈上部署和運行的。部署主鏈時可以靈活的發行自己主鏈的代幣以及選擇共識算法。新部署的主鏈也可以加入到 EKT 的整個生態,共享 EKT 生態的用戶資源,代幣也可以和EKT 主幣以及其他主鏈的代幣進行交換和流通。

 

      在EKT中,我們使用公私鑰加密和路由策略的機制實現拜占庭容錯,EKT主鏈上每個節點的公鑰都是公開的。這是一種兼顧效率、安全和去中心化的解決方案。Token現在一般被定義成一個智能合約,但如果把它變成一個預先定義好事件的“對象”,這個“對象”可以有自己的參數(比如總量、共識機制等等),則會帶來更好的安全體驗。接受token的地址可以有兩種:普通的用戶地址和合約地址,合約地址收到token之後可以執行非圖靈完備的合約語言,進行簡單的狀態計算和token轉移。EKT把Token鏈和DApp鏈分開,將來在很大程度上能規避之前說到的分片,和offchain遇到的困境。

 

      以上就是我對區塊鏈共識機制的一些思考,和一些在設計EKT的多鏈多共識時對橫向擴展的考慮。歡迎大家提出疑問,共同探討。

 

 

    【結語】

      以上就是關於可擴展性相關技術的一些簡單概括和介紹,實際應用的技術細節和命名方式可能會有很多,但從目前來看,大體都脫離不了off-chain、sharding、DAG、multi-chain四類的範疇。從目前來看,無論何種技術的解決方式都是在從“更高的效率”和“去中心化”二者之間尋找一個平衡,想要效率就要中心化,想要安全就要去中心化,也因此,現有解決方案也都在引發一些“不是去中心化”的質疑聲。

 

      其中爭論最激烈的就是比特幣Core派和BCH派之間,Core派的解決方案是側鏈,BCH就抨擊側鏈最終會淪爲中心化的銀行。BCH的解決方案是大區塊,Core派就抨擊BCH本身就是以礦霸爲核心的中心化代表。有爭論纔有突破,意味着問題本身就還沒有唯一的答案。這反而證明了我們正處於一個區塊鏈剛剛起步發展的黃金時代,也是區塊鏈現階段的魅力所在,百家爭鳴、各抒己見……投身此間,我倍感慶幸。

 

      公鏈是區塊鏈發展的前提基礎,也是區塊鏈行業未來發展的核心保障。而目前區塊鏈的發展現狀是,底層公鏈的性能尚未發展起來,在其上構建的各類DAPP嚴重受限於性能,各種共識算法都有不完美之處。無論是O(N^2)的BFT算法還是O(N)的改進算法(包括POW和POS和一些犧牲一定條件的改進BFT算法,scalability都總是存在一個瓶頸上限。我相信,雖然scale-out的off-chain、sharding、DAG、multi-chain都還遠說不上完美,但這應該是區塊鏈無限擴展性能的正確方向。

 

參考閱讀:

20161019 論比特幣系統的共識規則

20170119 區塊鏈 - 比特幣的決共識機制

20170223 區塊鏈共識機制淺談

20170723 拜占庭容錯(BFT)算法介紹

20170821 Is there any link between Bitcoin's PoW and BFT?

20171213 到底什麼是分片技術?

20180327 分片技術(sharding)——區塊鏈擴容問題的良方

20180414詳解“多鏈多共識”機制

《BTC whitepaper》

《Ethereum whitepaper》

《EKT whitepaper》

《EOS whitepaper》

 


END

 

今天關於“區塊鏈提速2”的文章就這裏

如果有任何技術上的問題想與我討論

歡迎關注微信公衆號:EKT多鏈技術

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章