存入 Nervos DAO 的收益如何

小白版

Nervos DAO 收益计算

你可以直接前往 Nervos 区块浏览器中的 Nervos DAO 页面 ,在上方的数据表格中,查看当前 Nervos DAO 的收益率,即其中的 预计 APC预计年化收益率)。

举例:此时,您打算存 100,000 CKB 到 Nervos DAO 中,存入 1 个周期(30 天),那么预计获得多少收益呢?

估算:100000 * 3.55 % / 12 = 295.8 CKB

根据当前预计年化收益率为 3.55 %,您存 100,000 CKB 到 Nervos DAO 中,存 1 个完整周期,那么您预计可以获得 295.8 CKB。

因为存在手续费和一些其他原因,实际收益率会略低一点点。

Nervos DAO 存取小妙招

妙招1:切勿单次存入金额过低

要理解为什么单次存入金额不能过低,我们首先要理解 CKB 的 Cell 模型,这里我们用一个盒子模型来解释一下:

我们首先把 Cell 想象成一个盒子或者是抽屉,而我们在存 CKB,存合约,存未来的自定义代币,存数据都是需要这样一个盒子的。

那么这个盒子是由什么做成的呢?

盒子本身就是由 CKB 做的。对,你没有听错,盒子就是由 CKB 做的!

假设,你的一个地址里面有 1000 个 CKB,其中有 61 个 CKB 需要做成盒子,然后用来装剩下的 939 个 CKB。你不要去管为什么是 61 个 CKB,你只需要知道目前做一个存 CKB 的盒子就是需要 61 个 CKB 即可。

所以你现在需要明白几件事情:

  • 目前不存在一个地址内拥有大于 0 个小于 61 个 CKB 的情况,因为这根本做不成一个最小的盒子。

  • 目前不管你是存 100 个 CKB 还是 10000 个 CKB,使用的都是由 61 个 CKB 做成的盒子。

  • 这 61 个 CKB 还能转出来吗?当然没问题,因为盒子都是 CKB 做的,只要把盒子拆了就好了。

在 CKB 上转账的过程,就是拆盒子和造盒子的过程,转入有几笔就是拆了几个盒子,转出有几笔就是又造了几个盒子。

好了,一旦你理解了盒子模型就简单多了,造一个 Nervos DAO 这样的盒子需要多少 CKB 呢?

至少需要 102 个 CKB。

而用于造 Nervos DAO 盒子的这部分 CKB 是无法获得 Nervos DAO 收益的,因此:

假设,你把 1000 个 CKB 存入了 Nervos DAO 的盒子,其中真正能拿到利息的,是 1000 - 102 = 898 个 CKB。并非是 1000 个 CKB。

所以单次存入 Nervos DAO 的金额切勿太小。如果你单次只存入 102 CKB 的话,不但存了很久一分钱收益都拿不到,还会因为需要支付交易手续费而损失一小部分 CKB。


妙招2:发起第一步提现请求,应尽量靠近定期时限

我们知道,存入 Nervos DAO 只需一步,而从 Nervos DAO 中取出则需要两步。

  • 第一步提现交易是将 Nervos DAO 存款单转换为 Nervos DAO 取款单。
  • 第二步提现交易是从 Nervos DAO 取款单中提取代币。

我们已经知道第二步提现交易需要发生在,存入时的区块高度 Epoch 数 + 180 * N 个 Epoch 之后。

那么实际利息计算的周期是多久呢?实际利息计算周期会在你发起第一步提现后结束。

举例1:假设你在 Epoch = 100 时,正式将一笔 CKB 存入 Nervos DAO,利息计算正式开始;

你在 Epoch = 105 时,进行第一步提现交易,利息计算随即截止,你只获得了 5 个 Epoch 的利息。

此时你需要等待 Epoch > 280(100 + 180) 时,才能正式发送第二步提现交易,最终将本金利息完成取出。

举例2:假设你在 Epoch = 100 时,正式将一笔 CKB 存入 Nervos DAO,利息计算正式开始;

你在 Epoch = 278 时,进行第一步提现交易,利息计算随即截止,那么你将获得 178 个 Epoch 的利息。

此时你需要等待 Epoch > 280(100 + 180) 时,才能正式发送第二步提现交易,最终将本金利息完成取出。

但是你需要注意,如果你是在 Epoch = 281 的时候,进行第一步提现交易,那么你需要在 Epoch > 460 (100 + 180*2) 时,才能发起第二步提现交易,正式将本金和利息取出。此时你只能获得 Epoch 100 ~ 181 的利息。

所以,为了收益的最大化,建议您发起的第一步提现交易,应该尽量靠近定期时限。

进阶版

Nervos DAO 收益的来源

首先我们需要明确 Nervos DAO 合约设置的原因和我们将 CKB 存入 Nervos DAO 所获得的收益的来源。

这就需要了解 Nervos 经济模型中关于「二级发行」的设定。二级发行的存在,可以将其视为对所有 CKB 持币者的收取了一份「通胀税」,而将 CKB 存入 Nervos DAO 合约的用户,则可以获得一部分二级发行的补偿,以弥补因为二级发行造成的稀释。

二级发行会根据 CKB 所处的三种不同状态进行分配(二级发行每年发行 13.44 亿 CKB):

  • 处于使用状态的 CKB。这部分 CKB 占总流通 CKB 的比例 * 二级发行量,给到矿工。

  • 锁定在 Nervos DAO 中的 CKB。这部分 CKB 占总流通 CKB 的比例 * 二级发行量,等比例给到 Nervos DAO 中的 CKB。

  • 处于流通状态,未被使用的 CKB。这部分 CKB 占总流通 CKB 的比例 * 二级发行量,目前暂定为销毁。

您可以在区块浏览器 Nervos DAO 页面,查看目前这个三个部分对应的二级发行的数量和比例。

如果您想了解更多关于 Nervos 经济模型的内容,请前往:Nervos 经济模型

Nervos DAO 收益的特点

当我们了解 Nervos DAO 收益的来源之后,我们可以发现:

Nervos DAO 的收益率 = 二级发行量 / 当前 CKB 总量 = 二级发行的通胀率

所以我们通常说,将 CKB 存入 Nervos DAO,这部分 CKB 即获得了「抗稀释」属性。我们还可以总结出以下几个特点:

  • Nervos DAO 的收益率是变化的,非恒定值。
  • Nervos DAO 的收益率和 Nervos DAO 中锁定的 CKB 总量无关。
  • Nervos DAO 的收益率随着 CKB 的不断发行,而缓慢递减。

Nervos DAO 收益具体计算规则

本节解释了在 CKB 区块头中 Nervos DAO 利息和相关字段的计算。

CKB 的区块头有一个名为 dao 的特殊字段,其中包含了使用 Nervos DAO 的辅助信息。具体来说,以下数据需按如下顺序封装在一个 32 字节的 dao 字段中:

  • C_i:截至区块 i(包含区块 i)系统中累积的 CKByte 发行量
  • AR_i:当前区块 i 的累积利率。AR_j / AR_i 表示一单位的 CKByte 在区块 i 中存入 Nervos DAO,并在区块 j 中取出的本息之和。
  • S_i:截至区块 i(包含区块 i)系统中累积的二级发行总和
  • U_i:截至区块 i(包含区块 i)系统中占用的空间之和。已占用的空间是用于存储所有 Cell 空间的总和。

以上的这 4 个值都是以 64 位未签名小端序数存储在 dao 字段中。为了保证足够的精度,AR_i 以原始值乘以 10 ** 16 的方式储存。

对于单个区块 i 来说,我们可以定义如下变量:

  • p_i:区块 i 应得的基础发行
  • s_i:区块 i 应得的二级发行
  • U_{in,i}:区块 i 中所有 Input Cell 占用的空间之和
  • U_{out,i}:区块 i 中所有 Onput Cell 占用的空间之和
  • C_{in,i}:区块 i 中所有 Input Cell 的 Capacity 之和
  • C_{out,i}:区块 i 中所有 Onput Cell 的 Capacity 之和
  • I_i:所有 Nervos DAO 的利息之和

创世块中初始值的定义如下:

  • C_0: C_{out,0} - C_{in,0} + p_0 + s_0
  • U_0: U_{out,0} - U_{in,0}
  • S_0: s_0
  • AR_0: 10 ^ 16

我们可以因此得出每个后续区块的累加公式:

  • C_i : C_{i-1} + p_i + s_i
  • U_i : U_{i-1} + U_{out,i} - U_{in,i}
  • S_i : S_{i-1} - I_i + s_i - floor( s_i * U_{i-1} / C_{i-1} )
  • AR_i : AR_{i-1} + floor( AR_{i-1} * s_i / C_{i-1} )

有了这些值,现在就可以计算出一个 Cell 中的 Nervos DAO 利息了。假设 Nervos DAO 的 Cell 在区块 m 中存入(即 Nervos DAO 存款单被包含在区块 m 中),用户在区块 n 中开始取款(即 Nervos DAO 取款单被包含在区块 n 中),Nervos DAO Cell 的 Capacity 总和为 c_t,Nervos DAO Cell 所占用的空间为 c_o。 Nervos DAO 利息的计算公式如下:

( c_t - c_o ) * AR_n / AR_m - ( c_t - c_o )

即该 Nervos DAO Input Cell 的最大总取款 Capacity 为:

( c_t - c_o ) * AR_n / AR_m + c_o

更多内容及案例,请参考 RFC-0023 Nervos DAO 的存入和取出