Hello,CKB:走向加密經濟的重要里程碑

說到“猿”起,這些心裏的想法能追溯到 2016 年甚至更早。2017 年,包括分層的網絡以及一個作爲共同知識庫(Common Knowledge Base)的區塊鏈,都已經成熟。因此 2018 年元旦一過祕猿科技的技術團隊就迫不及待的行動了起來,聚集在一間小小的辦公室,進行了 CKB 想法的第一次分享,第一次整理了開發計劃,在 1 月 23 日寫下了第一行代碼。

圖片描述

從那時起到現在已經過去了 300 多個日日夜夜,經歷了多個迭代和衝刺,CKB 的版本終於來到了 0.1.0。設計框架基本成型,包括共識、Cell 模型、虛擬機以及網絡協議在內的組件都已經實現,開源的準備都已經完成。現在,我們終於可以說一句,Hello CKB!

我們朝着心中的加密經濟網絡邁進了歷史性的一步!

祕猿科技區塊鏈小課堂第 15 期

CKB 開源倉庫

Nervos 網絡是一個分層架構的分佈式應用網絡。CKB 是一個在設計上非常不同的公有鏈協議,也是 Nervos 網絡中的基礎層,是整個加密經濟網絡的信任引擎。CKB 從分層架構的角度出發,目標是成爲資產存儲層和上層協議的仲裁層。

CKB 的開源倉庫如下:

https://github.com/nervosnetw... - CKB 主倉庫
https://github.com/nervosnetw... - CKB 虛擬機倉庫。CKB 虛擬機是我們專門爲區塊鏈設計的,使用 RISC-V 指令集[1],用來執行CKB上智能合約的虛擬機。

CKB 的編程模型由 Cell 模型和 CKB-VM 組成,在 CKB 上運行的 DApp 都有計算和驗證兩個部分[2],計算在鏈外運行,驗證在鏈上由 CKB-VM 執行。由於這是一種新的編程模型,我們通過如下三個倉庫提供了合約代碼及 SDK 示例:

https://github.com/nervosnetw...
https://github.com/nervosnetw...
https://github.com/nervosnetw...

請注意,CKB 還在快速開發迭代中,這裏只是提供簡單的示例參考,CKB 的 API、編程模型和其它設計在未來都有可能發生變化。

作爲一個開放的網絡,Nervos 通過 RFC (Request for Comments) 流程來定義規範和改進協議。我們歡迎社區通過RFC流程來和我們一起推動 Nervos 網絡的發展。Nervos RFCs 倉庫位於:
https://github.com/nervosnetw...

CKB 特點

  • 使用 Rust 作爲主要開發語言 通過不同的功能模塊實現一個緊湊,完整的區塊鏈底層系統 基於 Cell 模型來擴展 UTXO
  • 模型並支持存儲通用狀態 基於 Cell 模型和 CKB-VM 實現智能合約,合約計算驗證分離,計算髮生在鏈下,驗證則在鏈上
  • 支持智能合約的代碼邏輯和狀態分離 CKB-VM 使用 RISC-V 指令集,支持使用如 Ruby,Python 等高級語言來編寫智能合約
  • 使用 Flatbuffer 實現數據結構的序列化,無需解析直接訪問序列化數據以及基於 Zero-copy 的高效內存使用效率
  • 系統內部基於消息和 Channel 實現模塊通訊機制,在高性能,以及底層存儲訪問和索引訪問使用共享內存加鎖實現 安全的 P2P
  • 網絡實現,具有更好的網絡安全性,對 DoS 和日蝕攻擊等有更好的抵抗性 更高效的節點間發現,同步協議

CKB P2P Network 示意圖

圖片描述

CKB 主要模塊

SRC 模塊
存儲了 Main 函數,是整個項目的編譯入口模塊。

CORE 模塊
用於保存 CKB 的核心數據結構的定義,包括 Block,Cell,Transaction 等核心數據結構。

SPEC 模塊
鏈的共識配置,該配置會寫入創世塊。不同配置的節點直接無法通信。

SHARED 模塊
用於保存各個模塊公用的邏輯和代碼。

DB 模塊
封裝了底層的數據持久化層,CKB 底層存儲使用的是 KV 數據存儲,對應的實現有兩種,一種是基於 RocksDB 的實現,利用 RocksDB 將數據持久化到磁盤。另外一種實現是基於內存的模擬持久化實現,主要用於測試和開發等場景。

CHAIN 模塊
實現了區塊鏈數據結構。使用 DB 模塊進行持久化。Chain 主要指責是記錄和更新本地累計工作量最高的鏈,並維護鏈上數據的索引。在更新鏈時需要進行驗證,並同時更新索引。

POOL 模塊
Pool 模塊的主要功能是實現交易池,CKB 的 Pool 的特點是根據網絡狀況動態調整出塊時間,這樣會更合理的利用網絡資源和帶寬。交易池的設計和實現的最大挑戰是要同時兼顧多個目標並取得平衡。包括考慮交易的排序,依賴關係,以及整體性能,尤其是降低節點之間需要同步的數據並且合理的使用緩存。

PROTOCOL 模塊
用於存放節點間消息的結構定義,以及消息體的 Builder。消息使用 Flatbuffers 序列化。

NETWORK 模塊
點對的通訊的底層實現相關代碼,對 Rust-libp2p 進行了封裝,並將一些基礎協議通過服務的方式暴露出來。通過對 Libp2p 的抽象實現未來可定製的 Libp2p 更加方便。

SYNC 模塊
實現了 CKB 的網絡同步協議,包括兩個協議,分別是 Synchronizer 協議和 Relayer 協議。Synchronizer 協議的工作方式是 Head-first,更高效的利用網絡帶寬提升區塊下載效率,用於節點之間高速下載區塊數據。Relayer 協議是節點之間用來處理廣播和轉發新的交易。Sync 模塊在 Bitcoin 的 Head-first 同步,Compact Block 等協議的基礎上,結合了交易提交區,叔伯快統計等功能。

CKB-VM 模塊
CKB-VM 是一個獨立的實現。從實現角度,CKB-VM 是 RISC-V 的硬件 CPU 指令集的實現,所有的實現完全遵循 RISC-V 的標準。所以可以將 CKB-VM 當作一個 General Sandbox Runtime Module,CKB-VM 在項目中的作用是驗證狀態和執行智能合約,讓整個系統的計算層保持了最大限度的靈活性,如通過更新 Cell 中存儲的系統合約可以實現添加新的加密算法或其他功能等,並且 CKB-VM 的 Sandbox 的隔離性設計爲執行合約提供了強大的運行安全保障。

MINER 模塊
通過可插拔實現了不同的共識算法替換,目前爲了開發方便,實現了 CPU 和 Cuckoo 兩套內置共識算法,並且可方便增加外部實現的共識算法,如 ProgPow 算法。

NOTIFY 模塊
是一套用於內部模塊之間消息通訊的 Pub/Sub 模塊。

DEVTOOLS 模塊
包含用 Ruby 實現的腳本,用於開發過程中方便向區塊鏈發送測試數據。

代碼閱讀建議

閱讀代碼需要具備一些基礎知識,比如對 Rust 語言和生態,以及一些基礎的數據結構和算法熟悉,對區塊鏈的基礎概念如共識協議,智能合約等概念有一定的理解。

建議可以通過三條路徑來閱讀代碼:
數據同步,這部分的邏輯跟網絡相關,會涉及到網絡協議,協議的實現等,主要看 Protocol,Network,Sync 三個模塊。
數據存儲,可以瞭解數據結構設計和數據持久化實現,主要看 Core,DB,Chain,Pool 等模塊。
共識協議,需要對共識算法有一定的概念理解,主要看 Spec,PoW,Sync,Chain 等模塊。

Nervos CKB 仍然處於非常活躍的開發階段,代碼還沒有經過生產環境驗證,功能,模塊可能在未來還有較大調整,所以項目狀態和說明請以 GitHub 上最新源碼爲準。

開發者鏈接

開發者論壇:talk.nervos.org
Nervos RFC 入口:t.me/nervos_rfcs
Nervos CKB Dev Telegram:t.me/nervos_ckb_dev

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