【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[1]:验证模型

CKB 脚本编程简介[1]: 验证模型

本文作者:Xuejie
原文链接:Introduction to CKB Script Programming 1: Validation Model
本文译者:Jason,Orange
译文链接:https://talk.nervos.org/t/ckb-1/3462

截至目前,CKB 中的 Cell 验证模型或多或少已经趋于稳定,因此我将在这里开始写一系列文章来介绍 CKB 脚本编程。我的目标是补充在阅读白皮书后编写 CKB 脚本所需的所有缺失的细节实现,这样您就可以开始探索 CKB 呈现的这个美丽的仙境。

您可能会注意到我将在CKB上运行的代码称为脚本,而不是智能合约。这是因为智能合约对我来说是一个令人困惑的术语,我在这里想用另一个词来表示 CKB 独特的可编程性。CKB 中的脚本不一定只是我们在脚本语言中看到的脚本,例如 Ruby,JS,它实际上是指在 CKB VM 上运行的 RISC-V 格式二进制文件。

这第一篇文章将专门介绍 CKB v0.14.0 中引入的全新验证模型。这可能听起来很无聊,但我保证这是最后一篇没有实际例子的帖子 :P

请注意,尽管我认为 CKB 的编程模型现在非常稳定,但目前仍然在进行开发,因此可能会有变化。我会尽力确保这篇文章更新,但如果有什么让你感到困惑的话,这篇文章现在正在描述 CKB 的这次提交

概述

下面一张图片说明了 CKB 的真实交易过程:

file

这张图中有很多内容,我们将在稍后的文章中再次回到此图。今天,我们将只关注 Cell 数据结构中的 2 个实体:locktype

pub struct CellOutput {
    pub capacity: Capacity,
    pub data: Bytes,
    pub lock: Script,
    #[serde(rename = "type")]
    pub type_: Option<Script>,
}

从数据结构中我们可以看到 locktype 共享相同的结构,稍后我们可以证明它们也是在同一个环境中执行的,它们之间的差异只是在几个小细节中:

  • lock 是必选项, while type 是可选项
  • 通常,他们用于不同的实例

我们首先从 type 脚本开始。

type 脚本

请注意,注意这里的名字只是一个幸运的意外,它与心爱的编程语言无关.

如果你考虑一下,CKB(或大多数基于 UTXO 的区块链)上的交易只会将一组 Cell(或 UTXO )转换为另一组 Cell。有趣的是,这里的实际转换过程。这就是我们开始设计CKB验证模型的地方:我们如何构建模型以更好地验证 Cell 转换?

这就是 type 脚本的用武之地:type 脚本用于验证 Cell 转换阶段的某些规则。这里的一些例子包括:

  • 验证 UDT(用户定义的Token)余额以确保不会无效地发出新 Token。

  • 确保每一个可能发生变化的 Cell 都拥有一个独一无二的名字,注意一下,这是非常有趣的,未来的文章很多都将和这一点息息相关,敬请期待。

  • 实现经济结构。事实上,NervosDAO 完全是作为一个 type 脚本实现的,而不需要共识层的支持。

  • 比特币的虚拟机可以编译成基于 RISC-V 二进制文件,这意味可以将 CKB 转换成另一种实现形式的比特币。

  • 请记住,除了数据之外,Cell 还可以用来存储代码,因此 type 脚本也可以用来对 Cell 中的代码进行测试,确保代码正确。

简而言之,type 脚本可以用来存储 Cell 转换中所需要的任何验证逻辑,结合 CKB 虚拟机的灵活性,我相信它将提供无限的开发潜能。

lock 脚本

type 脚本用来存储 Cell 的逻辑转换,但是还缺少一件事情:如何保护自己的 Cell 不受其他人的攻击呢?换句话说,在这个瞬息万变的世界里,我如何才能确保我的 token 永远属于我呢?

这就是为什么我们需要设计 lock 脚本。只有当 lock 脚本能够成功执行时,才可以使用该 Cell。这与 type 脚本不同,type 脚本可能完全是可选的。而 lock 脚本总是需要用来保护 Cell 的安全性的。

通常,你会期望一个 lock 脚本包含一个签名验证,就像所有其他区块链所做的那样,当然 CKB 还将提供一些全新的解锁用例:

  • 实际的签名算法完全由 lock 脚本来决定,而您可以自由使用任何 lock 脚本。这意味着您可以自由地选择任何您需要的适合的签名算法。在官方发行的 CKB 版本中,我们将 secp256k1 作为默认的 lock 脚本。如果您想使用这个,并且有人用 schnorr 签名实现了一个 lock 脚本,那么我们非常欢迎您使用这个脚本。

  • 除了签名验证之外,lock 脚本还可以包含其他用于解锁 Cell 的规则。比如,如果一笔交易包含了一个使用了我的 lock 脚本的 output cell,但是它的容量大于我可以使用的 Cell,那么我可以通过配置我的 lock 脚本来进行容量传递。这样的话,当有人向我发送容量时,他们可以使用我现有的 Cell 为我创建一个新的 Cell。他们不需要像比特币那样为我再重新创建一个新的 Cell。

在我看来,CKB 最好的部分就是,社区创建的 lock 脚本与官方默认脚本的处理方式完全相同。官方脚本没有任何特权。与其他一些区块链项目不同,CKB 为整个社区提供了开发 CKB 脚本的完全自由。

运行模型

现在让我们看看是什么时候执行 locktype 脚本的。

回到例子

这是我们之前看到的交易:

file

在图中,执行流程如下:

  1. Lock Script 1 执行一次。
  2. Lock Script 2 执行一次。
  3. Type Script 1 执行一次。
  4. Type Script 2 执行一次。

在后面的文章中,我们可以看到 lock 和 type 脚本都在相同的环境中执行,并且都可以访问整个交易。如果任何一个脚本失败,整个交易就会失败。只有当所有脚本都成功时,交易才被认为是有效的。

有几点值得一提:

  • 尽管有 2 个带有 Lock Script 1 的 input cell,但它只执行一次,由实际的 lock 脚本来定位具有相同 lock 脚本的所有 input cell,并验证两个签名。

  • 在这个交易中只执行 input cell 中的 lock 脚本,例如:这里不执行 Lock Script 3

  • 即使 input cell 和 output cell 都包含 Type Script 1,也只执行一次。

  • 在 input 和 output cell 中都会执行 type 脚本,其中包括 Type Script 1Type Script 2

  • 有些 cell 没有 type 脚本,在本例中我们只是省略了执行。

规则

现在我们总结一下规则:

  • 在 input cell 中的 lock 脚本会被收集和解压,每个单独的 lock 脚本会被执行一次,并且只执行一次。

  • input 和 output cell 中的 type 脚本(如果存在的话)会被收集在一起并解码,每个单独的 type 脚本都会被执行一次,并且只执行一次。

  • 任何脚本失败,则整个交易验证失败。

下期预告

现在已经介绍了 cell 模型,我们将在下一篇文章中研究如何实际编写 CKB VM 脚本。将验证默认的 secp256k1 lock 脚本,来演示 CKB VM 脚本的使用周期。

加入 Nervos Community

Nervos Community 致力于成为最好的 Nervos 社区,我们将持续地推广和普 及 Nervos 技术,深入挖掘 Nervos 的内在价值,开拓 Nervos 的无限可能, 为每一位想要深入了解 Nervos Network 的人提供一个优质的平台。

添加微信号:BitcoinDog 即可加入 Nervos Community,如果是程序员请备注,还会将您拉入开发者群。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 有尝试过在交谈的中,没人听你讲话的的痛苦吗。 道理都懂,只是做起来就没有那么容易,老师一直都在告诉我们要学会倾听,...
    MrGowiy阅读 106评论 0 1
  • 快节奏的城市生活,每天熬夜加班生活,每天不规律饮食习惯,垃圾食品泡面掏空了多少年轻人的身心,透支了多少年轻人的健康...
    左半边翅膀_5be0阅读 359评论 0 0
  • 午加餐:糯米糕晚水果:橘子 参考目标: 1份豆2份肉3份“新鲜”水果4份谷物/薯5份蔬菜,深绿色叶菜最好6杯水 今...
    静趣_儿童心理师阅读 219评论 0 0
  • 每一个人心中一定住着一个她(他),人生一世是由无数记忆片段组成的,每个片段里都是会有人影闪烁,一声遇见的人...
    柳随风_骚青阅读 772评论 0 0
  • 安全感都是来自对事物有条不紊的提前安排,可是有时候真的是计划赶不上变化。 来看一次匆忙的决定后的行动吧。 春暖花开...
    石青记阅读 180评论 0 0