---
# System prepended metadata

title: 'Aave v4: 风险溢价'
tags: [DeFi]

---

在Aave V3中，借贷利率由市场中每种资产的供求关系决定。因此同一市场中的所有借款人无论抵押品如何，都支付相同的利率。这样是不太公平的，比如A抵押ETH(低风险代币)借出USDC，而B抵押新出的MTK(高风险代币)也借出USDC。他们支付着同样的利息，但所施予系统的风险是不一样的。

而Aave V4的风险溢价机制，借款者除了支付基础利息外，还需要根据抵押品的风险大小支付额外的利息。

> 官方[博客](https://aave.com/blog/aave-v4-risk-premiums)中的例子：如果借入 GHO 的**基础利率 (base rate)** 为 5%，而您使用 WETH 作为抵押品，则您只需支付 5% 的利率，因为 WETH 的**抵押风险 (Collateral Risk)** 为 0%。如果您使用 LINK 作为抵押品（其抵押风险为 30%），则您需要额外支付相当于基础债务 30% 的溢价。如果您使用 UNI 作为抵押品（其抵押风险为 40%），则您需要额外支付相当于基础债务 40% 的溢价。

![image](https://hackmd.io/_uploads/HyZ3Ne-4-x.png)

<br>

来看看合约中，与风险溢价相关的变量。
在Hub合约中，会分别存每个asset的总风险溢价情况，以及对于某个asset所对应的spoke分别的风险溢价情况：
```solidity
/// @dev Number of assets listed in the Hub.
uint256 internal _assetCount;

/// @dev Map of asset identifiers to Asset data.
mapping(uint256 assetId => Asset) internal _assets;

/// @dev Map of asset identifiers and spoke addresses to Spoke data.
mapping(uint256 assetId => mapping(address spoke => SpokeData)) internal _spokes;

/// @dev Map of asset identifiers to set of spoke addresses.
mapping(uint256 assetId => EnumerableSet.AddressSet) internal _assetToSpokes;

/// @dev Set of underlying addresses listed as assets in the Hub.
EnumerableSet.AddressSet internal _underlyingAssets;
```

![image](https://hackmd.io/_uploads/SkcyBebN-l.png)

风险溢价这部分所对应的债务由 `premiumShares` 和 `premiumOffsetRay` 两变量计算而来。而premiumShares 占基础债务（即drawnShares）的比例， 即为**riskPremium** (RP)，该数值反映了整体的风险情况。

<br>

在Spoke合约中，用户每个资产仓位存储着风险溢价债务，以及总仓位宏观的riskPremium。另外，spoke中每个资产对应一个collateralRisk (CR)配置，反映着该资产的风险大小（0%表示最低风险，最高风险为1000%）。
![image](https://hackmd.io/_uploads/rJI-Bxb4We.png)

变量的关联为：collateralRisk 结合用户的抵押借款情况，得出用户的 riskPremium。而风险溢价债务数据在更新时，需要依据 riskPremium。

<br>

riskPremium的计算示例：
某用户存入的抵押品有：价值5000美元的ETH ($CR_{ETH}$ = 0%), 价值5000美元的wstETH ($CR_{wstETH}$ = 10%) 和价值1000美元的CRV ($CR_{CRV}$ = 100%)
然后，该用户借出了价值8000美元的USDT。此时，该用户的RP应该为多少？

首先，找出哪部分抵押品刚好可以覆盖债务。根据抵押品的风险从小到大排序，依次进行覆盖。可知，5000美元的ETH和3000美元的wstETH可以覆盖8000美元的债务。
因此，RP = (5000 * 0% + 3000 * 10%) / 8000 = 3.75%

<br>

根据该计算机制，可知会导致riskPremium改变的行为有：
- 用户增加抵押品；
- 用户减少抵押品；
- 用户借款；
- 用户偿还借款；
- 仓位被清算；

正常来说，当用户的RP改变时，应当更新用户各个仓位`premiumShares` 和 `premiumOffsetRay` 数值，使得按照最新的风险情况来计算溢价。

<br>

先说说溢价的计算，溢价债务:
**Premium Debt = premiumShare * drawnIndex - premiumOffset**

premiumOffset字段作为偏移量，用于计算在index增长过程中，premiumShare对应的债务增量。
![image](https://hackmd.io/_uploads/S1i_SxbVZg.png)

> 关于PremiumOffset另外的一个理解角度：每一份share的记录都会对应资产的转移，当用户供应时，用户转入代币，spoke中会记录对应supplyShare。当用户借款时，spoke转出代币，也会记录borrowShare。而在记录premiumShare时，并不需要代币转移，但需要记录，因此就有了premiumOffset
> 

<br>

上面提到，正常来说，当用户的抵押品或债务改变时，应该更新riskPremium，同时更新各个仓位的`premiumShares` 和 `premiumOffsetRay` 。但实际情况会比较复杂。

在这条[PR](https://github.com/aave/aave-v4/pull/1037)中提到，只有RP明显恶化时，才会进行更新，而对于RP改善的情况，则是希望用户自行调用相关函数去更新。

通过阅读代码得知：

1. 供应抵押品不会有任何相关操作；
2. 提出抵押品、借款，会更新用户的RP，也会更新溢价share和offset；
3. 而偿还债务，因为规定是优先偿还溢价债务，所以溢价share和offset必然会改变。但改变时所依据的RP是旧的，而不是在此次偿还后新的抵押债务结构所对应的RP。当然，RP也没有更新。
4. 用户仓位被清算时，会更新RP和溢价share/offset。但清算这步应该是存在有RP改善的情况，涉及着一个不等式；
5. 另外，让我疑惑的是，用户动态风险配置的更新，同时也会更新RP和溢价share/offset。这和前面的想法有些不符。


<br>

参考：

1. https://aave.com/blog/aave-v4-risk-premiums
2. https://github.com/aave/aave-v4/blob/main/docs/overview.md#risk-premium 
3. https://governance.aave.com/t/aave-v4-new-features-and-risk-parameter-analysis/23443#p-59818-h-3-risk-premiums-23
4. https://github.com/aave/aave-v4/pull/1037 
5. https://github.com/aave/aave-v4/pull/801