懂了嘛 | CKB互操作性2.0之Cell模型
本文也是抱着学习的态度进行整理和构思的,期望通过对比各大公链的基础模型,来达到了解和深入CKB的Cell的目的。以下将列举出比特币BTC的UTXO模型,以太坊ETH的Account账户模型,通过已有且被熟知的公链模型来引出CKB的Cell模型。可以说Cell模型是站在巨人(BTC、ETH)的肩膀上去远眺未来的数字经济之路,也是实现互操作性2.0的最基本的要求。
UTXO模型
先举个简单的例子。
UTXO就像是每个人手里面额不同的现金纸币,可能有1元的,5元的,10元的,100元的等等。
比如你作为一个买家买东西需要116元,你就得从钱包里找一张100元的,一张10元的,一张5元的,一张1元的,凑齐116元支付给卖家。
不过,你可能并不会碰巧有这几个面额的纸币。大多数情况下,你会拿出一张100元的,一张20元的,总计120元的现金纸币给到卖家。同时,卖家会找你4张一元的现金纸币。
以上就是现实生活中使用现金纸币的过程。这个过程和比特币网络的点对点的电子现金支付流程一模一样。UTXO就是那个面值不等的现金纸币,而你只有持有现金纸币才能去购买东西(也就是这些现金纸币所有权是你的才能花出去,你不可能去拿别人钱包的现金纸币)。
然而,现金纸币与比特币电子现金有一点微妙的区别在于:现金纸币在央行发行后,如果没有破损的话就会一直流通在市场中。比特币电子现金却是一直在销毁重铸,每个UTXO都是新发行出来的。所以,现金纸币在市场流通越旧就会越旧越破,比特币却实时在销毁发行,你接受到的比特币都是新发行出来的。
因此,在比特币网络中电子现金的支付会是将你手里的钱(UTXO)销毁,然后重新再发行新的钱(UTXO)。在这个过程中,只需要将新发行的钱(UTXO)的所有权给到对方,就完成了支付。但是,销毁的钱一定是大于等于新发行的钱。
以下是UTXO的技术细节:
UTXO:Unspent Transaction Output 未花费交易输出的简写
下图是交易中包含的输出CTxOut,其结构只有两个字段:nValue代表面值大小,scriptPubKey代表所有者(通常包含了所有者的公钥)。用户的“余额”是该用户的私钥能有有效签名的所有UTXO的总和。
字段nValue就是现金纸币中的面值,字段scriptPubKey就是现金纸币的持有人(所有者)。转账交易的过程就是不断销毁旧UTXO,重新发行新的UTXO,通过改变scriptPubKey的值从而更改资产(现金)的所有者。
下面引用Nervos(CKB)首席架构师谢含剑(Jan)对UTXO模型特点的总结:
1.硬币(资产/现金)是第一性的;
2.所有者是硬币的属性,每一枚硬币有且仅有一个所有者;
3.硬币不断的被销毁和创建;
Account模型
用生活中大家经常用的支付宝举例。
账户就是申请支付宝时候填写的用户名和密码,而大家一般都是用支付宝存钱、转账、支付、理财等等。所以,在一个账户里就会有余额,余额宝,花呗,借呗等等等资金类型。同时,大家会有各种的定期定投理财计划。
用支付宝来看以太坊的账户模型的话,支付宝app就是大家用到的各种数字钱包,账户的用户名和密码就对应了以太账户的公钥(地址)和私钥,各种类型的资金就如同以太坊上不同的数字资产,各种定投计划可以类比以太坊的智能合约。
以下是Account账户模型的技术细节:
Account:账户,是以太坊“共享状态”的抽象。每个账户都有一个相关的状态和一个20字节的地址。其中,以太坊账户分为以下两种类型:
1.外部拥有的账户
由私钥控制,并没有与之相关的代码。可以通过使用其私钥创建和签署交易,将消息发送到其他外部拥有的帐户或其他合约帐户。两个外部拥有账户之间的消息只是一个价值转移。但是从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种操作(例如转移Token,写入内部存储,创建新的Token,执行一些计算,创建新的合约等)。
2.合约账户
由合约代码控制,有与之相关的代码。不能自行发起新的交易。相反,合约帐户只能触发交易以响应其他交易(从外部拥有的帐户或其他合约帐户)。
除此之外,我们还要了解以太坊账户的具体细节。每个账户包含四个部分:
1.nonce:随机数,用于确定每笔交易智能被处理一次的计数器;
2.balance:账户目前的以太币余额;
3.storageRoot:账户的存储,Merkle Patricia树的根节点Hash值;
4.codeHash:账户的合约代码(默认为空);
其中,Merkle Patricia树是状态存储的地方,也是交易以及合约执行后状态更新的地方。
Cell模型
Cell就像是一个个的寄存柜,可以存储任何有价值的东西。这个柜子的大小形状,存储容量,物品的存储时间都可以自由改变。就连开锁解锁规则都可以由物品的所有者来自己制定。这一切灵活的功能都来自于Cell模型的设计以及底层灵活的密码学原语的支持。
以下是Cell的技术细节:
Cell是CKB上最小的资产单元,用于存储用户有价值的信息。这些有价值的信息,不仅仅简单的指数字资产(BTC,ETH),而是所有人们觉得有价值的,经过共识的数据。下图展现Cell在CKB网络中的意义:每个操作(Input,Output)的单元都是以Cell进行的。
Cell是一般化的“CTxOut”,其结构如下:
在Cell里面,nValue变成了capacity和data两个字段,这两个字段共同表示一块存储空间,capacity是一个整数,表示这块空间有多大(以字节数为单位),data则是保存状态的地方,可以写入任意的一段字节;scriptPubKey变成了lock,只是换了一个名字而已,表达的是这块共识空间的所有者是谁 - 只有能提供参数(例如签名)使得lock脚本成功执行的人,才能“更新”这个Cell中的状态。
总结
Cell在比特币UTXO模型上,进行了泛化和扩展。在保证资产作为第一性的原则下,使其支持智能合约等上层任何可扩展,可创新的模型。灵活而又具有想象力的Cell模型必然是实现互操作性2.0的必要基础要素。
Cell模型如同生物学的细胞一样,每天都在更新,每天都会焕发新生。Cell模型能如何使用演化,完全可以由你来创新和改造。
参考文献
理解CKB的Cell模型
以太坊白皮书
CKB的Cell模型是如何实现扩展性的?
另外,想听听大家的感受:
本文作者
游讯,17年冲入币圈,惨遭九四;20年手握CKB,准备起飞的少年,CKB铁粉。
CKB地址(欢迎老板们打赏呐~)
ckb1qyqvd3z249p5c0kxg0rf87m7mnjc9py372uq8aa5ph
这是一群由CKB铁粉自主打理的粉丝聚集地,分享关于CKB的一切。
如是你也喜欢CKB,也想分享对CKB的理解,欢迎公号后台留言,来投稿呀。
亲,据说99.9%有趣的人都点了「在看」👇