CKB编程模型是带状态的图灵完备的编程模型,它基于自己的虚拟机和独有的Cell模型。CKB的编程模型主要包含状态生成、状态验证以及状态的存储。
在Nervos CKB的设计中,跟其他去中心化应用不同的是,基于CKB的去中心化应用,其状态的生成和验证是分离的。也就是说,状态的生成和验证在不同的地方执行,且可以采用不同的算法实现。将状态生成和验证解藕为系统的扩展性和应用的大规模采用奠定了逻辑的基础。
首先是状态在链下生成(例如本地客户端执行),新状态生成后会被打包到交易并广播到网络。CKB的节点在链上执行验证,输入相同的前置状态和用户输入,验证结果是否跟交易输出相同。客户端生成的新状态是交易的输出,也是CKB中提到Cell。Cell是CKB中最基本的状态存储单元,这在下文的Cell模型会提及。
CKB的状态生成和验证分离的设计有几个好处:由于交易输入的是链下生成的新状态(也就是结果),它无须在链上进行计算生成新状态(这跟多数公链不同),这样对应用来说,新状态是确定的,在链上进行的交易只是验证。此外,它还可以实现并行处理、实现更高效的资源利用(因为应用的逻辑被分离,且在不同地方执行)、更灵活的状态生成等。
接下来重点介绍Cell模型,这是Nervos独有的设计。
Cell是Nervos CKB中最基本的状态存储单元,用户可以在其中包含任意的状态,也是用户拥有的资产。Cell由容量、数据、类型脚本、锁定脚本字段组成。容量代表Cell的大小限制。数据主要是状态数据在Cell中的存储,它的总字节数不能大于Cell的容量。类型脚本就是验证状态的脚本,锁定脚本则代表了Cell的所有权。
Cell存储的是状态,也是不可篡改的,每个Cell不能同时作为两个不同交易的输入,一旦用户提供包含新状态的Cell,存储旧状态的Cell会被标记为历史数据。也就是说,所有包含新状态的Cell代表了CKB的最新共同知识。
由于拥有类型脚本和锁定脚本,Cell模型跟
比特币的UTXO模型和
以太坊的账户模型相比,更加通用。UTXO模型使用锁定脚本定义资产所有权,账户模型则根据余额来定义资产所有权。Nervos CKB通过类型脚本和锁定脚本的设计,带来一些好处,例如可以方便创建M-N多签脚本,实现多重签名;可以把闲置Cell租借给其他人,同时还拥有对Cell的所有权等。
最后是Nervos CKB的虚拟机。虚拟机是通过软件模拟的拥有硬件系统功能的完整计算机系统,它运行在完全隔离的环境中。CKB虚拟机用于执行类型脚本和锁定脚本,它使用的是标准的RISC-V指令集。
Nervos CKB虚拟机有两个值得关注的特色:一是,它是一个跟密码学操作无关的虚拟机;二是,它是一个面向硬件的指令集架构。这有什么好处?
跟以太坊不同的是,CKB虚拟机没有将任何密码学指令写死在CKB虚拟机上。比特币和以太坊都将密码学原语写死在协议中,如果需要新增密码学原语,只能通过软分叉或硬分叉方式实施。Nervos的CKB虚拟机能像普通脚本一样部署和使用新密码学原语。这样就带来了灵活性,例如dApp开发者可以在Nervos上使用新的加密技术,例如Schnorr签名、BLS签名、zkSNARKs等。
CKB虚拟机使用标准RISC-V指令集,也有利于其获得更多的产业支持。此外,RISC-V是面向硬件设计的指令集,有稳定的特性,利于在无须硬分叉的情况下实现与生态系统的兼容性。
最后,来看看Nervos的交易过程。交易的本质是状态的变化。Nervos的每笔交易都会导致Cell的转移或更新。每笔交易的状态变化要么全部成功,要么全部失败。交易包括依赖、输入以及输出。依赖是指提供验证交易所需要的只读Cell。输入则包含了Cell引用和证明。Cell引用指向交易中要被转移或更新的Cell;证明主要用于验证交易创建者交易权限。输出就是状态发生变化所产生的新Cell。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。