Libra 的天秤和 First-class Asset
6 月 18 日,Facebook 加密货币项目 Libra 发布的白皮书引起了区块链业内人士的广泛关注。Nervos 团队及社区伙伴们也对 Libra 进行了大量的讨论。
Nervos 合伙人王博认为:
所有讨论 Libra 是不是一个好货币,算不算货币以及 Facebook 搞的联盟链是不是真区块链的讨论都搞错了重点。Libra 白皮书第一句写得非常清晰「...为十亿人服务的金融基础设施。」货币只是金融基础设施的基础。有了 Move 智能合约,有了用户和基础资产,Libra 上将诞生有史以来摩擦最小的金融服务。会有些什么服务呢?余额宝、花呗、借呗、工资理财,等等。区别是这些服务很有可能是由全球化的第三方提供的,而且他们之间可以互相依赖:房贷可以在链上被分割成小额理财出售给其他用户。现在,Open Banking 刚有了个概念,API Bank 刚有了文档,针对它们的降维打击就来了。
区块链发展到现在展现了两个层面的独特价值。一个是资产的去中心化发行,就是所谓的传统公链价值。一个是金融的去中心化服务,它服务的对象可以是传统金融资产,比如货币,债券等。后者对世界的价值一点不比前者小。Libra 就是定位在后者的头部公链。
Libra 定位在金融基础设施,很准确很有价值。它可以大幅降低金融摩擦,为用户提供价值。
Libra 其中的一个亮点是提到了「First-Class Resources」这个概念,在 Move 编程语言的白皮书中这样写道:「First-class Resources 是一个非常普遍的概念,程序员可以使用实现安全的数字资产(的发行),还可以编写正确的商业逻辑来包装资产和实施访问控制策略。」
First-class Resources 翻译过来是「资源是一等公民」,在 Libra 中用户可以发行自己的资产,并且可以被用户及脚本直接引用和操作。
而关于这个概念,实际上 Nervos 架构师 Jan 在去年的文章《First-class Asset》中已经对这个概念进行了深入的分析。
First-class Asset
区块链上的底层模型设计,实际上就是分别以比特币和以太坊为代表的两种模型:
- 比特币的 UTXO 模型
- 以太坊的 Account 模型
而实际上二者的差异千差万别,代表了两种思路。
以太坊的 Account 模型和银行账户类似,在账户中记录用户的余额。账户是用户直接操作的对象,资产的转移是由账户作为用户的代理实现。但是当需要对用户定义的资产进行操作的时候,则需要引入第三方,即托管加密资产的智能合约执行资产转移流程。
而比特币的 UTXO 全名为「Unspent Transaction Output」,每个 UTXO 都是比特币,UTXO 中都通过一段锁定脚本(lock script)记录这个比特币的所有者,我们可以通过比特币脚本对 UTXO 进行编程实现部分业务逻辑,比特币就是一种「First-class Coin」。
而 Nervos CKB 中使用 Cell 模型进行构建,Cell 是一种通用化的 UTXO 模型,可以存储任意类型的数据,并在基于 RISC-V 指令集编写的 CKB-VM 加持下,能够实现更多的商业逻辑。Cell 可以被直接引用,作为参数传递给脚本,Cell 的所有者可以直接更新 Cell 中保存的状态,不需要经过任何的第三方。
通过 Cell 模型可以发行用户定义资产(User Defined Asset),可以这样来构造:
- 设计资产定义合约(Asset Definition),规定资产的主要约束(例如总数量,发行者,交易前后数量不变等)。
- 保存合约代码到 Asset Definition Cell 中。
- 在满足发行权限的情况下,发行者发行资产,并将资产状态保存在另外的 State Cell 中。State Cell 的 Type 字段引用保存了资产定义的 Code Cell,保证 State Cell 的变化受到资产定义的约束。
- Asset Cell 的持有者可以通过更新 Lock 来改变 Asset Cell 的所有者。
实现 First-class Asset 之后,我们能够做什么?
实现 First-class 之后,最大的区别就是:用户掌握所有权,能够对资产进行直接的操作,而不是如 Account 模型那样调用合约账户进行间接操作。
特别是,在不同区块链之间资产的迁移过程中,我们需要迁移的是资产而不是账户,这方面 Account 模型就受到了很大的阻力,比如知名的 Kelvin Fichter 提出的 EVM-On-Plasma 问题。
Asset Cell 可以被引用,可以直接作为其它合约的参数传入。只要引用 Asset Cell 的 input 有正确的用户授权,合约就可以正常的使用用户的 Asset Cell。
资产定义与资产状态分离。Asset Definition Cell 的所有者是资产的发行者,而 Asset Cell 是属于每个用户的。Asset Cell 的授权逻辑和业务逻辑分离,所有权完全由自己的 lock 决定,与 Asset Definition 的逻辑无关,这意味着 First-class Asset 不是托管在资产发行者、开发者或是资产定义合约的手中,而是真正完全属于用户的。
用户的资产相互隔离,用户资产状态独立,对经济设计问题带来了解决方案。公链的经济模型需要关注状态存储激励问题,用户在区块链上保存状态不仅需要支付写入费用,还应该承担与存储时间成正比的存储成本。在以太坊提出的状态租赁方案中,最大的痛点是针对用户的资产状态混合保存的合约(如 ERC-20)状态租赁收取,而在 Cell 模型中,只要 Asset Definition Cell 的 lock 逻辑允许,资产定义可以独立更新。
接下来我们还需要做什么?
除了通过 Cell 模型实现了 First-class Asset 以外,Nervos CKB 还将计算移到了链外,链上只需要对状态进行验证的逻辑。独特的状态模型和计算验证分离,这两点决定了未来在 Nervos CKB 上会出现新的、有趣的 DApp 范式。
从 CKB 白皮书完成到现在的一年半时间里,我们看到越来越多的人开始关注和讨论 First-class State 和 First-class Asset 这两种新的思路(虽然大家用的名词各自都不一样),这些进展让我们非常兴奋。如果你有兴趣对 First-class State 和 First-class Asset 进行更多的探讨,或是在 CKB 的编程模型上有什么有趣的想法,欢迎联系我们讨论:
https://talk.nervos.org
CKB 的代码已经完全开源,这篇文章介绍的内容在代码中都已经实现。欢迎给我们的代码提出各种意见:
https://github.com/nervosnetw... (CKB 上用 Ruby 脚本编程的示例,理解 CKB 上编程模型的最佳入口)
https://github.com/nervosnetw...
https://github.com/nervosnetw...
文:Ryan