[Aave系列]AAVE逻辑分析(存款、取款)

  • Decipher
  • 发布于 2023-01-02 23:55
  • 阅读 15

本文基于合约代码分析了Aave的逻辑,Aave是一个DeFi借贷协议,允许用户选择固定和浮动利率等各种选项来借用加密资产。文章具体描述了借贷和偿还的操作方法,并分析了Aave合约代码。

Aave: 另一个货币市场协议

开始

本帖基于合约代码分析 Aave 的逻辑。 AAVE 是一种 DeFi 借贷协议,用户可以选择各种选项(包括固定利率和浮动利率)来借用加密资产。在今天的帖子中,我们将整理关于贷款和偿还操作方法的具体细节,为此,我们将分析 AAVE 关于每个逻辑的合约代码。

[Aave 系列]

  1. Aave 逻辑分析(存款、取款)
  2. Aave 逻辑分析(贷款,还款)
  3. Aave 的 Key Value,闪电贷

作者

Decipher 的 Yong Suk Kim,资深 DeFi 研究员。 Seoul Nat’l Univ. 区块链学院 Decipher(@decipher-media)

术语整理

  • 用户:在 Aave 协议中供应、借入资产的所有参与者。可以是供应者,也可以是借款人。
  • 供应者:仅在 Aave 中存入资产的用户。可以收取“贷款”利息。
  • 借款人:通过 Aave 存入资产后借入其他资产的用户。必须支付“借款”利息。
  • 贷款服务:指 Aave 协议本身。提到 Aave 提供的服务时,称为“贷款”服务,而不是“借款”服务。
  • 贷款:从供应者的角度来看,是贷款服务的对象资产。例)收回贷款
  • 借款:从借款人的角度来看,是贷款服务的对象资产。例)偿还借款
  • 基础加密资产(underlying crypto asset):在 Aave 中转换为 aToken 之前的加密资产

aToken

用户可以在 Aave 中存入想要的加密资产,并以此作为担保借入加密资产。Aave 的运营逻辑总共可以分为 6 种,包括存款(deposit)、取款(withdraw)、贷款(borrow)、还款(repay)、清算(liquidate)、交换(swap)。Aave 在此过程中将使用的所有资产转换为 aToken 进行运营。

Aave 拥有对所有支持超额抵押贷款的基础加密资产的 aToken 合约。也就是说,分别存在关于 ETH 的 aETH 合约和关于 USDC 的 aUSDC 合约。Aave 的 6 种运营逻辑通过 LendingPool 合约来实现,根据用户的交易资产,在各自的 aToken 合约中发行(mint)或销毁(burn) aToken。简单来说,如果用户存入 ETH,LendingPool 合约的存款功能就会运行,并且 aToken 合约中的新 aToken 发行功能也会运行。

让我们通过简单了解各情况下 LendingPool 合约的运行方式来理解 aToken 的作用。

情况 1. 供应者将 ETH 存入 Aave 的情况

[deposit 函数运行]
// 1. 从供应者的钱包中将 USDC 发送到 Aave 的 LendingPool 合约
// 2. Aave 使用特定的交换比率将发送的 USDC 转换为 aToken,即 aUSDC,然后发送到用户的钱包

情况 2. 供应者从 Aave 中提取存入的 ETH 的情况

[withdraw 函数运行]
// 1. 请求 USDC 取款
// 2. Aave 使用特定的交换比率计算用户为了收到请求的 USDC 需要支付的 aUSDC 数量
// 3. 用户将计算出的 aUSDC 发送到 Aave 的 LendingPool 合约
// 4. Aave 将第 1 步中请求的 USDC 发送到供应者的钱包

情况 3. 借款人以存入的 ETH 作为担保从 Aave 借入 USDC 的情况

[borrow 函数运行]
// 1. 用户请求 ETH 借款
// 2. Aave 确认用户请求的 USDC 是否可以借给该用户
// 3. Aave 将用户请求的 USDC 发送到用户钱包

情况 4. 借款人将借入的 USDC 偿还给 Aave 的情况

[repay 函数运行]
// 1. 借款人请求 USDC 还款
// 2. Aave 确认借款人是否可以偿还 USDC
// 3. 借款人将借入的 USDC 发送到 Aave 的 LendingPool 合约

情况 5. 借款人更改借入的 USDC 的利率类型(浮动/固定)的情况

[swapBorrowRateMode 函数运行]
// 1. 借款人请求更改利率类型
// 2. Aave 确认借款人是否可以更改利率类型
// 3. Aave 更改借款人的利率类型

情况 6. 清算人清算借款人存入的 ETH 的情况

[liquidationCall 函数运行]
// 1. 清算人请求清算借款人存入的 ETH
// 2. Aave 确认是否可以清算借款人存入的 ETH
// 3. Aave 清算借款人存入的 ETH
// 4. Aave 向清算人支付报酬

存款[Deposit]

情况 1. 供应者将 ETH 存入 Aave 的情况

img

[deposit 函数运行]
// 1. 从供应者的钱包中将 USDC 发送到 Aave 的 LendingPool 合约
// 2. Aave 使用特定的交换比率将发送的 USDC 转换为 aToken,即 aUSDC,然后发送到用户的钱包

img

lendingpool.sol

摘要。将供应者存入的基础加密资产转换为 aToken 并发送到供应者钱包

如果供应者存入 100USDC,供应者将收到 100 aUSDC。

img

lendingpool.sol

查看合约,可以通过 DataTypes 了解关于 asset Token池的信息。可以通过 ValidationLogic 确认用户请求的值是否为有效请求。

Press enter or click to view image in full size

img

lendingpool.sol

与 asset 对应的 aToken。这里是与 USDC 对应的 aUSDC。例如,假设存入了 100 USDC,则会转换为 100 aUSDC 并进入用户的钱包。

img

lendingpool.sol

通过 UpdateState 更新当前状态。这是更新 asset 的种类和数量等的过程。

img

lendingpool.sol

这是将用户的 asset 发送到 aToken 的过程。向用户发行 aToken。

img

lendingpool.sol

如果是首次存款,则需要设置将 reserve 的 ID 用作担保的过程。之后,将按照最初设置的使用。

取款[Withdraw]

情况 2. 供应者从 Aave 中提取存入的 ETH 的情况

img

[withdraw 函数运行]
// 1. 请求 USDC 取款
// 2. Aave 使用特定的交换比率计算用户为了收到请求的 USDC 需要支付的 aUSDC 数量
// 3. 用户将计算出的 aUSDC 发送到 Aave 的 LendingPool 合约
// 4. Aave 将第 1 步中请求的 USDC 发送到供应者的钱包

img

lendingpool.sol

摘要。将 aToken 转换为供应者存入的基础加密资产并发送到供应者钱包

这次让我们看看供应者提取存入的 USDC 的过程。

img

lendingpool.sol

将 asset Token按照该 amount 的数量提取到 to。在这里,to 通常对应于 msg.sender。

img

lendingpool.sol

与要提取的 asset 对应的 aToken。例如,如果要提取 100 USDC,则 100 aUSDC 将转换为 100 USDC 并发送到用户的钱包。

img

lendingpool.sol

表示用户拥有的 aToken 的余额。

img

lendingpool.sol

最多可以提取到用户的余额。正在进行确认是否为有效的取款请求的过程。

img

lendingpool.sol

进行关于状态和利率的更新。

img

lendingpool.sol

如果提取所有余额,则用户将不再拥有作为担保的 asset。

img

lendingpool.sol

销毁 aToken 并将相应数量的 asset 发送给用户。至此,取款过程结束。

总结

[Aave 系列] 1. Aave 逻辑分析 — 存款,取款基于 LendingPool 合约详细分析了 Aave 服务的主要逻辑中存款、取款、借款、还款时运行的函数的功能和运行方式。

Aave 提供可以存入各种加密资产,并以此作为担保借入其他加密资产的超额抵押贷款服务。在这个过程中,存入的加密资产会转换为在 Aave 中运营的资产,即 aToken,并且其数量和利率由 Aave 中指定的逻辑决定。

下一篇文章将介绍 Aave 的贷款和还款。

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

0 条评论

请先 登录 后评论
Decipher
Decipher
https://medium.com/decipher-media