`
wx1569632409
  • 浏览: 111742 次
文章分类
社区版块
存档分类
最新评论

Hello CKB!

 
阅读更多

Hello CKB!

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 的开源仓库如下:

CKB 的编程模型由 Cell 模型和 CKB-VM 组成。在 CKB 上运行的 DApp 都有计算和验证两个部分,计算在链外运行,验证在链上由 CKB-VM 执行。由于这是一种新的编程模型,我们通过如下三个仓库提供了合约代码及 SDK 示例:

请注意,CKB 还在快速开发迭代中,这里只是提供简单的示例参考,CKB 的 API、编程模型和其它设计在未来都有可能发生变化。

作为一个开放的网络,Nervos 通过 RFC (Request for Comments) 流程来定义规范和改进协议。我们欢迎社区通过RFC流程来和我们一起推动 Nervos 网络的发展。Nervos RFCs 仓库位于:

 

CKB 特点

  • 使用 Rust 作为主要开发语言
  • 通过不同的功能模块实现一个紧凑,完整的区块链底层系统
  • 基于 Cell 模型来扩展 UTXO 模型并支持存储通用状态
  • 基于 Cell 模型和 CKB-VM 实现智能合约,合约计算验证分离,计算发生在链下,验证则在链上
  • 支持智能合约的代码逻辑和状态分离
  • CKB-VM 使用 RISC-V 指令集,支持使用如 Ruby,Python 等高级语言来编写智能合约
  • 使用 Flatbuffer 实现数据结构的序列化,无需解析直接访问序列化数据以及基于 zero-copy 的高效内存使用效率
  • 系统内部基于消息和 channel 实现模块通讯机制,在性能要求较高的如存储和索引访问等模块中,用共享内存加锁方案实现
  • 安全的 P2P 网络实现,具有更好的网络安全性,对 DoS 和日蚀攻击等有更好的抵抗性
  • 更高效的节点间发现,同步协议

 

CKB P2P Network 示意图

2a913ad9d6c90160530c26703cfca9f76a5.jpg

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 上最新源码为准。

 

开发者链接

转载于:https://my.oschina.net/u/3919161/blog/2963126

分享到:
评论

相关推荐

    CKB-Studio:一个为Nervos区块链开发CKB脚本的IDE

    CKB工作室 CKB Studio是在链上开发CKB脚本的IDE。这包括 -编写CKB脚本代码并使用集成的和 -创建和管理CKB密钥对 -运行CKB节点和矿工;在本地,Aggron测试网和CKB主网之间切换 查看帐户信息和交易记录 -方便地生成CKB...

    ckb-vm:CKB的虚拟机,基于开源RISC-V ISA

    ckb-vm:CKB的虚拟机,基于开源RISC-V ISA

    鹭宫压力开关 CKB型.pdf

    鹭宫压力开关CKB型是一款专门设计用来与高压CO2(R744)冷媒配合使用的制冷系统组件。该产品支持超高压CO2冷媒的冷冻冷藏系统,适用于广泛的设定值,覆盖了从超临界到亚临界的区域,即压力设定范围为4~13MPa。这个...

    Nervos CKB —是一个公共的未经许可的区块链,是Nervos网络的常识层。-Rust开发

    Nervos CKB-通用知识库主开发关于CKB CKB是Nervos网络的第1层,Nervos网络是一个公共/无权限的区块链。 CKB使用Pro Nervos CKB-通用知识库主开发关于CKB CKB是Nervos网络的第1层,Nervos Network是一个公共/无权限...

    CKB

    CKB,全称为“知识库”,是一个以C#编程语言为基础构建的知识管理和分享平台。它旨在为开发者提供一个集中的场所,存储、整理并检索与编程相关的技术信息,特别是关于C#的知识点。C#是一种现代化、面向对象的编程...

    ckb-miscellaneous-scripts:有趣且有用的CKB脚本,不一定在系统脚本中

    "ckb-miscellaneous-scripts" 是一个项目名称,暗示这是一组与CKB(可能是指CryptoKitties Blockchain或类似系统)相关的脚本集合。这些脚本被描述为“有趣且有用的”,意味着它们可能包含了各种实用功能或者创新的...

    ckb-nim:CKB VM上的Nim

    【ckb-nim:CKB VM上的Nim】 在区块链技术领域,Nervos CKB(Cellular Knowledge Base)是一个去中心化的公共基础设施,旨在提供一个高性能、可扩展且安全的区块链平台。CKB VM(虚拟机)是Nervos CKB的核心组件,...

    ckb-next:用于Linux的RGB驱动程序

    ckb-next:适用于Linux和macOS的RGB驱动程序 ckb-next是Corsair键盘和鼠标的开源驱动程序。 它旨在将Corsair专有的CUE软件的功能引入Linux操作系统。 该项目目前正在进行中,但是它已经支持许多相同的功能,包括...

    ckb-nft-generator:ckb-nft-scripts的生成器

    ckb-nft生成器的生成器

    ckb-analyzer:一个代理,用于从ckb收集指标,然后将处理后的指标信息写入InfluxDB

    ckb分析仪ckb-analyzer是用于从ckb收集指标,然后将处理后的指标信息写入InfluxDB的代理。 我们可以在Grafana或其他可视化工具上可视化这些指标。 ckb-analyzer仍在快速进行中。安装从下载或cargo install ckb-...

    ckb-time-generator:ckb-time-scripts的生成器

    ckb-time-generator 的生成器。 工作方式 git clone https://github.com/duanyytop/ckb-time-generator.git cd ckb-time-generator mv .env.example .env 编辑.env文件 您需要从.env.example复制.env文件,并输入...

    ckb:Nervos CKB是一个公共的未经许可的区块链,是Nervos网络的第1层

    CKB使用工作量和来在平均硬件和互联网条件下实现最大化的性能,而不会牺牲分散性和安全性,而分散性和安全性是区块链的核心价值。 CKB通过其自己的 (一种与RISC-V ISA完全兼容的虚拟机)支持任何编程语言的脚本...

    ckb-dex-test:Nervos CKB上的DEX测试

    ckb-dex测试Nervos CKB上的测试工作方式编辑.env文件您需要从.env.example复制.env文件并输入自己的私钥。 您可以在src/utils/const.js输入您自己的SUDT类型脚本并输入您自己的订单簿锁定脚本。 git clone ...

    CKB-CKB.github.io

    "CKB-CKB.github.io" 这个项目标题很可能是指一个基于GitHub Pages建立的个人或组织网站。这个网站可能用于展示项目、分享知识或提供某种服务。由于标签是"HTML",我们可以推断这个网站的主要构建语言是HTML,这是一...

    cpp-ckbnext是Linux和OSX的RGB驱动器

    "ckb-next-d6a5c4f"这个文件名可能是项目的某个特定版本,其中"ckb-next"可能代表连续键盘项目的核心部分,而"d6a5c4f"很可能是Git版本控制系统中的一个哈希值,用于标识代码仓库中的特定提交。通过这个哈希值,...

    language-ckb_IR:ckb_IR的语言包

    "ckb_IR" 是库尔德语(Sorani方言)的ISO 639-2/T语言代码,其中 "ckb" 代表库尔德语的Sorani方言,"IR" 代表伊朗,因为Sorani方言主要在伊拉克和伊朗的库尔德人社区中使用。这种代码是国际标准化组织为了统一不同...

    Nervos CKB 是一个公共的免许可区块链,是 Nervos 网络的第 1 层。

    Nervos CKB - 通用知识库掌握 开发 关于 CKBCKB 是 Nervos Network 的第 1 层,Nervos Network 是一个公共/免许可区块链。CKB 使用工作量证明和改进的中本聪共识,在不牺牲区块链核心价值的去中心化和安全性的情况下...

    ckb1-api

    "ckb1-api"是一个与JavaScript相关的项目,很可能是一个用于操作或交互某个名为"ckb1"的系统或服务的API(Application Programming Interface)库。API通常由一系列预先定义好的函数、类或方法组成,允许开发者通过...

    ckb-integration-test-boilerplate:基于JS的样板,用于针对CKB开发节点设置可重现的集成测试

    这是针对本地CKB开发节点创建集成测试的样板。 它旨在促进创建测试来验证可以由任何编程语言实现的合同的行为,同时充当开发人员以有效且可复制的方式进行实验的场所。 启动CKB开发节点 docker-compose up 在运行...

    blzimg.github.io:ckb

    "blzimg.github.io:ckb" 这个标题很可能是指一个基于GitHub的个人或项目网页,用于展示或提供有关“ckb”(可能是某个项目、技术或代码库的缩写)的信息。这个网页可能使用HTML(HyperText Markup Language)进行...

Global site tag (gtag.js) - Google Analytics