Cell 是 CKB 的状态储存单位,是更通用的 UTXO。在本篇文章中,Nervos 社区神秘人物张亚宁用通俗易懂的语言,为我们介绍了 Bitcoin 和 Ethereum 的账户模型,以及 CKB 的 Cell 模型。在他看来,Cell 就像一个被施展了魔法的盒子,在这个盒子之上,有着更多的玩法等着我们去发掘,快来一起探索吧!
UTXO: 只能存放数字的盒子
我们先从区块链鼻祖 Bitcoin 说起。Bitcoin 是一个点对点的电子支付系统,它的账户模型叫 UTXO,也就是未花费交易输出(Unspent Transaction Output)。
我们可以把 UTXO 看成一个带锁的盒子。是的没错,是一个盒子,而不是账本,不要慌。这个盒子里存放的是一个数字,用来表示这个盒子的面值。另外,这个盒子上还有一把锁,只有拥有对应钥匙的人,才可以打开这个盒子。在进行转账时,所有者使用钥匙打开锁,接着重新找到另外一个空盒子,将新的面额放进去,并配上一把属于接收者的新锁(私钥)。如此一来,我们可以将交易过程简单理解为「打开盒子,取出里面的钱,销毁原来的盒子,放到另外的盒子里」。
总结而言,在 Bitcoin 的账户模型中,盒子表示 UTXO,数据保存在 UTXO 中,而锁(私钥)用来表示所有权。
密码学实在是一项伟大的发明,它把物理世界锁的概念映射到了虚拟世界。
Account: 存放数据与逻辑的 ATM 机
在理解 UTXO 模型后,我们再来介绍一下 Account 模型,其中最出名的当属 Account 模型的首创 Ethereum。在 Ethereum 中 Account 模型存储的也是数据,不过与 UTXO 不同的是,Account 中除了数据还有逻辑。因此,相对于比特币脚本而言,他可以执行更丰富的智能合约。
以 ERC-20 的智能合约为例,我们也可以将它比喻成一个盒子,不过在这个盒子里存的并不是钱,而是一套复杂的逻辑和数字。与 UTXO 不同,Account 模型的盒子是一直被重复利用的,并且无法打开。就像在盒子的出厂设置时,我们就已经将一套逻辑写到盒子里,只留几个固定的按钮给外界,外界的用户只有在特定的情况下才能触发这些按钮。
Account 的特性就像一台 ATM 提款机,当我们需要转账时,就需要一张能够标示身份的银行卡,以及对应的密码,然后输入转账金额以及收款方等信息,最后点击转账。盒子在接受到这些信息之后,就会将对应的金额从转账发起方的余额中扣除,在收款方的余额中增加,并同步更新内部数据,用户的金额会一直保存在盒子中。熟悉编程的同学很快就会发现,Account 模型就是现实世界中的面向对象模型,具有图灵完备的性质。
在 Account 模型中,盒子负责保存逻辑和数据,并且借此更完备的执行智能合约。出厂设置将逻辑写入盒子后,就永远无法更改。若需要修改数据,只能通过外部的条件去触发。所有人的钱都会集中记录在盒子里,交易过程中,交易双方只需要输入交易信息即可,盒子负责处理和更新数据。
Cell Model: 被施展了魔法的智能盒子
接下来,我们要有请出本篇文章的主角 Cell 模型,也许现在你对它还很陌生,不过我相信很快你就能熟悉它的设计了。
Cell 是 CKB 的状态储存单位,我们也可以把 Cell 看成一个盒子。还记得我们之前提到的 UTXO 模型么?我们把它的概念全部照搬过来,再施加一点小小的魔法,就能变成我们的 Cell 模型。
UTXO 的盒子里存放的只是数字,而在 Cell 模型中,我们为每个盒子都带上了一套逻辑,也就是说,Cell 盒子里的数据不仅可以表示金额,还可以承载其他的信息和资产,比如虚拟猫咪等。
另外,UTXO 用的都是同一类型的普通锁,而在 Cell 模型中,用户可以 DIY 自己的锁,玩出不同的花样,比如可以是指纹或者刷脸的形式,是不是特别期待!
总结来说,Cell 模型是更通用的 UTXO 模型,它体现在两个方面:
1.Cell 模型中的锁可以 DIY;
2.可以在 Cell 模型的数据上施展魔法。
所以说 CKB 的 Cell 模型是继承 Bitcoin 简洁的 UTXO 模型,同时还吸收了 Ethereum 可编程的优点。
可能有人会问,Cell 模型这样的设计会有什么优点呢?我们该怎样更好的使用 Cell 模型呢?别着急,神秘的伙伴亚宁会在接下来的文章中,继续为大家讲解,让我们一起期待吧!
文:张亚宁
编辑:Kelly
?点击「阅读原文」,参与更多探讨~