回归基础:Compound、Aave

  • kinaumov
  • 发布于 2023-06-11 12:23
  • 阅读 6

本文深入探讨了Compound和Aave这两个DeFi货币市场的基础知识,详细解释了它们如何运作以及背后的数学公式。文章还介绍了Aave的一些创新功能,如aTokens、闪电贷,并简要提及了Rari Capital和Euler Finance等其他项目,以及它们如何解决在Compound和Aave上架设任意资产的权限问题。

本文最初以 Twitter 帖子发布,你可以在这里查看。

Compound 和 Aave 为 DeFi 货币市场奠定了基础,了解它们背后的公式对于评估新的借贷产品至关重要。在本文中,我将总结它们的工作原理。尝试理解这些数学公式,它们很有趣。

虽然有些人可能熟悉这些借贷平台运作方式的一般概念,但很少有人能解释那些高深的公式。它可能会很快变得复杂,所以请随意暂停或跳过帖子的某些部分。

让我们开始吧!

最初,以太坊上的借贷是通过点对点市场实现的。然而,由于必须协商期限、抵押品和利率,将用户存款与借款请求相匹配效率低下。因此,p2p 借贷并没有获得太大的吸引力。

2018 年 9 月,Robert Leshner 和 Geoffrey Hayes 推出了 Compound,这是一种算法化的去中心化货币市场协议。Compound 允许用户从资金池中借贷,其中的利率基于资金池储备金的借出比例。

Compound 汇集用户的供应量,并按需借出。当用户存入资金池时,他们会收到一定数量的 ERC-20 cToken,这些 cToken 是对资金池总额的一部分的债权。当资金池赚取利息时,用户可以使用他们的 cToken 索取的金额会增加。

用户可以使用他们的 cToken 作为抵押品从协议中借款。资产具有不同的抵押系数,这些系数会定期通过治理进行调整。请查看 Gauntlet 最新的提案这里

用户的底层代币余额总额乘以抵押系数,就是他们的借款能力。当用户借入资金时,他们会锁定一部分 cToken,以便无法转移它们和/或赎回抵押品。

如果由于资产价格的波动,用户的未偿还借款超过了他们的借款能力,则另一用户可以偿还高达未偿还借款固定百分比的金额,以换取第一个用户的 cToken 抵押品(并有清算折扣)。

如果,比如说,所有存入的 USDC 都借给了借款人,并且有人想要提款,协议如何保持偿付能力?这完全在利率模型中。让我们深入研究一下公式。

首先,一个需要理解的重要概念是利用率。每个市场 (a) 的利用率 (U) 是给定资产相对于资金池中该资产总供应量的借出百分比。协议中的利率围绕利用率而变化。

借款利率是作为利用率的函数计算的,利用率由协议治理设置。对于大多数波动性较大的市场(如 ETH),借款人的利率是线性函数。

对于借款最多的资产(稳定币),该协议使用分段函数,该函数具有最佳利用率,超过该利用率,利率增长更快。在高 APY 下,用户有动力存入更多资金,从而确保始终有流动性用于提款。

在数学上,曲线看起来像这样。总借款利率由零利用率时的利率(截距)加上一个或两个利用率斜率组成。

提供给存款人的利率只是借款利率乘以利用率。这使得从借款人那里赚取的金额等于支付给存款人的金额。为简单起见,我在此处显示的公式不包括协议费用。

任何人都可以通过访问 https://compound.finance/markets 来查看不同代币的 Compound 利率函数

现在来讨论更复杂的内容。协议如何跟踪余额?

每次发生交易时,协议都会为借款人记录一个新的利率指数值。与其每隔一个区块刷新一次状态(消耗太多 gas),不如只对特定值进行时间戳记。

我们可以通过将旧的指数值乘以利率和经过的时间来获得新的指数值。因此,例如,我们从 1 的指数值开始,然后有 1 个月的 12% APY,然后有 2 个月的 6% APY,最终得到

1 * (1 + 0.12 * 1/12) * (1 + 0.06 * 2/12) = 1.0201

当发生交易时(如果资金池中没有任何变化,则利率是固定的),资产 (a) 的利率指数会使用经过期间的利息来更新,用 r * t 表示

给定资产 (a) 的未偿还借款总额已更新,以包括自上次指数以来产生的利息:

从此值中,我们可以计算出欠存款人的总金额,如

借款 + 现金 = 总存款

如果我们考虑进入储备金的费用,该公式会稍微复杂一些,但这超出了本文的范围。

从欠存款人的总金额中,我们可以得出给定用户的存款金额(包括应计利息),如

用户的存款 = 总存款 * 用户的 cToken / 总 cToken

给定用户 (x) 借入的金额与当时的利率指数一起存储在合约中的数据结构中。每次用户借款/还款时都会更新它。要计算用户当前欠资产 (a) 的金额,可以使用以下公式:

价格预言机维护平台上每种资产的汇率。这些汇率用于确定用户的借款能力和抵押品要求,确保他们不会借入超过允许的金额。

Comptroller 是 Compound 的风险管理智能合约。它确定给定用户需要维持多少抵押品,以及他们是否可以被清算。对于每个用户操作,都会要求 Comptroller 批准或拒绝交易。

Compound 上的治理决策由 Governor 智能合约通过 $COMP 持有者投票决定。$COMP 代币持有者可以将他们的投票权委托给自己或他们选择的地址。无耻的宣传:委托给 Penn Blockchain :)

Aave 最初于 2017 年以 ETHLend 的名义成立,在 ICO 中筹集了 1620 万美元,用于构建去中心化点对点借贷平台。它于 2020 年更名为 Aave,当时他们切换到流动性池模型。它们的设计比 Compound 的设计稍微复杂一些。

基本原理是相同的:用户存入资金,收到 aToken 作为回报,然后可以通过锁定他们的 aToken 作为抵押品来借入资金。但是,存在一些重要的差异。

首先,aToken 与 cToken 不同。与代表用户在存款池中份额的 cToken 不同,aToken 与存款金额的比例为 1:1。存入 10 DAI 会返还你 10 aDAI。那么,利息是如何累积的呢?

这是有趣的部分。1 + 1 不再等于 2。Aave 已经以某种方式更改了 aToken 的 ERC-20 合约,从而在没有任何传入交易的情况下,aToken 的余额会增长。

你的 aToken 余额由两个元素组成:一个 super.balance(父合约中的余额)和一个累积流动性指数,其工作方式与 Compound 上的利率指数相同。super.balance 是固定的,但该指数会随着每个 Aave 交易而增长。

这是 balanceOf 的实现以供参考。

请注意:ray 是一个小数,具有 27 位精度。Aave 将其小数存储在 ray 中。

转移函数的实现方式类似。如果你请求转移,你请求的金额将除以当前指数,并在父合约会计系统中转移。然后,接收者的余额为 superTransferAmount * Index = transferAmount

Aave 中利用率和利率的计算方式与 Compound 中相同,只是所有资产都具有目标利用率和分段函数。

正如你可能从图像中注意到的那样,Aave 引入了稳定的借款利率。稳定利率高于可变利率,并使用借贷利率预言机。稳定利率使用市场借贷利率,而不是固定的截距值。

从图形上看,Aave 货币市场上单个资产的借款利率如下所示:

通过使用可变和稳定借款利率,我们可以计算出资金池的加权平均借款利率和流动性提供利率,该利率用于通过利率 * 经过的时间来更新 aToken 中的指数。

Aave 引入的另一项新功能是闪电贷。闪电贷允许技术用户从储备金中借入任何金额,只要他们在同一交易中返还它加上费用即可。如果资金未返还,则整个交易将被回滚。

更多很酷的功能……在 v1 中,Aave 支持将利息支付重定向到另一个地址。虽然此功能已在 v2 中删除,但可以通过治理流程将其添加回来。

Aave 由 $AAVE 持有者管理。提案在论坛上讨论,然后提升到 Snapshot 投票,然后在 链上 进行投票。

LendingPool 合约是协议的主要合约,类似于 Compound 的 Comptroller。它持有每种存入资产的状态并处理基本逻辑。

通过 V3,Aave 引入了一些很酷的新功能,包括 Portal,它允许经批准的桥在源网络上烧毁 aToken,同时立即在目标网络上铸造它们,从而提高了跨链资本效率。

算法货币市场的问题在于它们不是无需许可的。人们不能只是将任意资产添加到 Compound 或 Aave,因为这会使协议面临破产的危险。攻击者可以无限地抬高资产的价格并借入所有流动性。

Rari Capital 旨在解决该问题。Rari 允许无需许可地创建具有任意资产的类似 Compound 的货币市场(Fuse 池)。用户接受资金池中资产的风险以获得更高的收益率,并且项目可以针对异国情调的资产进行借款。

Euler Finance 是一种非托管的半无需许可的借贷协议。它允许为任何代币创建借款/贷款市场,但限制了可以用作抵押品的资产列表。他们使用复杂的预言机风险分析策略来将抵押资产列入白名单。

货币市场是 DeFi 的流动性基础,每个新的 L1 链都需要自己的货币市场。由于许多新链与 EVM 兼容,因此大多数项目并没有重新发明轮子,而是直接 fork 了 Compound 或 Aave 代码。

我希望本文能够深入概述 DeFi 货币市场的工作原理,从而可以分析以太坊和其他链上较新项目的机制。如果你学到了一些新东西,请考虑在 Twitter 上关注我 @kinaumov :)

  • 原文链接: medium.com/@kinaumov/bac...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
kinaumov
kinaumov
江湖只有他的大名,没有他的介绍。