Aave V4 引入了以 Hub 为中心的架构,从而实现协议的灵活性和资金效率。
Aave V4 引入了一种以 Hub 为中心的架构重塑,从而实现协议的灵活性和资本效率。这种创新架构允许 Governor (例如,Aave DAO) 动态管理 Spoke,在无需进行昂贵的流动性迁移的情况下,添加新的借贷能力和删除过时的借贷能力。
该协议通过其流动性溢价系统实现了复杂的风险管理,其中每种资产都会根据资产的隐含波动率、市场状况、流动性、风险等,获得一个从 0 到 1000_00 (BPS) 的动态风险因子(称为 Collateral Risk)。这种细化的定价机制为高质量抵押品(例如 ETH)引入了基本利率,同时根据 Collateral Risk 状况按比例调整借贷成本。
通过为更强的抵押品提供优惠利率并优化资本效率,Aave V4 创建了一个更强大的贷款环境,可以准确地对风险进行定价和奖励。因此,该协议吸引了更高质量的抵押品,同时为供应商提供了更高的收益,并为使用更安全抵押品资产的借款人提供了更低的费用。
Aave V4 为流动性管理引入了 hub-and-spoke 模型。Hub 协调流动性,而 Spoke 处理特定于资产的借贷。
%%{init: {"theme": "dark"}}%%
flowchart TD
%% Nodes
LP[Liquidity Providers]
BR[Borrowers]
S1[Spoke 1]
S2[Spoke 2]
S3[Spoke 3]
HUB[Hub]
%% Edges
LP --> S1
LP --> S2
BR --> S2
BR --> S3
S1 --> HUB
S2 --> HUB
S3 --> HUB
%% Styling (optional)
classDef box fill:#0b0b0d,stroke:#e5e5e5,stroke-width:1px,color:#ffffff;
class LP,BR,S1,S2,S3,HUB box;
Spoke 是可以连接到一个或多个 Hub 的单个模块。它们根据储备配置和可用上限将用户操作(供应/提取和借用/偿还)路由到适当的 Hub。每当在 Hub 上恢复流动性时,Spoke 必须支付基本利息(由 Hub 级别的利率策略决定)和风险溢价(由触发操作的用户的抵押品组成决定)。
一个 Hub 可以有数量不定的 Spoke,每个 Spoke 贡献于未偿还债务总额和产生的利息。Hub 管理基本会计(总流动性与可用流动性)、利率以及提取和供应上限等参数。
Hub 是不可变的,并且是 Aave V4 中流动性管理的中心协调器。该设计允许多个 Hub 存在,每个 Hub 监督其自己的一组 Spoke。每个 Hub 都为其 Spoke 设置供应/借用上限,并执行关键的会计不变性。设计目标是使 Hub 尽可能简单。
Hub 的关键方面包括:
Spoke 是可升级的,并且是主要组件,负责促进 Aave V4 生态系统中特定资产的借贷功能。它们可以注册到 Hub 中,并且可以从中提取(借用)流动性。Spoke 的性质不是特定的,可以是任何东西:基于加密货币的、基于 RWA 的、基于 DEX-LP 的等等。
用户与 Spoke 交互,然后 Spoke 直接与 Hub 交互。Spoke 管理以下方面:
reserveId,不同于 Hub 中的 assetId,以便允许特定于 Spoke 的配置。每个用户的债务利息都直接受到用作抵押品的资产质量的影响。用户抵押品资产的风险等级(质量)决定了借款的额外费用,该费用高于资产的基本利率(即资产的提取利率)。
Collateral Risk $CR_i$ 由资产 $i$ 的质量指定,这是一个 BPS 值,范围从 0 到 1000_00。值为 0 表示最高质量和无风险,而值为 1000_00 表示抵押品的最低质量和最大风险。
此参数是可配置的,并且是 Spoke 风险参数的一部分。这意味着相同的资产在不同的 Spoke 中可以具有不同的 Collateral Risk 值。
$CR_i$ 是资产 $i$ 的 Collateral Risk
User Risk Premium $RP_u$ 代表用户 $u$ 用于借款的抵押品资产的质量。它取决于多个动态参数:
理想情况下,User Risk Premium 将持续更新以反映其动态性质,确保其始终是最新的并与用户头寸的最新状态保持一致。但是,由于 EVM 区块链的限制,这在技术上是不可行的,需要通过链上交易进行持续更新。相反,仅当用户执行某些影响抵押化的操作时,才更新 User Risk Premium。用户还可以通过其自身头寸的权限自由触发更新 (updateUserRiskPremium)。此外,头寸管理员或 Governor 可以在特定情况下触发已授权的更新。如果用户保持不活动状态,则其 User Risk Premium 将保持不变。例外情况是,即使在没有用户交互的情况下,Governor 仍有权强制更新给定用户的 User Risk Premium,以匹配其抵押品资产的最新风险参数。这在特定用户头寸在交互之间累积了额外风险的情况下尤其重要。
$RP_u$ 是用户 $u$ 的风险溢价
用于计算给定用户头寸的风险溢价的算法遵循以下步骤,目的是找到足够的抵押品资产的相应金额,以基础货币来支付该头寸的债务。然后计算这些抵押品资产的 Collateral Risk 的加权平均值,以产生 User Risk Premium:
按 Collateral Risk 对抵押品资产进行排序(升序): 按风险值升序对抵押品资产进行排序,从风险最小(Collateral Risk 最低)到风险最大(Collateral Risk 最高)。
计算总债务: 以基础货币(totalDebt)计算用户的总债务价值(包括利息)。
迭代抵押品资产 以计算足以支付用户头寸总债务的抵押品资产总额,利用辅助变量 coveredDebt 将其初始化为 0:
a. 计算 remainingDebt = totalDebt – coveredDebt。
b. 如果 remainingDebt ≤ 当前抵押品资产以基础货币提供的金额:仅使用该部分抵押品并中断。
c. 如果 remainingDebt > 当前资产的价值:完全包括该资产,将其添加到 coveredDebt,然后继续。
计算包含的抵押品资产及其金额的 Collateral Risk 的加权平均值。
计算抵押品资产价值加权平均值的公式:
$RP_u = f(CRi, C{u, i}, Pi) = \frac{\sum{i=1}^n CRiC{u, i}Pi}{\sum{i=1}^nC_{u, i}P_i}$
示例 1: 第一个抵押品资产的价值与用户的总债务价值相符:
$RP_u = f(CR0, C{u,0}, P_0) = CR_0$
示例 2: 第一个和第二个抵押品资产的总价值与用户的总债务相符。
$RP_u = f(CRi, C{u, i}, P_i) = \frac{CR0C{u,0}P_0 + CR1C{u,1}P1}{C{u,0}P0+C{u,1}P_1}$
在操作上,溢价是通过额外的虚拟债务份额(“溢价份额”)来实现的,这些溢价份额会增加利息的累积,但永远无法偿还本金。我们通过在资产单位中跟踪益价抵消来将此组件与本金利息分开。在借款时,抵消设置的值在资产方面恰好等于溢价份额的价值。随着时间的流逝,溢价份额会产生利息,从而导致其资产价值超过抵消;超额部分是溢价。益价份额以份额单位计。益价抵消以资产单位计。
用户在任何时候的应计溢价债务等于其溢价提取份额的资产价值减去溢价抵消。在用户操作中,此应计金额将移至已实现的溢价变量,并且溢价提取份额和溢价抵消都将被重置,因为用户的风险溢价可能会发生变化,并且必须重新校准会计。
每个借款头寸的利息都分为两个同时以 Hub 的提取利率累积的流:提取债务流根据本金累积(反映 Hub 流动性的利用率),从而产生资产 $i$ 的基本利率 $R{sbase,i}$。溢价债务流根据溢价份额减去抵消累积。溢价债务流反映了头寸抵押品的质量组合,由风险溢价 $R{sbase,i}RP_u$ 决定,其中 $RP_u$ 是用户 $u$ 的溢价。
产生的基本债务和溢价债务的总和给出了预期的利息总累积,使得资产 $i$ 的用户 $u$ 的债务 $D{u,i}$ 以利率 $R{u,i}$ 增长。
$D{u,i} = D{u,ibase} + D_{u,ipremium}$
这种分离纯粹是内部的,并且与用户的角度隔离;用户只会看到他们的总欠款额以更高的利率 $R_{u,i}$ 增加。
基本债务是指用户未偿还借款头寸的核心部分,该部分与从 Hub 提取的实际流动性相关。当 Spoke $s$ 中的用户借用资产 $i$ 时,系统会将此借款金额记录为用户的基本债务。
$D_{u,ibase}$ 是用户 $u$ 借用的资产 $i$ 金额
这表示 Hub 代表用户向 Spoke 提供的本金流动性。在借款时,用户的基本债务等于借款金额。
随着时间的流逝,基本债务以 Hub 的基本借款利率策略 $R_{sbase,i}$ 累积利息。这意味着随着时间的推移,应计的基本利息将添加到用户的基本债务中,从而增加了用户欠协议流动性提供商的特定资产的金额。
$D{u,i} = D{u,ibase} + R{sbase,i}D{u,ibase}$
$R{sbase,i}D{u,ibase} = ΔD_{u,ibase}$
溢价债务是用户债务的一部分,表示由于用户抵押品资产的质量(即,在其基本利率之上的风险溢价)而累积的额外利息。
$D_{u,premium}$ 是用户 u 产生的额外利息的运行总计
与基本债务不同,高级债务并非源于从 Hub 提取的实际资产;相反,这是一个账面分录,用于跟踪由于 User Risk Premium 而导致用户欠款的额外金额。
$D{u,premium}= D{u,premium} + R_{sbase,i}RPuD{u,ibase}$
$R_{sbase,i}RPuD{u,ibase} = ΔD_{u,premium}$
V3 的主要风险方面的限制之一在于其每个资产的单一全局风险配置。这种设计会产生大量的治理开销,并且通过意外清算给用户带来潜在的危害,因为任何参数更改(特别是降低清算阈值)都会立即影响每个未平仓头寸。
V4 使多个风险配置可以并排存在。每当 Governor 调整抵押参数(当前是抵押因子 (CF)、清算奖励 (LB) 或协议费用 (PF))时,协议都会添加新配置而不是替换旧配置。较早的配置继续管理在这些配置下开立的头寸,而更新后的参数应用于新头寸。在可能对协议产生负面影响的特殊情况下,Governor 可能会决定对现有头寸进行授权触发更新到最新参数。
每次 Governor 调整抵押参数时,它都对应于一个新配置。这些配置存储在一个有界字典中,该字典最多包含 16M 个条目 (2^24),由增量键标识,每个储备都保存指向当前活动配置的键。
每个用户头寸还存储该头寸承担风险时对应的活动配置的键。每当用户执行特定操作时,都会刷新此键,但即使在用户交互之间的动态风险配置发生更改,也可能继续引用先前的配置。
动态配置键允许参数更新,而不会影响现有的未平仓头寸。Governor 保留更新旧密钥参数的能力。但是,在正常操作期间,系统会在用户交互时进行更新,而无需治理干预。
动态配置使用每个储备映射扩展了储备模型,该映射保存每个历史配置密钥,该密钥由 configKey 引用。抵押参数现在位于动态映射中,而不是静态储备记录中;此集合包括 CF、LB 和 PF。
每个储备都存储最新的 configKey,该密钥代表当前的最新风险配置。相反,每个用户头寸都保留一个活动 configKey 的快照,该快照对应于其上次风险增加事件发生时生效的配置。只有当用户执行增加系统风险的操作(例如禁用资产作为抵押品、提取或借款)时,才会刷新所有用户头寸的跨资产快照。当用户将新资产指定为抵押品时,只会刷新所使用资产的 configKey 快照。
当用户尝试降低健康系数的操作时,引擎会检查该头寸中每个抵押品的最新配置。如果该头寸在此配置下仍然可持续,则引擎会将快照重新绑定到此最新密钥,并允许该操作继续进行。但是,如果最新配置会使该头寸抵押不足,则引擎会通过恢复来阻止该操作。
动态配置的架构带有几个集成商和 Governor 应注意的实际限制和行为。以下几点详细说明了其中一些机制。
configKey 当前定义为 uint24 (最多 16M 个活动配置)。disableUsingAsCollateralenableUsingAsCollateral 仅刷新所使用资产的 configKey 快照。borrowwithdrawsupplyrepayliquidationCall 因为清算总会改善用户头寸的健康状况updateRiskPremiumaddDynamicReserveConfig 创建一个新的风险配置并增加最新的 configKey。创建或随后更新的用户头寸会绑定到此最新的 configKey。updateDynamicReserveConfig 更新先前的配置,从而影响绑定到该 configKey 的现有头寸。updateUserDynamicConfig 将其快照更新为所有抵押品储备的最新 configKeyAave V4 引入了一种重新设计的清算机制,该机制取代了 V3 中使用的固定平仓因子逻辑。V4 允许清算人仅偿还足够的债务并仅扣押足够的抵押品,以使借款人的健康系数 (HF) 恢复到可配置的目标健康系数 (TargetHealthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD),而不是始终扣押用户债务和抵押品的固定百分比。该机制采用荷兰式拍卖风格的可变清算奖金。它还实施了针对“dust”的保护措施,以确保清算不会导致剩余的 dust 抵押品或债务,除非相应的债务或抵押品储备已完全清算。这些更改旨在改善用户体验并减少协议层面的坏账几率。
healthFactorForMaxBonus 和 liquidationBonusFactor。Aave V4 公开了几种影响清算的可配置参数:
| 参数 描述 约束 | ||
|---|---|---|
TargetHealthFactor |
由 Governor 设置的 Spoke范围值,表示借款人在清算后应恢复到的 HF。在正常情况下,清算人仅偿还足够的债务以达到此 HF,这不会导致剩余的抵押品或债务成为 dust。 | 必须 ≥ HEALTH_FACTOR_LIQUIDATION_THRESHOLD 常量。 |
DUST_LIQUIDATION_THRESHOLD |
硬编码阈值,用于防止极小的剩余债务。可以清算的最大债务已增加,以确保剩余的债务或抵押品 dust 不低于此阈值,除非相应的抵押品或债务储备已完全清算。 | 硬编码常量,设置为基本单位 1_000 美元。 |
maxLiquidationBonus |
每个储备定义的最大抵押品清算奖金,以基点 (BPS) 表示。值为 105_00 表示,以基础货币偿还的债务金额多扣押了 5_00 额外抵押品。 | 必须 ≥ 100_00 |
healthFactorForMaxBonus |
Spoke范围值,以 WAD 单位表示,定义了应用最大奖金的 HF 以下的范围。它必须小于或等于 HEALTH_FACTOR_LIQUIDATION_THRESHOLD,以避免被零除。 |
healthFactorForMaxBonus < HEALTH_FACTOR_LIQUIDATION_THRESHOLD。 |
liquidationBonusFactor |
Spoke范围百分比(以 BPS 表示),指定了在阈值 HEALTH_FACTOR_LIQUIDATION_THRESHOLD 下赚取的最大奖金的比例。它定义了最小奖金;例如,当 HF 等于清算阈值时,80_00 的因子会产生等于最大奖金 80% 的奖金。 |
liquidationBonusFactor 必须 ≤ 100_00 |
以下高级步骤概述了 V4 清算流程:
HEALTH_FACTOR_LIQUIDATION_THRESHOLD 以下时,任何人都可以触发清算;但是,不允许帐户清算自己的头寸。该协议检索借款人的总债务价值、当前 HF 和总抵押品价值,仅计算启用了 usingAsCollateral、CF > 0 且储备未暂停的储备;允许清算冻结储备的情况。TargetHealthFactor,该协议计算必须偿还的债务,以使借款人的 HF 恢复到 TargetHealthFactor。所需的还款金额取决于借款人的当前债务和抵押品(CF、LB、HF)。DUST_LIQUIDATION_THRESHOLD,并且清算人打算完全偿还债务,则该协议会增加可以清算的可允许债务,以便可以支付全部债务。但是,如果清算人以等于将要扣押的抵押品储备 $C_i$ 全额量的债务为目标(即 $Δ C_i = Ci$),则当存在多个抵押品储备 ($N{coll} > 1$) 时,dust 可能仍然存在。如果存在单个抵押品储备 ($N_{coll} = 1$),则剩余债务以及所有储备中的任何其他现有债务将记录为协议赤字。maxLiquidationBonus。此步骤中的公式仅计算清算奖金和要转移的产生的抵押品。如果所选抵押品不足,则扣押所有抵押品并重新计算已偿还债务。最后,计算抵押品 dust。LiquidationCall 事件。更新借款人和储备的利息指数。如果借款人仍有未偿还债务且没有剩余抵押品,则系统将记录协议赤字。V4 引入了动态 Dust 预防机制。如果在标准清算后,剩余债务低于 DUST_LIQUIDATION_THRESHOLD(例如,基本货币 1_000 美元),则协议会增加可以清算的最大债务,以允许全部偿还,前提是清算人已表明打算完全支付债务;否则,清算会在 Dust 条件下恢复。如果相应的债务或抵押品储备已分别耗尽,则 Dust 仍可能保留在抵押品储备或债务储备中。
由于在清算期间产生的舍入效应和可忽略不计的利息溢价,清算后借款人的最终健康系数可能与 TargetHealthFactor 不完全匹配。在极少数情况下,最终 HF 可能略高于或低于目标。
仅当在清算后,借款人在其任何储备中都没有剩余抵押品且仍有债务时,才会报告赤字。
V4 中的清算奖金在基于借款人的健康系数的最小值和最大值之间线性变化:
healthFactorForMaxBonus 时,清算人将获得最大奖金 (maxLiquidationBonus) 减去作为协议费用收取的部分 (liquidationFee)。示例:如果 maxLiquidationBonus = 105_00 且 liquidationFee = 10_00,则总奖金为偿还债务的 5%;该奖金的 10% 作为费用收取,因此清算人将获得 4.5% 的净抵押品奖金。HEALTH_FACTOR_LIQUIDATION_THRESHOLD 时,奖金等于 liquidationBonusFactor × maxLiquidationBonus。这确保了即使是最安全的清算(略低于阈值)仍然产生非零奖金。healthFactorForMaxBonus 和清算阈值之间的 HF,奖金从 liquidationBonusFactor × maxLiquidationBonus 线性增加到 maxLiquidationBonus。头寸的 HF 越低,清算人获得的奖金就越大。
一旦用户变得可清算,协议将提供等于最小值清算奖金
$$ minLB = (maxLB - 100\%) \times lbFactor + 100\% $$
其中
随着用户的健康系数降低,协议会增加提供给清算人的清算奖金。对于可清算的用户,清算奖金为
$$ lb = \begin{cases} maxLB & \text{如果 } hf{beforeLiq} \le hfForMaxBonus \ minLB + (maxLB - minLB) \times \frac{HF_LIQ_THRESHOLD - hf{beforeLiq}}{HF_LIQ_THRESHOLD - hfForMaxBonus} & \text{如果 } hf_{beforeLiq} > hfForMaxBonus \end{cases} $$
其中
- 原文链接: github.com/aave/aave-v4/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!