DeFi 利率指数:Compound V3 中的本金现值与现值

  • RareSkills
  • 发布于 2024-01-07 16:32
  • 阅读 178

文章详细介绍了Compound V3中的baseSupplyIndexbaseBorrowIndex机制,解释了它们如何跟踪借贷者的存款和借款,以及如何通过principal valuepresent value计算用户的余额。同时,文章还包含代码示例和图表,帮助读者更好地理解这些概念。

跟踪贷方存款的直观方法是记录他们存入的 USDC 数量和存入的时间。Compound V3 并没有这样做

相反,类似于 SushiSwap Masterchef Staking Algorithm,Compound V3 追踪自“始至今”借出的一美元的假想收益。(尚未熟悉该算法的读者应阅读链接资源)。

自“始至今”借出的一美元的假想收益记录在 baseSupplyIndex (在 CometStorage.sol 中)。它的行为非常类似于 Sushiswap 的“rewardPerTokenAccumulator”。它从 1.0 开始,每当发生改变状态的操作(存入、取出、借入等)时,它会根据经过的时间和该时间段的利率成比例地增加。例如,如果经过了 100 秒,利率为 0.001 每秒(尽管不现实,但易于理解),那么 baseSupplyIndex 将更新为 1.1。具体使用以下公式:

baseSupplyIndex += supplyInterestRatePerSecond(utilization) × secondsElapsed

baseSupplyIndex 唯一发生变化的地方是在 Comet.sol 第 403 行,在 accrueIndexIndices 内部。

accrueInterestIndices 函数

由于利率是利用率的直接函数,因此在高利用率时,baseSupplyIndex 增加得更快,而在低利用率时则增加得更慢。

以下假想图示显示了 baseSupplyIndexbaseBorrowIndex 根据利用率以不同速率增长。通常,借款人的利率高于贷方所得到的利率,因此 baseBorrowIndex 增加得更快。

利率指数与利用率的关系

以下示例说明该变量是如何使用的。

示例和术语

Alice在 baseSupplyIndex 为 2.5 时存入 \$1,000。她没有被记账为存入 \$1,000,而是被记为存入 \$400,即她的存款除以当前的 baseSupplyIndex(\$1,000 ÷ 2.5)。Alice在她的账户中有 \$400 的“本金价值”(黄色框)。这是 Compound 为用户存储的值 (CometStorage.sol)

userBasic 结构

如果她马上取款,Compound 会将她的余额计算为 \$400 乘以当前的 baseSupplyIndex,即 2.5,因此她将提取 \$1,000。Compound 将本金价值乘以 baseSupplyIndex 称为“现值”。

Compound V3 不会“记住”她原来的真实存款是 \$1,000。这是 隐含的,因为 baseSupplyIndex 当前为 2.5,而她的存款被记录为 \$400。

Compound V3 存储的“缩小”的或“向后缩放”的美元价值称为“本金价值”。当我们将本金价值乘以当前的 baseSupplyIndex,或“向前缩放”,我们得到“现值”。

来自传统金融背景的读者可能会发现 Compound 使用的“本金价值”和“现值”这两个术语有些令人困惑——我们建议不要试图将这些术语与它们的传统含义联系起来,只需接受 Compound 的用法即可。

如果她一直等待到 baseSupplyIndex 增加到 3.0,本金价值仍然是 \$400,但现值将增加到 \$1,200(\$400 x 3.0 = 1,200)。

示例现值的增长

在 [CometCore.sol](https://github.com/compound-finance/comet/blob/ma...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/