區塊鏈框架:迅雷鏈VS石墨烯

迅雷鏈(Thunder Chain)是由迅雷旗下網心科技打造的超級區塊鏈平臺,是全球最大規模ToC區塊鏈商業生態,賦能實體經濟,致力於成爲ToC現象級區塊鏈應用的搖籃。迅雷鏈具備全球領先的百萬TPS高併發、秒級確認的處理能力。

迅雷鏈使用創新性的同構多鏈框架,支持水平擴展,每條鏈運行相同的程序,負載均衡算法負責路由,提高系統整體吞吐量和處理能力。

同時迅雷鏈底層實現是自主研發的區塊鏈開發框架,其中實現了區塊鏈相關的通用功能,共包含11個模塊:路由模塊、跨鏈模塊、訂閱通知模塊、共識、賬戶管理、請求池、智能合約、數據存儲、密碼學、網絡通信、通用模塊。框架在設計與實現中,對系統功能的擴展做了充分的考慮,因此迅雷鏈很容易做功能上的擴展。如支持多種特殊交易格式、支持擴展數據資產類型等。這使得迅雷鏈擁有持續交付能力,不斷對區塊鏈的性能、存儲、虛擬機、業務支持等方面存在的問題進行優化和創新,領跑和推動全球區塊鏈技術和行業的發展。

迅雷鏈區塊鏈框架爲區塊鏈行業提供了一套比較完善的區塊鏈解決方案,同樣作爲區塊鏈框架,業內比較早期的石墨烯框架當時也引起了廣泛的關注(石墨烯是Dan Larimer用C++實現的一個開源的區塊鏈開發框架)。

石墨烯框架中設計和實現了區塊鏈的基本功能,如DPOS共識、P2P,對象模型、存儲、插件機制等多方面的內容。在石墨烯框架上,結合業務進行二次開發,可以實現滿足特定業務功能的區塊鏈。bitshares、steemit和EOS都是基於石墨烯框架實現的。下面介紹石墨烯框架的區塊結構、存儲、共識算法方面的內容。

區塊結構

鏈式區塊的基本數據結構都是一棵樹(考慮有分叉的情況),石墨烯的區塊鏈也不例外,一個區塊中包含上一個區塊的id,每個區塊的id爲區塊內容的MAC。
區塊鏈框架:迅雷鏈VS石墨烯

石墨烯的區塊鏈中,每個block由block header和transaction list構成。block header中包含previous、block_num、digest、witness和transaction_merkle_root等主要內容。其中previous爲前一個塊的id,digest爲塊id,witness爲出塊者。transaction list爲本塊打包的交易集合,transaction list的結構與其他區塊鏈不一樣。石墨烯的transaction list中的每個transaction並不只是一個交易的操作,而是支持多個operation的集合。一個operation是一個基本操作的定義,如轉賬、投票等。一個transaction裏可以包含多個operation。但是這些在一個transaction裏的operations依然保持事務的特性,也就是在同一個transaction裏的operation要麼都執行,要麼都不執行。石墨烯區塊鏈沒有獨立的虛擬機,不支持智能合約。所有操作都由operation來定義,如gas計算、撮單等。如果需要擴展operation,只需要實現相應的接口即可。

存儲

石墨烯中的存儲使用的是文件存儲。也就是說石墨烯中所有數據都以文件的形式進行組織和管理,並沒有使用數據庫。這樣的存儲選擇有着明顯的特點,框架需要實現數據的管理功能,石墨烯框架在啓動和運行時,需要將大部分數據加載到內存,因此對內存的要求非常之高。石墨烯框架中定義了對象模型和索引模型,所有的對象實例都有一個全局唯一的id編號,如圖2所示。
區塊鏈框架:迅雷鏈VS石墨烯

一個對象編號包括三部分內容,space_id、type_id和id。space_id標識是否協議對象,正常都爲1,type_id表示對象類型,id爲此類型是第幾個創建的實例。space id 佔最高 8 位, type id 佔中間 8 位, 最低 48 位是 id。如一個賬戶的對象id爲1.2.12376。石墨烯的對象索引實現其實使用的是vector和map,由於所有的索引數據都會加載到內存,所以B+樹無法發揮減少IO的優勢。

共識

石墨烯的共識算法使用的是Dpos,系統中最重要的角色是witness和committee。 witness是通過投票產生的,系統有個witness維護時間週期,沒到週期進行一次witness、committee等的更新。Committee由得票最多的11個人組成,Committee的職責是修改系統參數,無法左右出塊。Witness負責出塊。

其中投票統計和洗牌過程決定了出塊的witness。

在收到一個new block時,如果new block前一個block不是當前塊,並且塊高高於當前塊高會進行分叉判斷和處理:

1)找到兩個叉的LCA。
2)回滾到LCA。
3)沿最長鏈,依次push_block()。

石墨烯通過記錄每一步的undo日誌,實現了操作的回滾。每出現切換分支時,先找到最近公共祖先進行回滾操作,然後執行新的block的操作。

區塊鏈框架:迅雷鏈VS石墨烯

石墨烯的共識中,並沒有對數據狀態進行共識,只對操作序列進行共識。也就是說,如果出現某個節點的數據狀態不一致,只有事務還能正常執行,那麼這些不一致並不會被發現,也不影響整個鏈的運行。

迅雷鏈與石墨烯

上面介紹了石墨烯的主要部分的實現細節,同樣作爲區塊鏈開發框架,下面從多個方面來比較兩個框架。

1)共識
迅雷鏈的共識算法是優化過的PBFT算法,只有通過超過2/3的驗證節點的投票,才達成新塊的共識,不會出現分叉的情況。相比於石墨烯而言,迅雷鏈有最終確定狀態。只有交易被打包上鍊,那麼這個交易就是一個最終被確定的交易,不會出現回滾或分叉的情況。比特幣的6個塊的確認時間或石墨烯的最長鏈,從理論上都不是最終被確定的,與迅雷鏈在這點上有着本質的區別。與此同時,迅雷鏈的共識機制也是交易秒級確認的基礎。

2)智能合約
石墨烯框架作爲一個底層框架,封裝了區塊鏈底層功能,也提供功能的擴展機制,但其並不是一個可編碼、圖靈完備的區塊鏈,不支持智能合約。實現一個DAPP,需要在石墨烯框架上做二次開發,但是開發和維護成本都比較高。迅雷鏈底層實現了可編碼、圖靈完備的VM,同時迅雷鏈的智能合約兼容EVM,支持Solidity。在迅雷鏈上做DAPP的開發和部署非常簡單,只需要編寫相關的業務代碼即可,不需要深入瞭解底層區塊鏈的實現。迅雷鏈正在不斷完善VM,優化智能合約的安全、審計、開發工具等功能。

3)性能
石墨烯的共識採用的是Dpos,從算法層面性能要優於PBFT,是犧牲了一定的一致性得到性能的提升。石墨烯框架作爲底層框架,本身沒有水平擴展的能力,要做到水平擴展需要進行二次開發。迅雷鏈是同構多鏈框架,可根據需求進行水平擴展。比如迅雷鏈有1024條鏈,路由規則使用的是簡單取模,將地址空間平均映射到1024條鏈上,當需要從1024條鏈擴展到2048條鏈時,我們將原來的每條鏈擴展成爲2條,如1號鏈擴展後爲1號鏈和1025號鏈。地址空間的映射規則將原本映射到1號鏈的地址平均映射到1號鏈和1025號鏈上。這樣的設計支持無限次擴展,並且對鏈的變動非常小。迅雷鏈的同構多鏈框架使得迅雷鏈可達百萬TPS,並且支持彈性擴展。

4)功能擴展
作爲區塊鏈底層框架,支持功能方面的擴展非常重要。區塊鏈最終是要服務於各行各業,就會有各自的特×××需求,這也要求底層框架要有強擴展性。石墨烯框架是比較早期的區塊鏈框架,當時的區塊鏈技術更多的是解決數據資產相關問題,所以在功能擴展性上面支持得不夠。目前有一些項目是基於石墨烯實現的,如bitshares、steemit和EOS。基於石墨烯框架進行功能擴展,必須深入瞭解石墨烯框架的代碼實現,雖然石墨烯框架中提供了插件機制,但插件能支持的功能非常有限,只適合做監控、數據上報等周邊功能。另外石墨烯框架不支持智能合約,也就是不可編程的、非圖靈完備的。這決定了基於石墨烯框架的區塊鏈,面對版本升級、功能迭代都非常困難。迅雷的區塊鏈框架充分考慮了功能性擴展,同時支持智能合約,實現了可編程的、圖靈完備的VM,還支持交易格式的擴展。傳統區塊鏈的交易格式只支持資產轉移相關功能,迅雷鏈將來會對交易格式進行擴展,以支持更多類型的交易。

5)生態
區塊鏈的發展需要一個健全、良性的區塊鏈生態,石墨烯是比較早期,目前一些項目是基於石墨烯框架實現,如之前提到的bitshares、steemit和EOS。這些項目是爲了解決某個特定領域問題,對框架進行了二次開發,雖然使用同一個底層框架,但應用之間依然是孤島的存在。迅雷鏈正在引領區塊鏈3.0時代,建設一個區塊鏈生態,解決行業難題,積極推動中國區塊鏈事業。迅雷在區塊鏈生態建設上有着天然的優勢,迅雷星域雲的共享經濟和區塊鏈技術高效利用普通用戶閒置的帶寬、存儲、計算等資源,降低計算與存儲的成本。

6)應用落地
區塊鏈技術最終還要支撐實際業務,迅雷鏈採用獨創的同構多鏈框架,請求秒級確認,達到百萬TPS,這爲支撐應用落地×××能上的保障,同時迅雷的共享經濟生態爲充分利用c端閒置資源,降低了計算和存儲的成本。極大的有助於解決區塊鏈行業費用昂貴、性能與存儲瓶頸的技術難題,實現企業級應用的落地。迅雷還舉辦了“2018迅雷全球區塊鏈應用大賽”,賽題涉及區塊鏈+公益、醫療、教育、社交、交通出行、商品鑑僞、版權等領域。目標是尋找國內外區塊鏈領域具備創新能力的優秀人才以及項目。大賽向所有參賽者開放迅雷鏈,企業和個人開發者可以輕鬆上鍊,使自己的產品和服務具備可信、公開、透明、可追溯的特性,開發成本、遷移及維護工作量大幅降低,並提升業務效率,從而可以自主構建多種新型區塊鏈應用,實現場景鋪展。

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