CKB 脚本编程简介[9]: 减少 Duktape 脚本的执行周期
Xuejie Xiao
Nervos Core Team之前的文章介绍过,可以使用纯 JavaScript 构建 CKB 脚本。但是,如果你以前尝试过这种方法,你会注意到一个问题,即基于 JavaScript 的脚本比原生版本消耗更多的周期。虽然这在实验中不是什么问题,但在生产环境中却是非常现实的:更多的周期可以自然地反映在更多的交易费用上。很明显,以下的解决方案可以用来解决这个问题:
之前的文章介绍过,可以使用纯 JavaScript 构建 CKB 脚本。但是,如果你以前尝试过这种方法,你会注意到一个问题,即基于 JavaScript 的脚本比原生版本消耗更多的周期。虽然这在实验中不是什么问题,但在生产环境中却是非常现实的:更多的周期可以自然地反映在更多的交易费用上。很明显,以下的解决方案可以用来解决这个问题:
为 CKB 开发 dApp 是一件非常有意思的任务,遗憾的是目前还没有在 CKB 上开发 dApp 的最佳实践,xuejie 的 Animagus 是 CKB dApp 的开发框架,本文尝试用另外一种原始的手工组装交易的方式介绍 CKB dApp 与基于 Keyper 规范的钱包的交互模式。
由于 Nervos CKB 的 Cell 模式是类似 UTXO 的模型,那么在组装交易时需要明确 inputs 的输入,这样不管是开发钱包、dApp server 还是其他任何需要和 CKB 交互的应用场景,都需要一个查询 live cells 的功能。尽管 CKB RPC 已经提供了基于 LockHash 查询 live cells 的功能,这个这个功能是通用型的功能,并且只能根据 LockHash 查询,在很多 dApp 场景中无法适用。
目前正是 CKB 主链 dApp 开发的起始阶段,很多应用都需要灵活的查询 live cells,例如 LockHash、TypeHash、CodeHash 等等查询 Cells,基于这个场景,我开发了ckb-cache-js。考虑到很多 dApp 的开发技术栈是 JavaScript 或者 TypeScript,正如 ckb-cache-js 的命名一样,这个 cache 库是基于 TypeScript 语言开发的。
我们将实现 balance checker(余额检查器)AST,然后用 Animagus 启动它,这样就可以通过调用 RPC 请求来和 Animagus 进行交互了。
在先前的文章中,我已经向你展示过在 CKB 上运行 WASM 程序,但需要注意的是,WASM 程序的性能可能并不那么出色。我也提到了,有一个潜在的解决方案可以解决这个问题。就在今天,我们发布了一个新项目,这个项目可以用来生成高效的 WASM 程序!让我们赶紧来看看它具体是如何操作的。
我们相信 Nervos CKB 在新一代的区块链中具有无限的潜能。但同时也需要独特的开发工具才能将 CKB 的潜能充分激发。 Animagus 就是在这种情况下应运而生。
「animagus」的名字来自《哈利·波特》,如果巫师具有将自己变成动物再变回来的本领,就会被称为「animagus」,不同的巫师可以变的动物也有所不同。我个人认为为我们现在的这个项目取名 animagus(阿尼玛格斯)是很适合的,希望大家看完本文后也会有这样的感觉。
我在之前介绍过 duktape,展示了如何在Nervos CKB上运行 JavaScript代码。但到目前为止,我所展示的代码都是非常简单逻辑的单个代码段。如果我们要解析CKB 数据结构呢?如果我们需要在脚本中引入外部的库呢?
你可能注意到 CKB 的脚本结构中还有一个 hash_type
的字段。之前为了简化,我们一直忽略它,直到现在。本文将介绍一下 hash_type
字段,以及它所能带来的独特能力。