查看原文
其他

打破 Nervos DAO 的流动性限制

Jinyang Jiang Nervos 中文社区 2023-04-21

自从在 CKB 经济模型白皮书中第一次接触到 Nervos DAO 时,我就一直在思考如何才能打破它的流动性限制。



Nervos DAO 的流动性限制



不知道 Nervos DAO 是什么的小伙伴可以先看看这里👇

Nervos DAO 是一个内置合约,可以让人们将 CKB 存入其中并获得补贴(以抵御部分稀释),并且通过对存储数据的用户收取「利息」来控制链上数据(不被任意)的占用。

Nervos DAO 是 CKB 经济模型设计的重要组成部分,更多内容您可以查阅 CKB 经济模型白皮书。

  • https://docs.ckb.dev/docs/rfcs/0015-ckb-cryptoeconomics/0015-ckb-cryptoeconomics.zh


一个典型的 CKB 持有者会选择以下策略之一来存储或使用 CKB:

  • 将 CKB 存入 Nervos DAO 并获得补贴,但用户在 Nervos DAO 锁定期内不能使用或花费 CKB
  • 在链上存储一些数据,每字节数据占用 1 个 CKB
  • 什么都不做,让代币稀释
  • 寻找其他方式赚取更多的 CKB:投资、借贷......

对于一个持有者来说,显然在 Nervos DAO 中存币是抵抗(部分)稀释最简单的方法。

但 Nervos DAO 有一个恼人的设计,就是限制了币的流动性:必须在存入 CKB 后的 N*180 个 Epoch 才能取出代币,也就是第 180 个 Epoch(约 30 天)、360 个 Epoch(约 60 天)、540 个 Epoch(约 90 天)……以此类推。

不幸的是(或者应该说「幸运的是」),CKB 是一个强大的编程平台。在这样一个强大的平台上,我们甚至可以写一个合约来打破 Nervos DAO 的流动性限制。


让我们来打破它👊



一个简单的想法浮现在我的脑海里,我们可以构建一个 UDT(用户自定义 Token)来「劫持」Nervos DAO。「劫持」并不意味着 Nervos DAO 中存在一些漏洞,我们所做的是创建一个代币来追踪 Nervos DAO 的补贴,这样我们就可以通过销毁相同数量的 UDT 来劫持(证明)Nervos DAO 中代币的所有权我将这个 UDT 合约命名为 DCKB。

DCKB 合约的运作模式如下:

  • Alice 在 Nervos DAO 中存入了 X 个 CKB,则该合约就会同样给 Alice 创建 X 个 DCKB
  • Alice 可以发送任何 DCKB 给任何人,就像发送其它 UDT 一样
  • 该合约在每一个新的区块高度创建 Y 个 DCKB(对应于 Nervos DAO 的补贴)给 Token 所有者
  • Alice 或其他任何人都可以通过销毁 X+Y 个 DCKB,来从 Nervos DAO 中提取 X+Y 个 CKB

主网启动后,我确认了 DCKB 的方案确实可行,于是花了一些闲暇时间实现了 DCKB 合约:

  • https://github.com/jjyr/DCKB



谁是 DCKB 的用户



Layer 2、DeFi 等基于托管方的合约

现在的智能合约或多或少都依赖于托管机制,如果 Layer 2、DeFi 项目允许 DCKB 作为托管资产,存款者则可以获得更多的利益,这将激励更多的人参与存管。

加密货币交易员

可以使用 DCKB 代替 CKB 来追求更好的收益。

作者和开发者

可以通过捐赠的方式获得 DCKB,从而获得 CKB。



Nervos 的经济模型已被打破?



是,也不是。

从某种角度来说,我们确实打破了最初设计中的一些假设。DCKB 实现之后,加密货币交易者可以在不牺牲流动性的情况下获得补贴,这消除了一些原本交易者应该承担的稀释(译注:交易者可以获得 Nervos DAO 中的 CKB 补贴,但同时也可以通过 DCKB 进行交易确保流动性)。

但同时,我们也给了 Layer 2、DeFi 的用户提供了更多的益处。在我看来,对于一个打着「Layer 1 for Layer 2」口号的区块链来说,
Layer 2 的用户是系统的重要贡献者,系统应该激励他们。

从另一个角度来看,DKCB 并没有打破经济模型的核心理念。CKB 经济模型的核心思想是限制对链上数据的占用,DCKB 并不会影响这一点。当用户创建 DCKB 时,同样数量的 CKB 将会被存入到 Nervos DAO 中,所以很明显,一个 DCKB 所有者不会占用新发行的 CKB,从而也不会存储链上数据。

我认为
DCKB 保留了 CKB 经济模型的核心理念,同时也扩展了它的潜力。


DCKB 是如何工作的



本文并不讨论 DCKB 合约的实现细节,所以我只对其中的核心部分进行说明。想要了解更多信息,可以查阅 DCKB 源码。

一个典型的 UDT 合约在 Cell 中包含一个 u128 数字来代表 Token 的数量。DCKB 使用一个额外的 u64 数字来代表一个区块高度。所以一个 DCKB cell 中包含了 amount 和 block number ,代表我们在区块高度 N 处有 X 个 DCKB。

我们假设 Alice 有两个 DCKB cell:

第一个 cell 在区块高度 N1 处包含 X1 数量的 DCKB,第二个 cell 在区块高度 N2 处包含 X2 数量 DCKB,且 N2 大于 N1

然后 Alice 将所有 DCKB 代币转移给 Bob:
  • DCKB 合约加载 N1 和 N2 区块的区块头
  • 应用 Nervos DAO 公式重新计算 N2 处的 X1 : dao_formula(X1, N1_header, N2_header)
  • 最后,验证在 N2 时的输出 cell 是 dao_formula(X1, N1_header, N2_header) + X2


现 状



现在,DCKB 已经可以在 Aggron Testnet 上运行啦!


  • DCKB GitHub repo
    https://github.com/jjyr/DCKB
  • 您可以使用分叉版本的 ckb-cli 来运行 DCKB,这里有一个快速启动文档
    https://github.com/jjyr/ckb-cli/tree/DCKB/src/subcommands/dckb
  • DCKB Wiki、文件和测试网部署情况
    https://github.com/jjyr/DCKB/wiki
  • 如果你是开发人员,可以看这里的合约部署状态
    https://github.com/jjyr/DCKB/wiki/Deployment-Status

在决定将 DCKB 部署到主网之前,我会继续收集更多的反馈,欢迎来 Nervos Talk 留下你的想法:
  • https://talk.nervos.org/t/dckb-is-available-on-the-aggron-testnet/4713


我也希望每一个优秀的 Layer 2、DeFi 项目都可以考虑让 DCKB 作为一种资产。




  



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存