现代DeFi 借贷协议 - Aave V3 是如何构建的

  • mixbytes
  • 发布于 2024-09-20 12:25
  • 阅读 432

这篇文章详细介绍了Aave V3协议的设计和实施细节,分析了其创新的供需模式和风险管理功能,包括新的风险参数设置、借贷逻辑以及反对价格操控的机制。文章的结构清晰,涵盖了各种技术细节,并对比了Aave V2和V3的变化,使读者能够全面理解Aave V3在DeFi领域中的重要性。

简介

现代借贷的轮廓中,缺少一个最重要的项目 - Aave,无法算完整。Aave 是一个顶级的借贷协议,拥有最高的 TVL,经过完全验证的安全性和有效性。Aave V2 是我们 DeFi 教育课程中“必学”的部分,因为它创新的供应和债务代币机制设计,以及其借贷池架构。现在,让我们来探索 Aave 下一次演变——Aave V3 的实现细节。

高层设计

Aave 协议的技术设计围绕着由协议治理管理的主要借贷池,以及一组可重置的供应和债务代币用于存储用户对协议的义务。核心借贷流程 - 借款/偿还/供应/提取 - 通过协议代币的铸造/销毁与用户配置位图处理。

Aave DAO 选择抵押品和债务资产,并定义其风险参数,这使得高风险或受损代币很难被引入到协议中。但市场上需要使用许多不同资产,具有不同的风险配置。为此,V3 引入了专业的供应/借贷模式以及具有可调风险参数的资产组合。与 V2 相比,V3 的一个重要增强是增加了这些模式。“隔离”模式将供应商限制为单一资产,并限制从特定的(主要是稳定币)代币中借款。另一个特性是“效率模式”,专为价格相关的资产设计,例如以相同的“基础”资产作为价格来源的资产。例如,与美元挂钩的稳定币或以以太坊为基础的衍生品。在这些情况下,可以调整风险参数,使得供应商和借款人更具盈利性,因为许多价格操控的风险被降低了。

这些模式减轻了在供应/借贷方案中将风险资产和“安全”抵押资产“混合”的风险,允许对“安全”市场增加资本效率,在市场中创造出稳定、可预见资产和波动性高、风险大的资产之间的明确区分。

与 Aave V2 相比,V3 提供了许多附加功能,使该协议更加灵活。Aave V3 启用跨协议桥接,允许在不同网络之间桥接代币,设置供应和借款上限(保护协议免受大规模攻击),将风险管理委托给专门的代理和 DAO,实施可变清算关闭因子(允许对接近破产的头寸进行完全清算),提供多种奖励代币,以及许多在 白皮书 中详细描述的其他功能。

Aave 的主要程序围绕可重置的协议代币展开,而没有直接的“每用户”结构来管理头寸。当用户供应资产时,他们会收到 ATokens,而借款时会获得不可转让的债务代币。额外的“每用户”配置包括对抵押/债务资产的启用/禁用位以及其他配置选项。

核心

Aave V3 的主要合约是 Pool.sol 合约,其中包含借款/供应/清算/闪电贷和其他功能的入口点。它还包含一系列用于 ACLs(访问控制列表)、地址管理、协议代币、预言机合约、奖励管理控制器等的合约。这些合约的结构在 文档 中有进一步的说明。

Aave 设计中的第一站当然是 AToken。这个代币展示了一种设计,允许利息直接“在”代币余额中积累。AToken 的关键特性是其 balanceOf()totalSupply() 函数,显示每个代币持有者和总供应不断增加的余额。这种方法与 Compound 的做法不同,在 Compound 中,CToken 的余额保持 不变,利息是单独计算的。使用可重置的供应和债务代币可以方便地计算协议储备和债务,避免过多的乘法,并允许供应代币在不同地址之间移动而无需额外的逻辑。

在债务代币方面也采用了相同的方法:在 StableDebtToken.solVariableDebtToken.sol 中的 balanceOf() 函数包括复利利息。研究这些函数可以深入理解 Aave 中如何运作的稳定和可变借款利率。

[注意] StableDebt 代币已不再由 Aave 支持,根据治理的 决策

Atoken 合约(针对每个基础资产:WETH、DAI 等)也持有基础资产的余额(WETH、DAI 等)。铸造/销毁 ATokens 的过程还涉及将基础代币进出协议。这使得基础余额彼此保持分离,并降低了与通过单一合约持有所有代币余额相关的风险。

Aave V3 协议的主要逻辑部分位于多个 中。这种方法增强了代码的可组合性,使每个逻辑组件能够单独测试,而无需为每个测试完全初始化协议,这对开发和代码分析非常有益。

借款/偿还

借贷逻辑在 BorrowLogic.sol 中概述,并通过 executeBorrow() 函数执行。在对借款可能性进行了全面的 验证 后,债务代币被 铸造 到用户的地址,并将基础资产 转移 给用户。与任何修改协议储备的函数一样,借款也会 更新 市场利率,以反映新的储备金额。

executeRepay() 函数中的偿还逻辑在许多方面“镜像”借款,但有一个有趣的特征:它允许使用不仅是基础代币,还使用供应的 AToken 来偿还债务。如果借款人已经使用了借入的代币,则无需从其他地方获取这些代币——他们可以使用他们的供应来偿还债务。

V3 还实现了一项由治理设置的借款上限 限制,这对于保护协议免受利用预言机价格操控、闪电贷和巨额资金使用的大规模攻击至关重要。

供应/提取

供应逻辑在 supplyLogic.sol 库中通过两个函数详细说明:executeSupply()executeWithdraw()

在 Aave 中进行供应涉及到铸造 AToken 并 更新 市场利率以反映新的储备金额。提取过程也是对供应的“镜像”过程,销毁 ATokens 而不是铸造。然而,还有一...

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

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

0 条评论

请先 登录 后评论
mixbytes
mixbytes
Empowering Web3 businesses to build hack-resistant projects.