摘要:年,包括分層的網(wǎng)絡(luò)以及一個(gè)作為共同知識(shí)庫(kù)的區(qū)塊鏈,都已經(jīng)成熟。是一個(gè)在設(shè)計(jì)上非常不同的公有鏈協(xié)議,也是網(wǎng)絡(luò)中的基礎(chǔ)層,是整個(gè)加密經(jīng)濟(jì)網(wǎng)絡(luò)的信任引擎。主要指責(zé)是記錄和更新本地累計(jì)工作量最高的鏈,并維護(hù)鏈上數(shù)據(jù)的索引。
說(shuō)到“猿”起,這些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分層的網(wǎng)絡(luò)以及一個(gè)作為共同知識(shí)庫(kù)(Common Knowledge Base)的區(qū)塊鏈,都已經(jīng)成熟。因此 2018 年元旦一過(guò)秘猿科技的技術(shù)團(tuán)隊(duì)就迫不及待的行動(dòng)了起來(lái),聚集在一間小小的辦公室,進(jìn)行了 CKB 想法的第一次分享,第一次整理了開(kāi)發(fā)計(jì)劃,在 1 月 23 日寫(xiě)下了第一行代碼。從那時(shí)起到現(xiàn)在已經(jīng)過(guò)去了 300 多個(gè)日日夜夜,經(jīng)歷了多個(gè)迭代和沖刺,CKB 的版本終于來(lái)到了 0.1.0。設(shè)計(jì)框架基本成型,包括共識(shí)、Cell 模型、虛擬機(jī)以及網(wǎng)絡(luò)協(xié)議在內(nèi)的組件都已經(jīng)實(shí)現(xiàn),開(kāi)源的準(zhǔn)備都已經(jīng)完成?,F(xiàn)在,我們終于可以說(shuō)一句,Hello CKB!
我們朝著心中的加密經(jīng)濟(jì)網(wǎng)絡(luò)邁進(jìn)了歷史性的一步!
秘猿科技區(qū)塊鏈小課堂第 15 期
CKB 開(kāi)源倉(cāng)庫(kù)Nervos 網(wǎng)絡(luò)是一個(gè)分層架構(gòu)的分布式應(yīng)用網(wǎng)絡(luò)。CKB 是一個(gè)在設(shè)計(jì)上非常不同的公有鏈協(xié)議,也是 Nervos 網(wǎng)絡(luò)中的基礎(chǔ)層,是整個(gè)加密經(jīng)濟(jì)網(wǎng)絡(luò)的信任引擎。CKB 從分層架構(gòu)的角度出發(fā),目標(biāo)是成為資產(chǎn)存儲(chǔ)層和上層協(xié)議的仲裁層。
CKB 的開(kāi)源倉(cāng)庫(kù)如下:https://github.com/nervosnetw... - CKB 主倉(cāng)庫(kù)
https://github.com/nervosnetw... - CKB 虛擬機(jī)倉(cāng)庫(kù)。CKB 虛擬機(jī)是我們專門(mén)為區(qū)塊鏈設(shè)計(jì)的,使用 RISC-V 指令集[1],用來(lái)執(zhí)行CKB上智能合約的虛擬機(jī)。
CKB 的編程模型由 Cell 模型和 CKB-VM 組成,在 CKB 上運(yùn)行的 DApp 都有計(jì)算和驗(yàn)證兩個(gè)部分[2],計(jì)算在鏈外運(yùn)行,驗(yàn)證在鏈上由 CKB-VM 執(zhí)行。由于這是一種新的編程模型,我們通過(guò)如下三個(gè)倉(cāng)庫(kù)提供了合約代碼及 SDK 示例:
https://github.com/nervosnetw...
https://github.com/nervosnetw...
https://github.com/nervosnetw...
請(qǐng)注意,CKB 還在快速開(kāi)發(fā)迭代中,這里只是提供簡(jiǎn)單的示例參考,CKB 的 API、編程模型和其它設(shè)計(jì)在未來(lái)都有可能發(fā)生變化。
作為一個(gè)開(kāi)放的網(wǎng)絡(luò),Nervos 通過(guò) RFC (Request for Comments) 流程來(lái)定義規(guī)范和改進(jìn)協(xié)議。我們歡迎社區(qū)通過(guò)RFC流程來(lái)和我們一起推動(dòng) Nervos 網(wǎng)絡(luò)的發(fā)展。Nervos RFCs 倉(cāng)庫(kù)位于:
https://github.com/nervosnetw...
使用 Rust 作為主要開(kāi)發(fā)語(yǔ)言 通過(guò)不同的功能模塊實(shí)現(xiàn)一個(gè)緊湊,完整的區(qū)塊鏈底層系統(tǒng) 基于 Cell 模型來(lái)擴(kuò)展 UTXO
模型并支持存儲(chǔ)通用狀態(tài) 基于 Cell 模型和 CKB-VM 實(shí)現(xiàn)智能合約,合約計(jì)算驗(yàn)證分離,計(jì)算發(fā)生在鏈下,驗(yàn)證則在鏈上
支持智能合約的代碼邏輯和狀態(tài)分離 CKB-VM 使用 RISC-V 指令集,支持使用如 Ruby,Python 等高級(jí)語(yǔ)言來(lái)編寫(xiě)智能合約
使用 Flatbuffer 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的序列化,無(wú)需解析直接訪問(wèn)序列化數(shù)據(jù)以及基于 Zero-copy 的高效內(nèi)存使用效率
系統(tǒng)內(nèi)部基于消息和 Channel 實(shí)現(xiàn)模塊通訊機(jī)制,在高性能,以及底層存儲(chǔ)訪問(wèn)和索引訪問(wèn)使用共享內(nèi)存加鎖實(shí)現(xiàn) 安全的 P2P
網(wǎng)絡(luò)實(shí)現(xiàn),具有更好的網(wǎng)絡(luò)安全性,對(duì) DoS 和日蝕攻擊等有更好的抵抗性 更高效的節(jié)點(diǎn)間發(fā)現(xiàn),同步協(xié)議
CKB P2P Network 示意圖 CKB 主要模塊SRC 模塊
存儲(chǔ)了 Main 函數(shù),是整個(gè)項(xiàng)目的編譯入口模塊。
CORE 模塊
用于保存 CKB 的核心數(shù)據(jù)結(jié)構(gòu)的定義,包括 Block,Cell,Transaction 等核心數(shù)據(jù)結(jié)構(gòu)。
SPEC 模塊
鏈的共識(shí)配置,該配置會(huì)寫(xiě)入創(chuàng)世塊。不同配置的節(jié)點(diǎn)直接無(wú)法通信。
SHARED 模塊
用于保存各個(gè)模塊公用的邏輯和代碼。
DB 模塊
封裝了底層的數(shù)據(jù)持久化層,CKB 底層存儲(chǔ)使用的是 KV 數(shù)據(jù)存儲(chǔ),對(duì)應(yīng)的實(shí)現(xiàn)有兩種,一種是基于 RocksDB 的實(shí)現(xiàn),利用 RocksDB 將數(shù)據(jù)持久化到磁盤(pán)。另外一種實(shí)現(xiàn)是基于內(nèi)存的模擬持久化實(shí)現(xiàn),主要用于測(cè)試和開(kāi)發(fā)等場(chǎng)景。
CHAIN 模塊
實(shí)現(xiàn)了區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)。使用 DB 模塊進(jìn)行持久化。Chain 主要指責(zé)是記錄和更新本地累計(jì)工作量最高的鏈,并維護(hù)鏈上數(shù)據(jù)的索引。在更新鏈時(shí)需要進(jìn)行驗(yàn)證,并同時(shí)更新索引。
POOL 模塊
Pool 模塊的主要功能是實(shí)現(xiàn)交易池,CKB 的 Pool 的特點(diǎn)是根據(jù)網(wǎng)絡(luò)狀況動(dòng)態(tài)調(diào)整出塊時(shí)間,這樣會(huì)更合理的利用網(wǎng)絡(luò)資源和帶寬。交易池的設(shè)計(jì)和實(shí)現(xiàn)的最大挑戰(zhàn)是要同時(shí)兼顧多個(gè)目標(biāo)并取得平衡。包括考慮交易的排序,依賴關(guān)系,以及整體性能,尤其是降低節(jié)點(diǎn)之間需要同步的數(shù)據(jù)并且合理的使用緩存。
PROTOCOL 模塊
用于存放節(jié)點(diǎn)間消息的結(jié)構(gòu)定義,以及消息體的 Builder。消息使用 Flatbuffers 序列化。
NETWORK 模塊
點(diǎn)對(duì)的通訊的底層實(shí)現(xiàn)相關(guān)代碼,對(duì) Rust-libp2p 進(jìn)行了封裝,并將一些基礎(chǔ)協(xié)議通過(guò)服務(wù)的方式暴露出來(lái)。通過(guò)對(duì) Libp2p 的抽象實(shí)現(xiàn)未來(lái)可定制的 Libp2p 更加方便。
SYNC 模塊
實(shí)現(xiàn)了 CKB 的網(wǎng)絡(luò)同步協(xié)議,包括兩個(gè)協(xié)議,分別是 Synchronizer 協(xié)議和 Relayer 協(xié)議。Synchronizer 協(xié)議的工作方式是 Head-first,更高效的利用網(wǎng)絡(luò)帶寬提升區(qū)塊下載效率,用于節(jié)點(diǎn)之間高速下載區(qū)塊數(shù)據(jù)。Relayer 協(xié)議是節(jié)點(diǎn)之間用來(lái)處理廣播和轉(zhuǎn)發(fā)新的交易。Sync 模塊在 Bitcoin 的 Head-first 同步,Compact Block 等協(xié)議的基礎(chǔ)上,結(jié)合了交易提交區(qū),叔伯快統(tǒng)計(jì)等功能。
CKB-VM 模塊
CKB-VM 是一個(gè)獨(dú)立的實(shí)現(xiàn)。從實(shí)現(xiàn)角度,CKB-VM 是 RISC-V 的硬件 CPU 指令集的實(shí)現(xiàn),所有的實(shí)現(xiàn)完全遵循 RISC-V 的標(biāo)準(zhǔn)。所以可以將 CKB-VM 當(dāng)作一個(gè) General Sandbox Runtime Module,CKB-VM 在項(xiàng)目中的作用是驗(yàn)證狀態(tài)和執(zhí)行智能合約,讓整個(gè)系統(tǒng)的計(jì)算層保持了最大限度的靈活性,如通過(guò)更新 Cell 中存儲(chǔ)的系統(tǒng)合約可以實(shí)現(xiàn)添加新的加密算法或其他功能等,并且 CKB-VM 的 Sandbox 的隔離性設(shè)計(jì)為執(zhí)行合約提供了強(qiáng)大的運(yùn)行安全保障。
MINER 模塊
通過(guò)可插拔實(shí)現(xiàn)了不同的共識(shí)算法替換,目前為了開(kāi)發(fā)方便,實(shí)現(xiàn)了 CPU 和 Cuckoo 兩套內(nèi)置共識(shí)算法,并且可方便增加外部實(shí)現(xiàn)的共識(shí)算法,如 ProgPow 算法。
NOTIFY 模塊
是一套用于內(nèi)部模塊之間消息通訊的 Pub/Sub 模塊。
DEVTOOLS 模塊
包含用 Ruby 實(shí)現(xiàn)的腳本,用于開(kāi)發(fā)過(guò)程中方便向區(qū)塊鏈發(fā)送測(cè)試數(shù)據(jù)。
閱讀代碼需要具備一些基礎(chǔ)知識(shí),比如對(duì) Rust 語(yǔ)言和生態(tài),以及一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法熟悉,對(duì)區(qū)塊鏈的基礎(chǔ)概念如共識(shí)協(xié)議,智能合約等概念有一定的理解。
建議可以通過(guò)三條路徑來(lái)閱讀代碼:
數(shù)據(jù)同步,這部分的邏輯跟網(wǎng)絡(luò)相關(guān),會(huì)涉及到網(wǎng)絡(luò)協(xié)議,協(xié)議的實(shí)現(xiàn)等,主要看 Protocol,Network,Sync 三個(gè)模塊。
數(shù)據(jù)存儲(chǔ),可以了解數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和數(shù)據(jù)持久化實(shí)現(xiàn),主要看 Core,DB,Chain,Pool 等模塊。
共識(shí)協(xié)議,需要對(duì)共識(shí)算法有一定的概念理解,主要看 Spec,PoW,Sync,Chain 等模塊。
Nervos CKB 仍然處于非?;钴S的開(kāi)發(fā)階段,代碼還沒(méi)有經(jīng)過(guò)生產(chǎn)環(huán)境驗(yàn)證,功能,模塊可能在未來(lái)還有較大調(diào)整,所以項(xiàng)目狀態(tài)和說(shuō)明請(qǐng)以 GitHub 上最新源碼為準(zhǔn)。
開(kāi)發(fā)者鏈接開(kāi)發(fā)者論壇:talk.nervos.org
Nervos RFC 入口:t.me/nervos_rfcs
Nervos CKB Dev Telegram:t.me/nervos_ckb_dev
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24728.html
摘要:雙管齊下的發(fā)行政策在基礎(chǔ)發(fā)行結(jié)束之前,礦工的收入是這樣基礎(chǔ)發(fā)行二級(jí)發(fā)行手續(xù)費(fèi),與比特幣有著類(lèi)似的發(fā)行曲線。在前個(gè)減半周期中,網(wǎng)絡(luò)會(huì)發(fā)出絕大部分的區(qū)塊獎(jiǎng)勵(lì),與比特幣不同的是,當(dāng)基礎(chǔ)發(fā)行完全結(jié)束后,仍然有二級(jí)發(fā)行擔(dān)任出塊獎(jiǎng)勵(lì)的角色。 在 31/32 期秘猿科技小課堂中,我們從經(jīng)濟(jì)模型角度分析了現(xiàn)有區(qū)塊鏈的問(wèn)題,以及狀態(tài)爆炸的問(wèn)題。Nervos CKB 的經(jīng)濟(jì)模型為了解決現(xiàn)有問(wèn)題,提出了創(chuàng)新...
摘要:自我保障協(xié)議與加密經(jīng)濟(jì)加密經(jīng)濟(jì)是區(qū)塊鏈發(fā)展多年以后形成的全新經(jīng)濟(jì)體。根證書(shū)頒發(fā)機(jī)構(gòu)為互聯(lián)網(wǎng)創(chuàng)造信任,它們是整個(gè)互聯(lián)網(wǎng)信任體系的引擎。的信任引擎區(qū)塊鏈?zhǔn)莿?chuàng)造信任的機(jī)器,是一個(gè)不依賴任何第三方的由算法和經(jīng)濟(jì)激勵(lì)維護(hù)的的網(wǎng)絡(luò)。 在上一篇中,我們暢想了區(qū)塊鏈的未來(lái)。秘猿科技在行業(yè)內(nèi)有著豐富的工程實(shí)踐經(jīng)驗(yàn),在多年的實(shí)踐中,我們不禁思考:區(qū)塊鏈技術(shù)到底能用來(lái)干什么?區(qū)塊鏈?zhǔn)且褚蕴灰粯映蔀槭澜缬?jì)...
摘要:對(duì)于什么是區(qū)塊鏈,每個(gè)人都有自己的看法。不是將區(qū)塊鏈技術(shù)神化,就是一味的宣傳區(qū)塊鏈無(wú)用論。如果網(wǎng)絡(luò)是一輛汽車(chē),區(qū)塊鏈就是發(fā)動(dòng)機(jī)。沒(méi)有流動(dòng)性就不是資產(chǎn)那么區(qū)塊鏈?zhǔn)紫葘?huì)顛覆游戲行業(yè)。 對(duì)于什么是區(qū)塊鏈,每個(gè)人都有自己的看法。但是,如何通俗易懂的理清楚、說(shuō)明白區(qū)塊鏈到底是什么?真正能夠做什么?恐怕少之又少。不是將區(qū)塊鏈技術(shù)神化,就是一味的宣傳區(qū)塊鏈無(wú)用論。秘猿科技從事區(qū)塊鏈基礎(chǔ)技術(shù)與工具研...
摘要:比特幣和以太坊像兩座最早出現(xiàn)的虛擬城市。下面我們先來(lái)分析比特幣和以太坊這兩個(gè)最大加密經(jīng)濟(jì)體的經(jīng)濟(jì)模型,我們經(jīng)過(guò)研究發(fā)現(xiàn)它們?cè)诳沙掷m(xù)性上都存在各自的問(wèn)題。狀態(tài)爆炸比特幣與智能合約平臺(tái),都 公鏈的競(jìng)爭(zhēng)是慘烈的,這個(gè)戰(zhàn)場(chǎng)里的玩家要想生存下來(lái),既要有絕活,還得沒(méi)短板。在構(gòu)建加密經(jīng)濟(jì)網(wǎng)絡(luò)上,在技術(shù)實(shí)現(xiàn)和共識(shí)協(xié)議部分,我們?yōu)榇蠹曳窒砹薈KB 的絕活,即: 與時(shí)俱進(jìn)的 Cell 模型 用 RIS...
摘要:秘猿科技區(qū)塊鏈小課堂第期的技術(shù)目標(biāo)是設(shè)計(jì)一個(gè)分層的加密經(jīng)濟(jì)網(wǎng)絡(luò)。換句話說(shuō),從分層的角度來(lái)看,現(xiàn)有的區(qū)塊鏈設(shè)計(jì)方式都是過(guò)時(shí)的。 從分層的角度來(lái)看,現(xiàn)有的區(qū)塊鏈在設(shè)計(jì)時(shí)考慮的是特定的功能(例如支付,或者是運(yùn)行 DApp),并希望在運(yùn)行一段時(shí)間后,讓上層協(xié)議來(lái)適應(yīng)自己。然而區(qū)塊鏈并不天然是 Layer 1,Layer 1 是需要設(shè)計(jì)的。在分層的大框架下,上層協(xié)議和分層網(wǎng)絡(luò)分別有著怎樣的需求?...
閱讀 2907·2021-11-11 16:55
閱讀 954·2021-09-28 09:36
閱讀 3805·2021-09-22 15:22
閱讀 2238·2021-09-06 15:12
閱讀 1771·2021-08-19 10:55
閱讀 2895·2019-08-30 12:52
閱讀 502·2019-08-29 14:03
閱讀 1210·2019-08-29 12:27