摘要:模塊鏈的共識配置,該配置會寫入創世塊。主要指責是記錄和更新本地累計工作量最高的鏈,并維護鏈上數據的索引。消息使用序列化。協議是節點之間用來處理廣播和轉發新的交易。
by Nervos CKB Team
在 2017 年底,我們感到心里的一些想法,包括分層的網絡以及一個作為共同知識庫(Common Knowledge Base)的區塊鏈,都已經成熟。因此 2018 年元旦一過我們就迫不及待的行動了起來,聚集在一間小小的辦公室,進行了 CKB 想法的第一次分享,第一次整理了開發計劃,在 1 月 23 日寫下了第一行代碼。
從那時起到現在已經過去了 300 多個日日夜夜,經歷了多個迭代和沖刺,CKB 的版本終于來到了 0.1.0,設計框架基本成型,包括共識、Cell 模型、虛擬機以及網絡協議在內的組件都已經實現,開源的準備都已經完成。我們終于可以說一句,Hello CKB~
CKB 開源倉庫Nervos 網絡是一個分層架構的分布式應用網絡。CKB 是一個在設計上非常不同的公有鏈協議,也是 Nervos 網絡中的基礎層,是整個加密經濟網絡的信任引擎。CKB 從分層架構的角度出發,目標是成為資產存儲層和上層協議的仲裁層。
CKB 的開源倉庫如下:
https://github.com/nervosnetw... - ckb 主倉庫
https://github.com/nervosnetw... - ckb 虛擬機倉庫。ckb 虛擬機是我們專門為區塊鏈設計的,使用 RISC-V 指令集 (https://riscv.org/),用來執行CKB上智能合約的虛擬機。
CKB 的編程模型由 Cell 模型和 CKB-VM 組成。在 CKB 上運行的 DApp 都有計算和驗證兩個部分 ,計算在鏈外運行,驗證在鏈上由 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 (http://talk.nervos.org/)
Nervos RFC 入口 t.me/nervos_rfcs (https://t.me/nervos_ckb_dev)
Nervos CKB Dev Telegram: https://t.me/nervos_ckb_dev
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24453.html
摘要:年,包括分層的網絡以及一個作為共同知識庫的區塊鏈,都已經成熟。是一個在設計上非常不同的公有鏈協議,也是網絡中的基礎層,是整個加密經濟網絡的信任引擎。主要指責是記錄和更新本地累計工作量最高的鏈,并維護鏈上數據的索引。 說到猿起,這些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分層的網絡以及一個作為共同知識庫(Common Knowledge Base)的區塊鏈,都已經成...
摘要:使用模型的代表是比特幣。每一個比特幣全節點都會維護當前所有的集合,這個集合我們就稱為比特幣賬本的當前狀態即當前的賬本。 本文是對前幾期秘猿區塊鏈課堂中關于 Cell 模型的總結。底層公鏈 CKB 的 Cell 模型是一個高度抽象的模型,事實上,你不僅可以在 Cell 上實現 First-class Asset,也可以在 Cell 上模擬 Account。通過本文的介紹我們可以看出,Ce...
摘要:使用模型的代表是比特幣。每一個比特幣全節點都會維護當前所有的集合,這個集合我們就稱為比特幣賬本的當前狀態即當前的賬本。每一次比特幣轉賬都是一個從集合中刪除幾個硬幣屬于付款方然后又增加幾個新硬幣屬于收款方和或付款方的過程。 showImg(https://segmentfault.com/img/bVblzCB?w=1219&h=803); 本篇文章的作者是 Jan,文章闡述了 Cell...
摘要:若返回值為表示合約調用成功,返回值為其它表示合約調用失敗。舉個例子,我們可以將編譯為二進制文件,來啟用基于的合約開發。共識規則強制規定交易中所有的容量總和不能超過所有的容量總和。 Nervos 底層公鏈 CKB 的虛擬機(CKB-VM)是基于 RISC-V 打造的區塊鏈虛擬機。在前三節課中,我們介紹了 CKB 虛擬機的設計理念及優勢。那么,怎樣才能利用 CKB-VM 更好的開發呢?本文...
摘要:雙管齊下的發行政策在基礎發行結束之前,礦工的收入是這樣基礎發行二級發行手續費,與比特幣有著類似的發行曲線。在前個減半周期中,網絡會發出絕大部分的區塊獎勵,與比特幣不同的是,當基礎發行完全結束后,仍然有二級發行擔任出塊獎勵的角色。 在 31/32 期秘猿科技小課堂中,我們從經濟模型角度分析了現有區塊鏈的問題,以及狀態爆炸的問題。Nervos CKB 的經濟模型為了解決現有問題,提出了創新...
閱讀 2984·2021-09-10 10:50
閱讀 3188·2019-08-30 14:19
閱讀 3515·2019-08-29 17:31
閱讀 3240·2019-08-29 16:43
閱讀 2190·2019-08-29 14:05
閱讀 2087·2019-08-29 13:17
閱讀 2041·2019-08-26 13:25
閱讀 1755·2019-08-26 12:20