http://www.7klian.com

一文相识 CKB 编程模子

我们在 CKB VM 中执行剧本(后文将做详细先容)并验证生意业务输入中包括的证明,以确保用户可以利用这些引用的 cell,而且在指定的应用措施逻辑下状态转换是有效的。通过这种方法,网络中的所有节点都可以验证新状态是有效的,并保存这些状态。
pub type_: Option<Script>,
CKB 是一个全新的验证模子,与其它一些区块链差异,CKB 为整个社区提供了开拓 CKB 剧本的自由。
每个 Token 用户将其 UDT 生存在本身的 cell 中,Cell 认真为 UDT 提供存储空间,并确保它们本身的 Token 是安详的。通过这种方法,UDT 可以真正地属于每个单独的 UDT 用户,而不像 ERC20 那样将所有 Token 用户的余额都存储在 ERC20 合约存储空间中,而 ERC20 合约存在某些安详裂痕。
假如你想要相识更多关于 Cell 模子的内容,接待查阅《领略 CKB 的 Cell 模子》:
3. CKB VM:一台真正的迷你电脑

昨天,由 Nervos Grants 项目团队 Obsidian Labs(黑曜石尝试室) 连系 Nervos 和 Nervos Community 一同推出的 CKB 编程体验课程正式开课啦!这是我们首次为 Nervos 中文社区的同伴们经心打造的第一套开拓体验课程。在昨天的课程中,CKB 编程体验课讲师 Obsidian Labs 首创人& CKB Studio 焦点开拓者 Phil Li 和各人劈头先容了 CKB Studio 的安装以及 IDE 的利用界面,并让各人相识如安在 CKB Studio 长举办转账以及陈设浅易合约。
和我们做的每一件事一样,Grants 打算进程和措施将是完全透明的。从评估申请,到投票筛选,项目标每一步都将向社区成员开放,让他们举办审查并提供反馈。
以下是一个老是可以正常(执行并)退出的锁剧本的代码示例。假如利用这段代码作为锁剧本,那么任何人都可以销毁这个 Cell。
public:
· 状态验证(CKB VM)
这个签名演算法有两个要求:
这篇文章中演示了如何建设一个 CKB 剧本项目:duktape-powered,这个项目有以下需求:
我们还可以用这个要领举办扩展,我们可以在 CKB 上通过 duktape 利用 JavaScript,也可以通过 mruby 利用 Ruby,我们甚至可以在 CKB 上利用比特币剧本或 EVM 假如我们只是编译它们的 VM 和把它放在链上。这确保了 CKB VM 既能辅佐我们生存自身的优势,又能成立一个多样化的生态系统。在 CKB 中,所有的语言都应该被平等看待,自由应该被把握在区块链智能合约开拓者的手中。
· 用于掩护 UDT 的锁定剧本与 UDT 自己解耦。
pub capacity: Capacity,
return 0;
https://talk.nervos.org/t/rfc-nervos-ecosystem-grants-program/4038/
}
· Cell 必需要包括公钥的信息,所以只有真正的私钥可以建设有效的签名;
1. 锁定剧本
您可以会见 Nervos Talk 来相识 Grants 打算详情,并获取我们但愿看到的提交范例列表。假如你也对 Nervos 项目感乐趣,假如你也有好的 idea、履历和技术,我们邀请您提交一份扶助提案,和我们一起构建 Nervos 生态系统和配合常识库(Common Knowledge Base,CKB)。
每一个 TxOut 代表了一个硬币而且有本身的定名,这是由 Value 界说的, scriptPubKey 是一段暗示这个硬币的所有者是谁的剧本(凡是包括了所有者的公钥),只有能提供正确的参数使这个剧本运行乐成的人,才气把这个硬币「转让」给别的一小我私家。
RFC: Nervos Ecosystem Grants Program
8. 拥抱 WebAssembly 生态系统
First-Class Asset 的观念实际上来自 First-Class Function。First-Class Asset 是用户直接拥有并可以直接操纵的加密资产。
pub data: Vec<u8>,
可是我们都知道软件的设计是一个衡量的进程。在特定环境下,牺牲一些确定性来调换可进级性带来的便利是有意义的。因此,我们实现了一个奇特的剧本:type ID script。 在 CKB 上,这个成果完全是可选的,你可以像在其它区块链中一样,在 CKB 上完美地践行「代码即法令」的原则,而且可以提供可进级性和确定性之间的均衡。我们只是但愿这个奇特的成果,能为那些真正需要它的人提供新的大概性。
本年年头,我们已经宣布了 Nervos Grants 打算来促进 CKB 上的创新和成长,并支持多样化和繁荣的生态系统成长。并创立了 3000 万美元的基金,用于扶助开拓者在 Nervos 上的开拓。
· 假如一个智能合约可以进级,那么一笔已经签名的生意业务大概会(在进级前后)执行差异的行为,从而被区块链拒绝。
2. Cell data 的前 4 个字节包括了当前 cell 中 UDT 的数量。
2. 范例剧本
Cell 模子是一个全新的模子,引入了 lock script 和 type script 的观念,我们将在后头提到。
int main(int argc, char *argv[]) {
CKB 生意业务的 inputs 包罗对之前 outputs的引用,以及可以或许解锁它们的证明。客户端将生成的新状态作为生意业务 outputs,在 CKB 中称为 cell。因此,cell 和生意业务输出的表述是可以交流的。Cell 是 CKB 中的主要状态存储单位,资产所有权归用户所有,而且必需遵循剧本指定的相关应用措施逻辑。
可进级性和确定性之间的抵牾。
Layer 1 的存眷重点在状态,以 Layer 1 为设计方针的 CKB 设计的存眷点很自然就是状态。CKB 想要验证和持久生存的状态,不只仅是像在中那样简朴的数字(Value),而是任何人们认为有代价的、颠末共鸣的数据,Bitcoin 的生意业务输出布局满意不了这个需求。只需要将 Value 一般化,把它从一个存放整数的空间酿成一个可以存放任意数据的空间,我们就获得了一个越发一般化的「Value 」可能叫 Cell:
Open Grant Program Categories and Scope of Work for Applications
对付想要开拓 JS 项目标人来说,这是一个很是有用的例子,你可以通过 JavaScript 和 duktape 得到精简的 CKB 剧本开拓体验。
Grants 打算的方针是吸引更多有才能的人环绕 Nervos 开拓办理方案,来研究和成立须要的东西,并鼓励那些有意愿和有豪情致力于这些办理方案的开拓人员和项目。
· 用户可以将 cell 中的所有 UDT 或部门 UDT 转移给其他用户
· 举办哈希计较
· 易于实现:
· 外部库依赖
Bitcoin 把整个账天职割生存在了一个个 UTXO 内里,UTXO 是未耗费生意业务输出(Unspent Transaction Output)的简写,它被锁定在特定的所有者手中,记录在上,并被整个网络识别为钱币单元。它的数据布局很是简朴,只包括两个字段:
Amount Value;
得益于强大的 CKB VM,我们可以在 CKB 上通过 duktape 利用 JavaScript。我们不只可以有一些逻辑很是简朴的代码片断,还可以理会 CKB 数据布局,在剧本中安排外部库等等。我们的 CKB 焦点开拓人员 Xuejie 写了一篇关于如何实现的文章:《CKB 剧本编程简介[7]:Duktape 高级编程》:https://docs.ckb.dev/blog/ckbscript-07
{
}
每个 Cell 都有一个锁定剧本。当生意业务中的 Cell 被以输入的形式利用时,锁定剧本必需执行。生意业务只有在所有的输入中锁定剧本都正常(执行并)退出时(没有破例)才有效。因为剧本在输入上运行,所以它可以饰演锁的脚色来节制谁可以解锁可能销毁 Cell,以及耗费储存在 Cell 中的容量。
class TxOut
Script scriptPubKey;
我们试图在这一代的 CPU 架构上找到最小的层,而 RISC-V 是我们可以向区块链世界果真的最透明的模子,同时确保安详性和机能。任何差异的模子,譬喻 WebAssembly、EVM等,都应该是 RISC-V 模子之上的层,而且可以通过 RISC-V 模子自然地实现,可是,另一个偏向大概就不那么顺利了。
6. Duktape 高级编程:用 JavaScript 编写 CKB 剧本
另一个可供选择的方案是 EVM,多年来 EVM 一直在建议图灵完备的办理方案,但惋惜的是,在 EVM 上构建任意巨大的算法险些是不行能的:要么编码部门太坚苦,要么 gas 耗损不公道。为了在 EVM 上引入最新的算法,,人们不得不想出各类百般的破解要领,当伊斯坦布尔硬分叉产生时,我们只能在 EVM 中运用公道的 blake2b 算法。那么其他的算法呢?
看到这里,你们是否已经对 CKB 的编程模子有了劈头的相识,可能有了一些很好的想法?
· CKB数据布局的序列化/反序列化
我们的恒久愿景是完全地去中心化和社区主导。要实现这一点意味着我们需要引发并引导那些但愿为构建 Nervos 基本设施做出重大孝敬的小我私家、项目和团队。
假如你想要相识更多关于如何调试 CKB 剧本的内容,接待查察《CKB 剧本编程简介[5]:调试》:https://docs.ckb.dev/blog/ckbscript-05
1. Cell 模子:通用化的 UTXO 模子
· 范例剧本是可选的;
然而,GDB 仅仅是现代软件开拓中的一部门。动态语言在很洪流平上占据了主导职位,许多措施员都利用基于 REPL 的开拓/调试事情流。这与编译语言中的 GDB 完全差异,根基上你需要的是一个运行的情况,你可以输入任何你想要与情况举办交互的代码,然后获得差异的功效。CKB 也会支持这种范例的开拓/调试事情流。
· 状态存储(Cell 模子)
另外,我们有一个新的项目可以用来生成高机能的 WASM 措施,你可以查察并相识详情:《CKB 剧本编程简介[8]: 高机能 WASM》:https://docs.ckb.dev/blog/ckbscript-08
现有区块链的常见用途是向 Token 刊行方刊行具有非凡用途/意义的新 Token。在,我们称之为 ERC20 代币。为了区别于 ERC20,我们将 CKB 上刊行的 Token 称为用户自界说代币(user defined token,简称 UDT)。

在接下来的课程中,Phil Li 还将继承带各人实操 sUDT 的发币和转账,type 和 lock script 的剧本编程,以及 JavaScript 的智能合约编译。这门课程是 CKB 初学者相识 CKB 的极佳进口,为了利便同学们更好的把握课程内容,我们也为各人整理和汇总了 CKB 编程模子的基本图谱,供各人参阅。
Cell
· 确定性 A:假如我选择一个智能合约来掩护我的 token,那么我的 token 在将来也会安详吗?(可以由我解锁,且只能由我解锁)
2. 锁定剧本 & 范例剧本:一个全新的验证模子
在 Cell 内里,Value 酿成了 capacity 和 data 两个字段,这两个字段配合暗示一块存储空间,capacity 不只仅只是存储 Token 的数量,也能暗示 cell 可以存储数据数量的限制,这就是名字的由来,它是 cell 可以或许存储的容量限制, data 则是生存状态的处所,可以写入任意的一段字节。
1. 用一个非凡的范例脚原来暗示该 cell 存储的是 UDT。
4. UDT:First-class asset
总的来说,UTXO 模子让账簿的汗青记录越发清晰,可是它缺乏通用的状态存储,这会让它原本就缺乏表示力(inexpressive)的剧本越发难以利用。Cell 模子是 UTXO 模子的一个通用版本,它是 CKB 上很是机动和具有缔造力的部门。
· 生意业务必需包括签名,并且凡是以整个生意业务作为动静去签名。
在 CKB VM 中运行 WebAssembly 措施实际上比直接利用 WebAssembly 虚拟机有更多的长处:
5. Type ID:提供可进级性和确定性之间的均衡
· 确定性 B:假如我此刻签名了一笔生意业务,然后稍后再发送它,我的生意业务还会被区块链接管吗?
CKB 编程模子
假如您想要在 CKB 长举办开拓,那么您首先应该要领略它的编程模子。CKB 中的状态是一等国民(First-Class Citizen),状态包括在生意业务和区块中,它们直接同步在节点之间。CKB 的编程模子由三部门构成:
范例剧本和锁定剧本很相似,但有两点差异:
更多关于 Grants 的信息,接待查察:
https://talk.nervos.org/t/ckb-cell/1562
· UDT cell 的存储本钱老是恒定的,它与 cell 中存储的 UDT 数量无关。
假如我们仔细想一想,就会发明可进级性和确定性之间老是存在斗嘴:
· 在任一生意业务中,CKB 必需在输入和输出端都运行范例剧本。
最主流的锁定命字资产的方法是用非对称加密建设的数字签名。
为什么 UDT 是 First-Class Asset?
在 RISC-V 上构建 WebAssembly 会让人感受更自然,因为 WebAssembly 在更高的层级上抽象了很多高级特性,譬喻更高级此外节制流,垃圾接纳等。另一方面,RISC-V 模仿了一个真正的 CPU 可以做什么,这是在计较机内部运行的实际 CPU 之上很是薄的一层。因此,固然这两个偏向都是有大概的,可是确定(certain)的成果在 RISC-V 偏向的 WebAssembly 中更容易实现,而在 WebAssembly 偏向的 RISC-V 中大概会碰着障碍。
可进级性:在一个智能合约陈设在区块链上之后,我还能进级它吗?假设一个智能合约获得了遍及回收,然后溘然有人在这个智能合约中发明白一个 bug(遗憾的是,这样的环境在区块链行业老是会产生),我们可否在不影响所有用户的环境下,将智能合约进级到一个修复完成的版本呢?
在这个模子中,去中心化的应用逻辑被分为两个部门(生成和验证),别离在差异的处所运行。状态生成产生在客户端的链下,新的状态被打包成生意业务并广播到整个网络;状态验证产生在链上,它会确保状态转换的有效性并建设一个去信任的系统(trustless system)。
· 实际上,大概有多个 cell 含有沟通的 UDT。
pub lock: Script,
· 假如一个智能合约可以进级,那它大概具有差异的行为,从而使进攻者可以或许解锁这个 cell,可能克制 token 所有者去解锁这个 cell。
· 状态生成(链下)
CKB VM 是一个基于 RISC-V 指令集的 VM,用于执行范例剧本和锁剧本。这意味着什么呢?这意味着我们(在某种水平上)在 CKB 中嵌入了一台真正的迷你计较机,而不是一台虚拟机。真正计较机的长处是,你可以利用任何语言编写任何你想编写的逻辑。
回看已往,在可进级性和确定性之间,你只能选站一边。而且大大都现有的区块链项目都选择了确定性这一边。「代码即法令」的思想在区块链规模很是风行。
我们可以用 JavaScript 编写 CKB 剧本代码。这是怎么实现的呢?那是因为我们有 C 编译器可用,我们所做的只是回收了一个 JavaScript 实现的嵌入式系统,通过 duktape 从 C 编译成 RISC-V 二进制,并放在区块链中,然后 boom,我们就可以在 CKB 上运行 JavaScript! 因为我们在这里利用的是一台真正的迷你计较机,所以我们可以将另一个 VM 作为 CKB 剧本嵌入到 CKB VM 中,并在 VM 路径上摸索这个 VM。
7. 调试:支持基于 GDB 和 REPL 的开拓/调试
这个设计有以下几个寄义:
留意,一个安详的区块链要比这里提到的内容有更多简直定性需求。在这里我只描写和接头问题相关的属性。
开拓者社区
pub struct CellOutput {
在区块链的世界里,有两个问题是每小我私家都须要面临的:
什么是 First-Class Asset?
https://talk.nervos.org/t/open-grant-program-categories-and-scope-of-work-for-applications/4109

Nervos CKB 是一个以状态为中心的 Layer 1 底层架构,个中生意业务暗示状态的变动和迁移。CKB 提供了一种奇特的基于 CKB VM 和 Cell 模子的有状态的图灵完备编程模子。
调试 CKB 剧本和你日常调试措施并没有太大区别。CKB 剧本调试的第一种方案,凡是合用于 C、Rust 等编程语言。也许你已经习惯了写 C 的措施,而 GDB 也是你的好搭档。你想知道是不是可以用 GDB 来调试 C 措施,谜底虽然是:Yes!你必定可以通过 GDB 来调试用 C 编写的 CKB 剧本。
}
Ethereum 是为每个智能合约帐户提供了奇特的存储空间,而 CKB 是在多个 cell 之间流传数据。Cell 的锁定剧本和范例剧本抉择了该 cell 属于哪个帐户,以及如何与 cell 交互。在 CKB 中,我们有一个新的设计来存储 UDT 用户的余额:
确定性:这里有两个部门:
与 WebAssembly 对比,RISC-V 实际上是一个更低条理的抽象,我们可以移植现有的 WebAssembly 措施,并直接在 CKB VM 上运行它们。通过这种方法,我们可以拥有 RISC-V 提供的机动性和不变性,同时也可以拥抱 WebAssembly 生态系统。
CKB 的经济模子存眷状态存储鼓励问题。用户在区块链上生存状态不只需要付出写入用度,并且应该包袱与存储时间成正比的存储本钱。这办理了我们在 Ethereum ERC20 合约中实现「存储租金」时碰着的问题,譬喻,假如用户的资产状态殽杂在一个处所生存,那么如何让每个用户仅付出存储本身资产的本钱将是一个问题。
· 在 CKB 情况中,我们可以附加任何我们喜欢的情况成果,从而支持所有针对差异区块链的 WebAssembly 措施。更重要的是,我们可以利用导入,因为我们想要向现有的 WebAssembly 措施引入新成果,因为导入成果是与 WebAssembly 措施一起提供的,所以 CKB 自己不需要做任何工作来支持这一点,所有的神奇之处都产生在一个 CKB 剧本中。而对付支持区块链的 WebAssembly,这些情况成果很大概是牢靠的,而且是共鸣法则的一部门,不能随意引入新的情况成果。同样的,这个基于 CKB 的转型事情流可以或许让它更容易地支持新的 WebAssembly 特性,好比垃圾接纳或线程,它实际上只是将所需的支持成果作为 CKB 剧本的一部门即可,所以当 WebAssembly 虚拟机获得更新时(假如已更新),我们无需再期待 6 个月来举办下一次硬分叉。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。