by Nervos CKB Team
在 2017 年末,咱们感到内心的一些想法,包括分层的网络以及一个做为共同知识库(Common Knowledge Base)的区块链,都已经成熟。所以 2018 年元旦一过咱们就火烧眉毛的行动了起来,汇集在一间小小的办公室,进行了 CKB 想法的第一次分享,第一次整理了开发计划,在 1 月 23 日写下了第一行代码。git
从那时起到如今已通过去了 300 多个日日夜夜,经历了多个迭代和冲刺,CKB 的版本终于来到了 0.1.0,设计框架基本成型,包括共识、Cell 模型、虚拟机以及网络协议在内的组件都已经实现,开源的准备都已经完成。咱们终于能够说一句,Hello CKB~github
Nervos 网络是一个分层架构的分布式应用网络。CKB 是一个在设计上很是不一样的公有链协议,也是 Nervos 网络中的基础层,是整个[加密经济网络的信任引擎](加文章连接)。CKB 从分层架构的角度出发,目标是成为资产存储层和上层协议的仲裁层。
CKB 的开源仓库以下:算法
CKB 的编程模型由 Cell 模型和 CKB-VM 组成。在 CKB 上运行的 DApp 都有计算和验证两个部分,计算在链外运行,验证在链上由 CKB-VM 执行。因为这是一种新的编程模型,咱们经过以下三个仓库提供了合约代码及 SDK 示例:编程
请注意,CKB 还在快速开发迭代中,这里只是提供简单的示例参考,CKB 的 API、编程模型和其它设计在将来都有可能发生变化。
做为一个开放的网络,Nervos 经过 RFC (Request for Comments) 流程来定义规范和改进协议。咱们欢迎社区经过RFC流程来和咱们一块儿推进 Nervos 网络的发展。Nervos RFCs 仓库位于:缓存
存储了 main 函数,是整个项目的编译入口模块。安全
用于保存 CKB 的核心数据结构的定义,包括 block,cell,transaction 等核心数据结构。ruby
链的共识配置,该配置会写入创世块。不一样配置的节点直接没法通讯。网络
用于保存各个模块公用的逻辑和代码。数据结构
封装了底层的数据持久化层,CKB 底层存储使用的是 KV 数据存储,对应的实现有两种,一种是基于 RocksDB 的实现,利用 RocksDB 将数据持久化到磁盘。另一种实现是基于内存的模拟持久化实现,主要用于测试和开发等场景。架构
实现了区块链数据结构。使用 DB 模块进行持久化。CHAIN 主要指责是记录和更新本地累计工做量最高的链,并维护链上数据的索引。在更新链时须要进行验证,并同时更新索引。
Pool 模块的主要功能是实现交易池,CKB 的 pool 的特色是根据网络情况动态调整出块时间,这样会更合理的利用网络资源和带宽。交易池的设计和实现的最大挑战是要同时兼顾多个目标并取得平衡。包括考虑交易的排序,依赖关系,以及总体性能,尤为是下降节点之间须要同步的数据而且合理的使用缓存。
用于存放节点间消息的结构定义,以及消息体的 builder。消息使用 flatbuffers 序列化。
点对的通信的底层实现相关代码,对 rust-libp2p 进行了封装,并将一些基础协议经过服务的方式暴露出来。经过对 libp2p 的抽象实现将来可定制的 libp2p 更加方便。
实现了 CKB 的网络同步协议,包括两个协议,分别是 Synchronizer 协议和 Relayer 协议。Synchronizer 协议的工做方式是 head-first,更高效的利用网络带宽提高区块下载效率,用于节点之间高速下载区块数据。Relayer 协议是节点之间用来处理广播和转发新的交易。Sync 模块在 Bitcoin 的 Head-first 同步,Compact Block 等协议的基础上,结合了交易提交区,叔伯快统计等功能。
CKB-VM 是一个独立的实现。从实现角度,CKB-VM 是 RISC-V 的硬件 CPU 指令集的实现,全部的实现彻底遵循 RISC-V 的标准。因此能够将 CKB-VM 看成一个 General Sandbox Runtime Module,CKB-VM 在项目中的做用是验证状态和执行智能合约,让整个系统的计算层保持了最大限度的灵活性,如经过更新 Cell 中存储的系统合约能够实现添加新的加密算法或其余功能等,而且 CKB-VM 的 Sandbox 的隔离性设计为执行合约提供了强大的运行安全保障。
经过可插拔实现了不一样的共识算法替换,目前为了开发方便,实现了 CPU 和 Cuckoo 两套内置共识算法,而且可方便增长外部实现的共识算法,如 ProgPow 算法。
是一套用于内部模块之间消息通信的 pub/sub 模块。
包含用 Ruby 实现的脚本,用于开发过程当中方便向区块链发送测试数据。
阅读代码须要具有一些基础知识,好比对 Rust 语言和生态,以及一些基础的数据结构和算法熟悉,对区块链的基础概念如共识协议,智能合约等概念有必定的理解。
建议能够经过三条路径来阅读代码
Nervos CKB 仍然处于很是活跃的开发阶段,代码尚未通过生产环境验证,功能,模块可能在将来还有较大调整,因此项目状态和说明请以 Github 上最新源码为准。