CKB 脚本编程简介[10]: 编程语言选择
Xuejie Xiao
Nervos Core Team在构建 CKB 时,我们选择使用了一个通用的 VM,所以它不会绑定任何特定的编程语言。这种模式当然有其优点,但它也会带来一些问题。我们经常被问及的一个问题是:在 Nervos CKB 上,我应该用什么语言来进行编程?让我们试着回答这个问题。
在构建 CKB 时,我们选择使用了一个通用的 VM,所以它不会绑定任何特定的编程语言。这种模式当然有其优点,但它也会带来一些问题。我们经常被问及的一个问题是:在 Nervos CKB 上,我应该用什么语言来进行编程?让我们试着回答这个问题。
之前的文章介绍过,可以使用纯 JavaScript 构建 CKB 脚本。但是,如果你以前尝试过这种方法,你会注意到一个问题,即基于 JavaScript 的脚本比原生版本消耗更多的周期。虽然这在实验中不是什么问题,但在生产环境中却是非常现实的:更多的周期可以自然地反映在更多的交易费用上。很明显,以下的解决方案可以用来解决这个问题:
在先前的文章中,我已经向你展示过在 CKB 上运行 WASM 程序,但需要注意的是,WASM 程序的性能可能并不那么出色。我也提到了,有一个潜在的解决方案可以解决这个问题。就在今天,我们发布了一个新项目,这个项目可以用来生成高效的 WASM 程序!让我们赶紧来看看它具体是如何操作的。
我在之前介绍过 duktape,展示了如何在Nervos CKB上运行 JavaScript代码。但到目前为止,我所展示的代码都是非常简单逻辑的单个代码段。如果我们要解析CKB 数据结构呢?如果我们需要在脚本中引入外部的库呢?
你可能注意到 CKB 的脚本结构中还有一个 hash_type
的字段。之前为了简化,我们一直忽略它,直到现在。本文将介绍一下 hash_type
字段,以及它所能带来的独特能力。
据我所知,目前在 CKB 上部署合约最流行的方式是用 C 代码。在创世块中有 3 个默认的合约 secp256k1 lock
、secp256k1 multisig lock
、Deposited DAO
,基本上每个使用 CKB 的人都在使用这些合约。
作为一个 Rust 语言爱好者,我们都想在任何场景下使用 Rust。有个好消息,CKB 虚拟机支持 RISC-V 指令集,最近在 Rust 中也增加对 RISC-V 的支持,这意味着我们可以直接将 Rust 代码编译成 RISC-V。然而,坏消息是 RISC-V 目前还不支持 std 库,这意味着你还不能像日常那样去使用 Rust。
本系列文章将向你展示了如何用 Rust 编写 CKB 合约并部署它。我们会发现,no_std
Rust 其实比我们一开始想的要好很多。
因为事实上 CKB 脚本工作的层级要比其他智能合约低很多,因此 CKB 的调试过程就显得相当神秘。在本文中,我们将展示如何调试 CKB 脚本。你可以发现,其实调试 CKB 脚本和你日常调试程序并没有太大区别。
自从我们选择使用 RISC-V 构建 CKB VM(Virtual Machine 虚拟机)以来,我们几乎每一天都会被问及这样一个问题:为什么不像别人那样在 WebAssembly 上构建你的虚拟机呢?
CKB 的 cell 模型和 VM 支持许多新的用例。然而,这并不意味着我们需要抛弃现有的。如今区块链中的一个常见用途是 token 发行者发布具有特殊目的/意义的新 token 。在以太坊中,我们称之为 ERC20 token ,让我们看看我们如何在 CKB 中构建类似的概念。为了与 ERC20 区分,在 CKB 中的 token 我们称之为 user defined token
,简称UDT。
上一篇我们介绍了当前 CKB 的验证模型。这一篇会更加有趣一点,我们要向大家展示如何将脚本代码真正部署到 CKB 网络上去。我希望在你看完本文后,你可以有能力自行去探索 CKB 的世界并按照你自己的意愿去编写新的脚本代码。
截至目前,CKB 中的 Cell 验证模型或多或少已经趋于稳定,因此我将在这里开始写一系列文章来介绍 CKB 脚本编程。我的目标是补充在阅读白皮书后编写 CKB 脚本所需的所有缺失的细节实现,这样你就可以开始探索 CKB 呈现的这个美丽的仙境。