by Nervos CKB Team
在 2017 年末,咱們感到內心的一些想法,包括分層的網絡以及一個做爲共同知識庫(Common Knowledge Base)的區塊鏈,都已經成熟。所以 2018 年元旦一過咱們就火燒眉毛的行動了起來,彙集在一間小小的辦公室,進行了 CKB 想法的第一次分享,第一次整理了開發計劃,在 1 月 23 日寫下了第一行代碼。git
從那時起到如今已通過去了 300 多個日日夜夜,經歷了多個迭代和衝刺,CKB 的版本終於來到了 0.1.0,設計框架基本成型,包括共識、Cell 模型、虛擬機以及網絡協議在內的組件都已經實現,開源的準備都已經完成。咱們終於能夠說一句,Hello CKB~github
Nervos 網絡是一個分層架構的分佈式應用網絡。CKB 是一個在設計上很是不一樣的公有鏈協議,也是 Nervos 網絡中的基礎層,是整個[加密經濟網絡的信任引擎](加文章連接)。CKB 從分層架構的角度出發,目標是成爲資產存儲層和上層協議的仲裁層。
CKB 的開源倉庫以下:算法
CKB 的編程模型由 Cell 模型和 CKB-VM 組成。在 CKB 上運行的 DApp 都有計算和驗證兩個部分,計算在鏈外運行,驗證在鏈上由 CKB-VM 執行。因爲這是一種新的編程模型,咱們經過以下三個倉庫提供了合約代碼及 SDK 示例:編程
請注意,CKB 還在快速開發迭代中,這裏只是提供簡單的示例參考,CKB 的 API、編程模型和其它設計在將來都有可能發生變化。
做爲一個開放的網絡,Nervos 經過 RFC (Request for Comments) 流程來定義規範和改進協議。咱們歡迎社區經過RFC流程來和咱們一塊兒推進 Nervos 網絡的發展。Nervos RFCs 倉庫位於:緩存
存儲了 main 函數,是整個項目的編譯入口模塊。安全
用於保存 CKB 的核心數據結構的定義,包括 block,cell,transaction 等核心數據結構。ruby
鏈的共識配置,該配置會寫入創世塊。不一樣配置的節點直接沒法通訊。網絡
用於保存各個模塊公用的邏輯和代碼。數據結構
封裝了底層的數據持久化層,CKB 底層存儲使用的是 KV 數據存儲,對應的實現有兩種,一種是基於 RocksDB 的實現,利用 RocksDB 將數據持久化到磁盤。另一種實現是基於內存的模擬持久化實現,主要用於測試和開發等場景。架構
實現了區塊鏈數據結構。使用 DB 模塊進行持久化。CHAIN 主要指責是記錄和更新本地累計工做量最高的鏈,並維護鏈上數據的索引。在更新鏈時須要進行驗證,並同時更新索引。
Pool 模塊的主要功能是實現交易池,CKB 的 pool 的特色是根據網絡情況動態調整出塊時間,這樣會更合理的利用網絡資源和帶寬。交易池的設計和實現的最大挑戰是要同時兼顧多個目標並取得平衡。包括考慮交易的排序,依賴關係,以及總體性能,尤爲是下降節點之間須要同步的數據而且合理的使用緩存。
用於存放節點間消息的結構定義,以及消息體的 builder。消息使用 flatbuffers 序列化。
點對的通信的底層實現相關代碼,對 rust-libp2p 進行了封裝,並將一些基礎協議經過服務的方式暴露出來。經過對 libp2p 的抽象實現將來可定製的 libp2p 更加方便。
實現了 CKB 的網絡同步協議,包括兩個協議,分別是 Synchronizer 協議和 Relayer 協議。Synchronizer 協議的工做方式是 head-first,更高效的利用網絡帶寬提高區塊下載效率,用於節點之間高速下載區塊數據。Relayer 協議是節點之間用來處理廣播和轉發新的交易。Sync 模塊在 Bitcoin 的 Head-first 同步,Compact Block 等協議的基礎上,結合了交易提交區,叔伯快統計等功能。
CKB-VM 是一個獨立的實現。從實現角度,CKB-VM 是 RISC-V 的硬件 CPU 指令集的實現,全部的實現徹底遵循 RISC-V 的標準。因此能夠將 CKB-VM 看成一個 General Sandbox Runtime Module,CKB-VM 在項目中的做用是驗證狀態和執行智能合約,讓整個系統的計算層保持了最大限度的靈活性,如經過更新 Cell 中存儲的系統合約能夠實現添加新的加密算法或其餘功能等,而且 CKB-VM 的 Sandbox 的隔離性設計爲執行合約提供了強大的運行安全保障。
經過可插拔實現了不一樣的共識算法替換,目前爲了開發方便,實現了 CPU 和 Cuckoo 兩套內置共識算法,而且可方便增長外部實現的共識算法,如 ProgPow 算法。
是一套用於內部模塊之間消息通信的 pub/sub 模塊。
包含用 Ruby 實現的腳本,用於開發過程當中方便向區塊鏈發送測試數據。
閱讀代碼須要具有一些基礎知識,好比對 Rust 語言和生態,以及一些基礎的數據結構和算法熟悉,對區塊鏈的基礎概念如共識協議,智能合約等概念有必定的理解。
建議能夠經過三條路徑來閱讀代碼
Nervos CKB 仍然處於很是活躍的開發階段,代碼尚未通過生產環境驗證,功能,模塊可能在將來還有較大調整,因此項目狀態和說明請以 Github 上最新源碼爲準。