by Nervos CKB Teamgit
在 2017 年末,咱们感到内心的一些想法,包括分层的网络以及一个做为共同知识库(Common Knowledge Base)的区块链,都已经成熟。所以 2018 年元旦一过咱们就火烧眉毛的行动了起来,汇集在一间小小的办公室,进行了 CKB 想法的第一次分享,第一次整理了开发计划,在 1 月 23 日写下了第一行代码。github
从那时起到如今已通过去了 300 多个日日夜夜,经历了多个迭代和冲刺,CKB 的版本终于来到了 0.1.0,设计框架基本成型,包括共识、Cell 模型、虚拟机以及网络协议在内的组件都已经实现,开源的准备都已经完成。咱们终于能够说一句,Hello CKB~算法
Nervos 网络是一个分层架构的分布式应用网络。CKB 是一个在设计上很是不一样的公有链协议,也是 Nervos 网络中的基础层,是整个加密经济网络的信任引擎。CKB 从分层架构的角度出发,目标是成为资产存储层和上层协议的仲裁层。编程
CKB 的开源仓库以下:缓存
CKB 的编程模型由 Cell 模型和 CKB-VM 组成。在 CKB 上运行的 DApp 都有计算和验证两个部分 ,计算在链外运行,验证在链上由 CKB-VM 执行。因为这是一种新的编程模型,咱们经过以下三个仓库提供了合约代码及 SDK 示例:安全
请注意,CKB 还在快速开发迭代中,这里只是提供简单的示例参考,CKB 的 API、编程模型和其它设计在将来都有可能发生变化。ruby
做为一个开放的网络,Nervos 经过 RFC (Request for Comments) 流程来定义规范和改进协议。咱们欢迎社区经过RFC流程来和咱们一块儿推进 Nervos 网络的发展。Nervos RFCs 仓库位于:网络
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 语言和生态,以及一些基础的数据结构和算法熟悉,对区块链的基础概念如共识协议,智能合约等概念有必定的理解。
建议能够经过三条路径来阅读代码
Nervos CKB 仍然处于很是活跃的开发阶段,代码尚未通过生产环境验证,功能,模块可能在将来还有较大调整,因此项目状态和说明请以 Github 上最新源码为准。