声音简介
这些协议在创建、使用和展示 NFT 的时候没有任何问题,但当要基于这些协议设计更复杂、更通用和更多样的功能的时候就都会遇到一个问题:实现起来有点困难。这里我们列举三个比较典型的功能:
1. 自定义 NFT 交易分成
2. 用 sUDT 或 ERC20 代币交易 NFT
3. 集齐某些 NFT 合成特定 NFT
实现不了的原因是这些协议一开始并没有朝着强可扩展性的方向去设计,当协议所能表述的功能范围无法覆盖项目方所需要的使用场景时,上述问题就会出现。虽然这些无法实现的功能可由项目方独立完成制作,但这也意味着不同项目之间就这些功能而言很难做到兼容。
那有没有更加通用的 NFT 协议去囊括以上这些(甚至更多)的功能呢?首先可以明确的是:这样的协议受限于 Nervos 和以太坊本身能支持的在合约设计上的自由度,于是这又引申出另外一个更 普遍 的问题:拥有不同编程模型的公链在设计 NFT 协议的时候是否有它们的理论极限?
就 Nervos 和以太坊而言,它们能支持的 NFT 协议设计的极限一时半会儿很难想明白,不过我们可以先从扩展现有的 NFT 协议(mNFT 和 ERC721)出发,在实现上述三个典型问题后,再用归纳法总结出一条规律,最后基于这条规律用演绎法推导出我们需要的理论设计极限。
在 CKB 网络中一个 Cell 可通过 TypeScript 来表示一个 NFT,那么更多的功能扩展就主要放在 LockScript 上。除了表明 NFT 所有权之外 LockScript 还将承载更多关于 NFT 交易相关的功能,当然不管是 LockScript 还是 TypeScript 都能通过 Witness 和 CellDep 再做一次扩展,只不过放在 Witness 中的数据只能在解锁阶段使用而无法被存储下来。
基于上述理论扩展 mNFT 协议以实现以下三个功能:
1. 自定义 NFT 交易分成
通过 LockScript 实现,假设 NFT 是用 CKB 来交易,那可以在 LockScript_Args 中设定针对创作者、买方和卖方三者的分成比例,买方在获得 NFT 所有权的交易中可以设定新的分成比例,对于修改分成比例的交易场景是需要买卖双方多签参与还是直接沿用 ACP 的逻辑,则完全由 LockScript 代码自由设定。
2.用 sUDT 代币交易 NFT
仍然通过 LockScript 实现,在交易中引入 sUDT 所属的 Cell 即可,然后其余的功能逻辑和《自定义 NFT 交易分成》基本完全相同。
3.用多个 NFT 合成特定 NFT
多个 NFT 合成一个 NFT 本质上是一个交易里有多个 NFT 在输入端,而只有一个 NFT 在输出端,对于如何配置这样的输入输出结构,就需要一个专门的规则来限制和说明:
我们发现,在设计这三个功能的时候完全没有修改 mNFT 的协议逻辑,通过为 Cell 编写特定的 LockScript 或组合特定功能的 Cell 或 CellDep 就可以做到在不修改原有协议的情况下实现功能扩展。
我们还能发现,针对上述三个功能而言,即使所有 NFT 的 LockScript 都为标准的 Sighash 合约,也可以通过直接在交易输入输出端引入规则 Cell 来实现这些功能,甚至还能实现更多功能,只要交易双方都对此交易进行了见证,那规则 Cell 对他们来说就是合法的。
音频列表
- 2021-06
- 2021-06
- 2021-06
- 2021-06
- 2021-06
- 2021-05
- 2021-05
- 2021-05
- 2021-05
- 2021-04
查看更多
用户评论