摘要:模塊鏈的共識配置,該配置會寫入創(chuàng)世塊。主要指責是記錄和更新本地累計工作量最高的鏈,并維護鏈上數(shù)據(jù)的索引。消息使用序列化。協(xié)議是節(jié)點之間用來處理廣播和轉(zhuǎn)發(fā)新的交易。
by Nervos CKB Team
在 2017 年底,我們感到心里的一些想法,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫(Common Knowledge Base)的區(qū)塊鏈,都已經(jīng)成熟。因此 2018 年元旦一過我們就迫不及待的行動了起來,聚集在一間小小的辦公室,進行了 CKB 想法的第一次分享,第一次整理了開發(fā)計劃,在 1 月 23 日寫下了第一行代碼。
從那時起到現(xiàn)在已經(jīng)過去了 300 多個日日夜夜,經(jīng)歷了多個迭代和沖刺,CKB 的版本終于來到了 0.1.0,設(shè)計框架基本成型,包括共識、Cell 模型、虛擬機以及網(wǎng)絡(luò)協(xié)議在內(nèi)的組件都已經(jīng)實現(xiàn),開源的準備都已經(jīng)完成。我們終于可以說一句,Hello CKB~
CKB 開源倉庫Nervos 網(wǎng)絡(luò)是一個分層架構(gòu)的分布式應(yīng)用網(wǎng)絡(luò)。CKB 是一個在設(shè)計上非常不同的公有鏈協(xié)議,也是 Nervos 網(wǎng)絡(luò)中的基礎(chǔ)層,是整個加密經(jīng)濟網(wǎng)絡(luò)的信任引擎。CKB 從分層架構(gòu)的角度出發(fā),目標是成為資產(chǎn)存儲層和上層協(xié)議的仲裁層。
CKB 的開源倉庫如下:
https://github.com/nervosnetw... - ckb 主倉庫
https://github.com/nervosnetw... - ckb 虛擬機倉庫。ckb 虛擬機是我們專門為區(qū)塊鏈設(shè)計的,使用 RISC-V 指令集 (https://riscv.org/),用來執(zhí)行CKB上智能合約的虛擬機。
CKB 的編程模型由 Cell 模型和 CKB-VM 組成。在 CKB 上運行的 DApp 都有計算和驗證兩個部分 ,計算在鏈外運行,驗證在鏈上由 CKB-VM 執(zhí)行。由于這是一種新的編程模型,我們通過如下三個倉庫提供了合約代碼及 SDK 示例:
https://github.com/nervosnetw...
https://github.com/nervosnetw...
https://github.com/nervosnetw...
請注意,CKB 還在快速開發(fā)迭代中,這里只是提供簡單的示例參考,CKB 的 API、編程模型和其它設(shè)計在未來都有可能發(fā)生變化。
作為一個開放的網(wǎng)絡(luò),Nervos 通過 RFC (Request for Comments) 流程來定義規(guī)范和改進協(xié)議。我們歡迎社區(qū)通過RFC流程來和我們一起推動 Nervos 網(wǎng)絡(luò)的發(fā)展。Nervos RFCs 倉庫位于:
https://github.com/nervosnetw...
CKB 特點使用 Rust 作為主要開發(fā)語言
通過不同的功能模塊實現(xiàn)一個緊湊,完整的區(qū)塊鏈底層系統(tǒng)
基于 Cell 模型來擴展 UTXO 模型并支持存儲通用狀態(tài)
基于 Cell 模型和 CKB-VM 實現(xiàn)智能合約,合約計算驗證分離,計算發(fā)生在鏈下,驗證則在鏈上
支持智能合約的代碼邏輯和狀態(tài)分離
CKB-VM 使用 RISC-V 指令集,支持使用如 Ruby,Python 等高級語言來編寫智能合約
使用 Flatbuffer 實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的序列化,無需解析直接訪問序列化數(shù)據(jù)以及基于 zero-copy 的高效內(nèi)存使用效率
系統(tǒng)內(nèi)部基于消息和 channel 實現(xiàn)模塊通訊機制,在性能要求較高的如存儲和索引訪問等模塊中,用共享內(nèi)存加鎖方案實現(xiàn)
安全的 P2P 網(wǎng)絡(luò)實現(xiàn),具有更好的網(wǎng)絡(luò)安全性,對 DoS 和日蝕攻擊等有更好的抵抗性
更高效的節(jié)點間發(fā)現(xiàn),同步協(xié)議
CKB P2P Network 示意圖 CKB 主要模塊SRC 模塊
存儲了 main 函數(shù),是整個項目的編譯入口模塊。
CORE 模塊
用于保存 CKB 的核心數(shù)據(jù)結(jié)構(gòu)的定義,包括 block,cell,transaction 等核心數(shù)據(jù)結(jié)構(gòu)。
SPEC 模塊
鏈的共識配置,該配置會寫入創(chuàng)世塊。不同配置的節(jié)點直接無法通信。
SHARED 模塊
用于保存各個模塊公用的邏輯和代碼。
db 模塊
封裝了底層的數(shù)據(jù)持久化層,CKB 底層存儲使用的是 KV 數(shù)據(jù)存儲,對應(yīng)的實現(xiàn)有兩種,一種是基于 RocksDB 的實現(xiàn),利用 RocksDB 將數(shù)據(jù)持久化到磁盤。另外一種實現(xiàn)是基于內(nèi)存的模擬持久化實現(xiàn),主要用于測試和開發(fā)等場景。
Chain 模塊
實現(xiàn)了區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)。使用 DB 模塊進行持久化。CHAIN 主要指責是記錄和更新本地累計工作量最高的鏈,并維護鏈上數(shù)據(jù)的索引。在更新鏈時需要進行驗證,并同時更新索引。
POOL 模塊
Pool 模塊的主要功能是實現(xiàn)交易池,CKB 的 pool 的特點是根據(jù)網(wǎng)絡(luò)狀況動態(tài)調(diào)整出塊時間,這樣會更合理的利用網(wǎng)絡(luò)資源和帶寬。交易池的設(shè)計和實現(xiàn)的最大挑戰(zhàn)是要同時兼顧多個目標并取得平衡。包括考慮交易的排序,依賴關(guān)系,以及整體性能,尤其是降低節(jié)點之間需要同步的數(shù)據(jù)并且合理的使用緩存。
PROTOCOL 模塊
用于存放節(jié)點間消息的結(jié)構(gòu)定義,以及消息體的 builder。消息使用 flatbuffers 序列化。
NETWORK 模塊
點對的通訊的底層實現(xiàn)相關(guān)代碼,對 rust-libp2p 進行了封裝,并將一些基礎(chǔ)協(xié)議通過服務(wù)的方式暴露出來。通過對 libp2p 的抽象實現(xiàn)未來可定制的 libp2p 更加方便。
SYNC 模塊
實現(xiàn)了 CKB 的網(wǎng)絡(luò)同步協(xié)議,包括兩個協(xié)議,分別是 Synchronizer 協(xié)議和 Relayer 協(xié)議。Synchronizer 協(xié)議的工作方式是 head-first,更高效的利用網(wǎng)絡(luò)帶寬提升區(qū)塊下載效率,用于節(jié)點之間高速下載區(qū)塊數(shù)據(jù)。Relayer 協(xié)議是節(jié)點之間用來處理廣播和轉(zhuǎn)發(fā)新的交易。Sync 模塊在 Bitcoin 的 Head-first 同步,Compact Block 等協(xié)議的基礎(chǔ)上,結(jié)合了交易提交區(qū),叔伯快統(tǒng)計等功能。
CKB-VM 模塊
CKB-VM 是一個獨立的實現(xiàn)。從實現(xiàn)角度,CKB-VM 是 RISC-V 的硬件 CPU 指令集的實現(xiàn),所有的實現(xiàn)完全遵循 RISC-V 的標準。所以可以將 CKB-VM 當作一個 General Sandbox Runtime Module,CKB-VM 在項目中的作用是驗證狀態(tài)和執(zhí)行智能合約,讓整個系統(tǒng)的計算層保持了最大限度的靈活性,如通過更新 Cell 中存儲的系統(tǒng)合約可以實現(xiàn)添加新的加密算法或其他功能等,并且 CKB-VM 的 Sandbox 的隔離性設(shè)計為執(zhí)行合約提供了強大的運行安全保障。
MINER 模塊
通過可插拔實現(xiàn)了不同的共識算法替換,目前為了開發(fā)方便,實現(xiàn)了 CPU 和 Cuckoo 兩套內(nèi)置共識算法,并且可方便增加外部實現(xiàn)的共識算法,如 ProgPow 算法。
NOTIFY 模塊
是一套用于內(nèi)部模塊之間消息通訊的 pub/sub 模塊。
DEVTOOLS 模塊
包含用 Ruby 實現(xiàn)的腳本,用于開發(fā)過程中方便向區(qū)塊鏈發(fā)送測試數(shù)據(jù)。
代碼閱讀建議閱讀代碼需要具備一些基礎(chǔ)知識,比如對 Rust 語言和生態(tài),以及一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法熟悉,對區(qū)塊鏈的基礎(chǔ)概念如共識協(xié)議,智能合約等概念有一定的理解。
建議可以通過三條路徑來閱讀代碼
數(shù)據(jù)同步,這部分的邏輯跟網(wǎng)絡(luò)相關(guān),會涉及到網(wǎng)絡(luò)協(xié)議,協(xié)議的實現(xiàn)等,主要看 protocol, network, sync 三個模塊。
數(shù)據(jù)存儲,可以了解數(shù)據(jù)結(jié)構(gòu)設(shè)計和數(shù)據(jù)持久化實現(xiàn),主要看 core, db,chain,pool 等模塊。
共識協(xié)議,需要對共識算法有一定的概念理解,主要看 spec, pow, sync, chain 等模塊。
Nervos CKB 仍然處于非常活躍的開發(fā)階段,代碼還沒有經(jīng)過生產(chǎn)環(huán)境驗證,功能,模塊可能在未來還有較大調(diào)整,所以項目狀態(tài)和說明請以 Github 上最新源碼為準。
開發(fā)者鏈接開發(fā)者論壇 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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24453.html
摘要:年,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫的區(qū)塊鏈,都已經(jīng)成熟。是一個在設(shè)計上非常不同的公有鏈協(xié)議,也是網(wǎng)絡(luò)中的基礎(chǔ)層,是整個加密經(jīng)濟網(wǎng)絡(luò)的信任引擎。主要指責是記錄和更新本地累計工作量最高的鏈,并維護鏈上數(shù)據(jù)的索引。 說到猿起,這些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫(Common Knowledge Base)的區(qū)塊鏈,都已經(jīng)成...
摘要:使用模型的代表是比特幣。每一個比特幣全節(jié)點都會維護當前所有的集合,這個集合我們就稱為比特幣賬本的當前狀態(tài)即當前的賬本。 本文是對前幾期秘猿區(qū)塊鏈課堂中關(guān)于 Cell 模型的總結(jié)。底層公鏈 CKB 的 Cell 模型是一個高度抽象的模型,事實上,你不僅可以在 Cell 上實現(xiàn) First-class Asset,也可以在 Cell 上模擬 Account。通過本文的介紹我們可以看出,Ce...
摘要:使用模型的代表是比特幣。每一個比特幣全節(jié)點都會維護當前所有的集合,這個集合我們就稱為比特幣賬本的當前狀態(tài)即當前的賬本。每一次比特幣轉(zhuǎn)賬都是一個從集合中刪除幾個硬幣屬于付款方然后又增加幾個新硬幣屬于收款方和或付款方的過程。 showImg(https://segmentfault.com/img/bVblzCB?w=1219&h=803); 本篇文章的作者是 Jan,文章闡述了 Cell...
摘要:若返回值為表示合約調(diào)用成功,返回值為其它表示合約調(diào)用失敗。舉個例子,我們可以將編譯為二進制文件,來啟用基于的合約開發(fā)。共識規(guī)則強制規(guī)定交易中所有的容量總和不能超過所有的容量總和。 Nervos 底層公鏈 CKB 的虛擬機(CKB-VM)是基于 RISC-V 打造的區(qū)塊鏈虛擬機。在前三節(jié)課中,我們介紹了 CKB 虛擬機的設(shè)計理念及優(yōu)勢。那么,怎樣才能利用 CKB-VM 更好的開發(fā)呢?本文...
摘要:雙管齊下的發(fā)行政策在基礎(chǔ)發(fā)行結(jié)束之前,礦工的收入是這樣基礎(chǔ)發(fā)行二級發(fā)行手續(xù)費,與比特幣有著類似的發(fā)行曲線。在前個減半周期中,網(wǎng)絡(luò)會發(fā)出絕大部分的區(qū)塊獎勵,與比特幣不同的是,當基礎(chǔ)發(fā)行完全結(jié)束后,仍然有二級發(fā)行擔任出塊獎勵的角色。 在 31/32 期秘猿科技小課堂中,我們從經(jīng)濟模型角度分析了現(xiàn)有區(qū)塊鏈的問題,以及狀態(tài)爆炸的問題。Nervos CKB 的經(jīng)濟模型為了解決現(xiàn)有問題,提出了創(chuàng)新...
閱讀 3015·2021-09-10 10:50
閱讀 3217·2019-08-30 14:19
閱讀 3545·2019-08-29 17:31
閱讀 3278·2019-08-29 16:43
閱讀 2219·2019-08-29 14:05
閱讀 2115·2019-08-29 13:17
閱讀 2074·2019-08-26 13:25
閱讀 1798·2019-08-26 12:20