在以前那篇突破NervosDAO 的流动性限制,我描述了一个可利用 NervosDao 中的 CKB 的解决方案。其基本思想是从 NervosDAO 创建一个衍生代币dCKB,并实时跟踪 NervosDAO 的利率,这样 dCKB 用户就可以将 dCKB 抵押到 Layer2 或 DeFi 项目中,并仍然可以获得 NervosDAO 的奖励。
但由于追踪 NervosDao 的利息是困难的,因此该解决方案并不实用。为了继续追踪 NervosDao 的收益,我们需要在每次交易时重新计算衍生代币 dCKB 的数量,计算销毁的 dCKB 并取回相应的 CKB 金额更为复杂。让 dCKB 得到加密钱包的支持也是不切实际的。
所以现在我提出了一个受限但更简单的解决方案,与旧的解决方案相比,它获得了一些优势,但也失去了一些能力。
在新的解决方案中,我们使用的不是扩展的 sUDT 格式,而是标准的 sUDT 协议去制造 dCKB,因此任何支持 sUDT 的协议或工具都可以轻松地利用我们新的 dCKB token。与旧协议相比,我们放弃了来自不同 NervodDAO 的 cell 可置换 token 的能力。
本文用词:
我们将CKB 的交易描述为: 输入+ [deps] =>输出。
存入 NervosDao:
cells => DAO + Meta cell
起初,我们将 CKB 存入 NervosDAO,并在同一交易中创建一个 Meta cell。 Meta Cell 数据是一个 uint64 的数字,这表示我们发出了多少dCKB。I 的起始值为0。
铸造 dCKB:
Meta cell + [DAO] => Meta cell + dCKB
我们使用 Meta cell 作为输入,生成 dCKB 的 sUDT cell, sUDT的管理员 lock 是 Meta cell 的 lock。Meta cell 的类型脚本确保我们发出的 token 数量必须小于 NervosDAO cell 中的 CKB 数量。
例如,NervosDAO cell 包含X CKB + Y的利息,我们已经发出了 i 个dCKB (i 是 meta cell 的数据,如果我们从未发行 dCKB 那就是0),然后我们可以发行 N 个 dCKB,他将满足 N+i< = X + Y Meta cell 的数据将会更新成 I' = N + I.
铸造 dCKB 可以执行多次,如果我们已经获得足够数量的 NervosDao利息,我们可以铸造新的 dCKB。注意 dCKB 就是一个 sUDT token,所以如果某钱包已经支持 sUDT,那么这个钱包也支持 dCKB。但是由于 dCKB 的所有者的 lock 是 Meta cell的 lock ,它是唯一的,每次我们创建一个NervosDAO cell,Alice 存入的 dCKB 'A,他将不能与Bob存入的dCKB 'B 有可互换性。这是我们为了简化协议而放弃的功能。因此,dCKB 的唯一用途是抵押进入 layer2 或 Defi 项目之中。
由于我们的 dCKB 就是 sUDT ,除了我们不能混合来自上面提到的不同 NervosDao 的 dCKB token 之外,我们也遵循相同的 sUDT 规则来交易 token。DeFi 或 Layer2 项目可以将 dCKB 视为具有与 CKB 相同的价值,以激励持有 NervosDAO CKB 的用户抵押,dCKB 用户可以自由地将 dCKB 到不同的项目,以追求更多的利润。
提取 NervosDAO cell:
dCKB + DAO + Meta cell => dCKB + custodian cell + CKB
此操作将 NervosDAO cell 转换为 custodian cell,并将 Meta cell 返回给存款人。 Custodian Cell 是一种暂时的 Cell ,它含有来自 Nervos Dao 的CKB。
Burn dCKB:
custodian cell + dCKB =>custodian cell + CKB
dCKB 持有人可以烧毁 dCKB,并从相应的custodian cell 获取 CKB。
销毁 custodian cell :
Custodian cell => cell
在烧毁所有 dCKB token 后,将 Custodian cell 转换为正常 cell 并送回给原 NervosDAO 存款人。
通过利用 sUDT 协议,我们提供了一种方法,可以轻松地将 dCKB 集成到已经支持 sUDT 的 Layer2/DeFi项目和工具中。
我们还通过消除旧 dCKB 的可互换性来简化协议,并将重点放在抵押的这个特性上。
优点:
缺点