任何人都能支付的 cell —— 另类的智能合约

任何人都能支付的 cell —— 另类的智能合约

**
**

**
**

**
**

任何人都能支付的 cell

我们一直都在说 CKB 上的编程思路和在以太坊上的编程思路不一样,但是每次举的例子感觉又太过于复杂,今天拿一个比较好玩的又有用的例子和大家讲讲吧。

了解 CKB 的小伙伴应该都知道一个事情,那就是 1 CKB = 1 Byte,拥有 1 CKB 就拥有了 1 Byte 的状态存储空间。这个设定其实造成了一些问题:

情况 1:当前我们最小的 CKB 转账金额是 61 CKB。因为组成一个 CKB 上最小的存储单元 cell 需要 61 CKB (这是在我们采用默认的 secp256k1 加密算法的情况下)。

问题 1:我们怎么转给别人小于 61 CKB 的币?

情况 2:我们在未来接收 UDT (用户自定义代币)的时候,转账方需要转移的是整个 UDT cell。这就意味着其中既包含了正常转账的 UDT,还包含了创建这个 UDT cell 所消耗的 CKB。为什么这是个问题?比如,某项目方在 CKB 上对用户进行 UDT 空投时,如果空投 UDT 时必须包含 CKB 的话,成本将非常高,空投给用户的 CKB 可能比 UDT 还贵。

问题 2 :转账方如何只转 UDT,不转 CKB?

那我们要如何解决这两个问题呢?

我们可以引入一个 “任何人都可以支付” 的锁脚本来解决这个问题。

简单的说,就是收款方提前提供一个 cell 来供付款方使用。

别人都可以使用我的 cell 了,不会把我的 cell 中的 CKB 都偷走了吗?

的确,任何人都可以使用这个 cell,但是这并不意味着他人就可以偷走你其中的资产哦,让我们来看看这个特殊的任何人都可以使用的 cell 需要满足哪些基本要求?

1. 任何人都可以解锁

因为任何人都可能会向我付款,所以任何人都应该可以使用这个 cell。

2. 输出的 CKB 和 UDT 的数量必须大于等于输入的 CKB 和 UDT 的数量

这就保证了这个 cell 中的 CKB 和 UDT 是只能增长不能减少的,付款方只能往里面增加 CKB 或 UDT,而没办法在创建交易的时候取出其中 CKB 或 UDT。

3. 输入和输出前后锁脚本不能发生变化,如果发生变化,那么输出的锁脚本必须填写创建者的地址。

一种情况输入输出前后锁脚本不发生变化,那就继续维持当前 “任何人都可以支付” 的状态,此时这个新的输出的 cell 仍然是 “任何人都可以支付” 的 cell,并且依然遵守以上规则。

另一种情况就是创建者需要使用其中的 CKB 或者 UDT 了,那么此时在输出中,锁脚本(也就是收款地址)就必须只能填入创建者的地址,这个地址在创建者创建这个 “任何人都可以支付” 的 cell 时,就已经写入 cell 的数据中了,这样才能保证不会被其他人取走。

通过以上三条基础逻辑,我们其实就创建了一个 “任何人都可以支付” 的 cell。

此时任何人都可以向我支付任意数量的 CKB,不会受到 61 CKB 的限制;其他人向我转账 UDT 的时候,也不需要再额外转移存储 UDT 所需的 CKB。

整个过程其实就是在 CKB 上写了一个智能合约。

对,没错,这其实就是一个的智能合约。

让我们思考一下,在这个过程中,我们都看到了些什么?

CKB 是可以用来写入数据,验证数据的

之前和大家说 CKB 可以用来写入数据,有些小伙伴就反映到,这不就是 [IPFS/Filecoin/ 分布式存储] 吗?

CKB 不是分布式存储,关键的区别在于,分布式存储只有存储,没有验证,也就不会对其存储的数据形成共识。分布式存储里面存什么内容,是用户想存什么就存什么,不需要经过链上验证,不需要全网共识;而 CKB 内写入的数据,是需要满足逻辑验证的,满足智能合约设定,经过全网所有节点验证并达成共识的。

CKB 是可以实现智能合约的

可能是我们之前对于 Nervos 分层的设计提的比较多,然后也会强调 CKB 层需要的是安全和去中心化,我们用 Layer2 层去解决效率问题。

这让一些小伙伴误以为在 Nervos 中只有 Layer2 层,才是应用层,才可以开发 DApp,DeFi 等产品。

其实不然,目前 CKB 已经是一个非常不错的智能合约开发平台了,除去某些对于性能要求特别高的应用(目前我还没有在市面上看到这类应用),都可以直接在 CKB 上进行开发。

所以如果你是一名开发者,你根本不需要等待 Layer2,等待 Muta,CKB 已经准备好了。

类似的,我们还可以实现一些什么

我们已经有了 “任何人都可以支付” cell 的先例,那我们还可以实现什么?

只接收特定 UDT 的 cell (比如,只接收稳定币 UDT)

只接收特定地址的 cell (比如,募资时开白名单)

只接收 6 的整数倍个 CKB 的 cell (别人向我转账时,CKB 的数量必须是 6 的倍数)

等等等 ....

你还有什么奇思妙想?留言区告诉我。

任何人都能支付的 cell —— 另类的智能合约

**
**

**
**

**
**

技术文章

1. CKB 编程教程:https://docs.ckb.dev/blog/tags/script-programming
2. Open Transaction 系列头脑风暴:https://docs.ckb.dev/blog/tags/open-tx
Open Transaction 开放式交易,你一半我一半,我们共同组成一个完整的交易!
3. simple UDT:https://talk.nervos.org/t/rfc-simple-udt-draft-spec/4333
目前 CKB 上已经可以发行 UDT (用户自定义代币),有兴趣的小伙伴可以来尝试一下,一同探索新世界。

任何人都能支付的 cell —— 另类的智能合约

**
**

**
**

**
**

关于 CKB 网络

现在已有超过 43 亿 CKB 锁定在 Nervos DAO 中,当前锁定量超过当前 CKB 流通量的 30 %

任何人都能支付的 cell —— 另类的智能合约

(截取自:https://explorer.nervos.org/nervosdao

本周 CKB 算力现在已经基本维持在 2 PH/s

任何人都能支付的 cell —— 另类的智能合约

CKB 网络难度和哈希率

CKB 网络的叔块率目前已经稳定在了 2.5% 上下。

任何人都能支付的 cell —— 另类的智能合约

CKB 网络难度和叔块率

任何人都能支付的 cell —— 另类的智能合约

**
**

**
**

**
**

加入社区

戳下方二维码
加入 Nervos Community 欢迎留言
任何人都能支付的 cell —— 另类的智能合约任何人都能支付的 cell —— 另类的智能合约任何人都能支付的 cell —— 另类的智能合约

来源链接:mp.weixin.qq.com