Nervos CKB区块链中的一等资产

文中提到的下面一些词,中英文是等价的:

  • state:状态
  • asset:资产
  • First-class:一等
  • Account:账户

从一等函数到一等资产

一等函数(First-class Function):函数编程中,函数可以赋值给一个变量,可以当做参数传递给另外一个函数,也可以从一个函数当做返回值返回。这时候函数和数据也没什么区别,所以我们叫它“一等公民(First-class Citizen)”。这样的函数就是一等函数。

CKB的Cell模型用来构建整个区块链的状态,Cell模型的设计是和目前区块链都不同的一种设计模式,从这个模式中,用户定义的加密资产就像“一等公民”一样。后面我们一步步详细解释。

状态模型

在解释CKB的状态模型前,有必要先了解目前常见的两种状态模型:

  • UTXO 模型
  • Account 模型

UTXO

UTXO全称是Unspent Transaction Output,比特币就是典型的一个例子,每一个UTXO可以看做是一个带有一定面值的单元,这个面值表示未来是可以花掉的,谁可以花掉它呢?这个面值的主人是在UTXO的锁定脚本(lock script)中指定的。

比特币区块链中,所有的UTXO是由全节点来维护的,当前所有的UTXO被称为比特币账本的当前状态。当有转账发生时,则一些UTXO的主人会发生变化。

UTXO模型

Account 模型

账户模型类似于我们现实世界中的银行模型,以太坊(Ethereum)和其它很多区块链都在用它。

有两种账户:外部账户和合约账户。

外部账户的主人一般是现实中的人,由人持有的私钥来觉得所有权;合约账户的主人是在合约的代码中指定的。

转账的时候,ETH会从转账人的账户余额中减掉然后加到接收人的账户余额中。

Account模型

First-class Coin

coin在UTXO模型中是一等公民,每个UTXO都有一个唯一的标识符。用户可以直接操作coin,操作coin的行为会被作为交易发送到网络中,会最终改变UTXO集合/状态。而UTXO中的账户概念只存在于钱包等应用中,他们实际上是用户可以操作的coin的总和。coin在UTXO模型中是First-class Citizen,所以可以被称为First-class Coin。

对于Account模型来说,Account是First-class Citizen,是用户直接交互的对象。如果用户想转账,那用户就会直接和Account这个object来对话。转账的时候会构造一笔交易,交易中有一个字段msg.value表明了转账的数目,这个value只是针对ETH而言的。因为ETH是一种资产(Asset),所以我们称ETH为First-class Asset。

对于用户自己定义的资产,比如我发了一个ERC20 token叫CatCoin,CatCoin这个资产存在于智能合约中,智能合约在这里更像是第三方账本,这个第三方的账本可能会是这样的,通过mapOwnerToBalance这样的数据结构来记录每个address所对应的余额是多少,然后每当转账发生时,我只需要修改这个数据结构就好了。

mapping (address => unit256) public mapOwnerToBalance;

我无法直接给你转10个CatCoin,因为上面提到的msg.value只是针对ETH而不能是用户自定义的资产。

因此ETH是First-class Asset,而用户自定义的资产不是First-class Asset。

CKB / First-class State

要保证First-class Asset,前提是Asset对应的state必须是First-class State。

Nervos CKB是一个具有全球共识的网络,通过把CKB的state划分成更小的单元可以更好的组织state,这个更小的单元叫做Cell,和UTXO类似每个Cell都有一个唯一的标识符,可以被引用或者作为参数传递到别的脚本。Cell在CKB中是First-class Citizen,这也说明了state在CKB中是First-class State。

First-class State

Cell包含四个字段:Capacity, Data, Lock, 和 Type。一个Cell的主人可以直接更新Cell的state,而对于Account模型来说是无法做到这一点的(只能通过合约的代码来实现)。

CKB很好地体现了一种基于状态的编程模型,这样的模型更加适合分层架构,Layer 1只是一个状态层,而不是计算层,把所有的计算都放到Layer 2去解决。

另外一个好处是,在CKB中不需要区分状态(state)和代码(code)了,状态和代码都可以存储到CKB中的data字段中,然后可以互相引用,如下图所示。

Code is Data,Data is Code

因此,再也不用像Account模型一样将状态和代码混合在一起去管理了,开发者可以直接加载data字段,根据data的属性进行解释,如果是代码就可以执行,如果是数据就可以进行读写操作。Simple and powerful!

在每一个Cell中都通过lock字段来指定Cell的所有者,因此让让状态所有权的表达更加容易。如果当前状态对应的是一个资产,那也让实现了First-class Asset。

CKB First-class Asset

First-class Asset

从上图我们可以看到,用户自定义的asset在系统中是一个独立的对象。每一个asset都是一个Cell,可以看做是UTXO模型的一种泛化。

CKB的First-class Asset模型有以下优点:

  • 资产的 Cell可以作为参数传入到其他合约中
  • 资产定义Cell和资产State Cell分开。资产定义的Cell是由资产发布者拥有的,而每一个资产Cell是由用户拥有的。所有权完全由Lock来定义,First-class Asset完全由用户掌控,而不是掌握在资产发行方或者合约中。
  • 解决了状态存储经济模型的难题。在以太坊的合约中,因为所有用户的状态都混合在一起,所以很难去要求每个用户支付存储费用,如果某个用户没有支付,那显然不能把整个合约删除。而对于Cell模型,整个Cell都是属于用户自己的,所以非常容易去收取这个费用。
  • 资产的定义可以非常容易地升级而对其它部分没有影响,因为数据和代码是分开的,资产定义和用户的资产所有权也是分开的。

总结

Cell模型是一个高度抽象的模型,不同于UTXO和Account模型。除了其特有的状态模型外,CKB也将计算部分从链上去掉,而只做状态的验证。相信这种特有的状态模型和计算-验证分离将开启新的DApp架构和设计模式。

文中提到的技术已经在Nervos CKB上实现出来了,感兴趣参考下面的链接:

本文主要翻译自 First-class Asset,另外还参考了:

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

推荐阅读更多精彩内容