Skip to content

Commit 03d9ed7

Browse files
authored
Merge pull request defisaver#543 from defisaver/fix/aave-v2-view
fix: aave v2 view REN price
2 parents a7e13f0 + 4e08074 commit 03d9ed7

4 files changed

Lines changed: 95 additions & 5 deletions

File tree

addresses/mainnet.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -815,14 +815,16 @@
815815
},
816816
{
817817
"name": "AaveView",
818-
"address": "0xD0bA40A400f9e045D54978E3B78Cd9aD9FA92144",
818+
"address": "0x792c56838Ab06015da7E298e4bD2Cc31248a18Aa",
819819
"id": "0x0a55b48c",
820820
"path": "contracts/views/AaveView.sol",
821-
"version": "1.0.2",
821+
"version": "1.0.4",
822822
"inRegistry": false,
823823
"changeTime": 0,
824824
"registryIds": [],
825825
"history": [
826+
"0x6102E50F88f039976bd1909a9CC368c7dd1d1A1d",
827+
"0xD0bA40A400f9e045D54978E3B78Cd9aD9FA92144",
826828
"0xf585d53f568d226449a94d48c4ea122cdeffe52d",
827829
"0xEDf1087544a01596b70Da746F861B878F245B08f"
828830
]

contracts/actions/aave/helpers/MainnetAaveAddresses.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ contract MainnetAaveAddresses {
88
address internal constant DYDX_FL_FEE_FAUCET = 0x47f159C90850D5cE09E21F931d504536840f34b4;
99
address internal constant DEFAULT_AAVE_V2_MARKET = 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5;
1010
address internal constant AAVE_TOKEN_ADDR = 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9;
11+
address internal constant REN_TOKEN_ADDR = 0x408e41876cCCDC0F92210600ef50372656052a38;
1112
}

contracts/views/AaveView.sol

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,16 @@ contract AaveView is AaveHelper, DSMath {
212212
(, uint256 ltv,,,,,,,,) = dataProvider.getReserveConfigurationData(_tokenAddresses[i]);
213213
(address aToken,,) = dataProvider.getReserveTokensAddresses(_tokenAddresses[i]);
214214

215+
uint256 price = 0;
216+
if (_tokenAddresses[i] != REN_TOKEN_ADDR) {
217+
price = IPriceOracleGetterAave(priceOracleAddress).getAssetPrice(_tokenAddresses[i]);
218+
}
219+
215220
tokens[i] = TokenInfo({
216221
aTokenAddress: aToken,
217222
underlyingTokenAddress: _tokenAddresses[i],
218223
collateralFactor: ltv,
219-
price: IPriceOracleGetterAave(priceOracleAddress).getAssetPrice(_tokenAddresses[i])
224+
price: price
220225
});
221226
}
222227
}
@@ -250,7 +255,10 @@ contract AaveView is AaveHelper, DSMath {
250255

251256
(address aToken,,) = _dataProvider.getReserveTokensAddresses(_token);
252257

253-
uint256 price = IPriceOracleGetterAave(_priceOracleAddress).getAssetPrice(_token);
258+
uint256 price = 0;
259+
if (_token != REN_TOKEN_ADDR) {
260+
price = IPriceOracleGetterAave(_priceOracleAddress).getAssetPrice(_token);
261+
}
254262

255263
_tokenInfo = TokenInfoFull({
256264
aTokenAddress: aToken,
@@ -331,7 +339,11 @@ contract AaveView is AaveHelper, DSMath {
331339
uint256 borrowsVariable,,,,,,
332340
bool usageAsCollateralEnabled
333341
) = dataProvider.getUserReserveData(reserve, _user);
334-
uint256 price = IPriceOracleGetterAave(priceOracleAddress).getAssetPrice(reserve);
342+
343+
uint256 price = 0;
344+
if (reserve != REN_TOKEN_ADDR) {
345+
price = IPriceOracleGetterAave(priceOracleAddress).getAssetPrice(reserve);
346+
}
335347

336348
if (aTokenBalance > 0) {
337349
uint256 userTokenBalanceEth =

test-sol/views/AaveView.t.sol

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// SPDX-License-Identifier: MIT
2+
3+
pragma solidity =0.8.24;
4+
5+
import { BaseTest } from "../utils/BaseTest.sol";
6+
import { AaveView } from "../../contracts/views/AaveView.sol";
7+
import {
8+
IAaveProtocolDataProviderV2
9+
} from "../../contracts/interfaces/protocols/aaveV2/IAaveProtocolDataProviderV2.sol";
10+
import {
11+
ILendingPoolAddressesProviderV2
12+
} from "../../contracts/interfaces/protocols/aaveV2/ILendingPoolAddressesProviderV2.sol";
13+
14+
contract TestAaveView is BaseTest {
15+
AaveView cut;
16+
17+
/// @dev Aave V2 LendingPoolAddressesProvider on mainnet
18+
address internal constant AAVE_V2_MARKET = 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5;
19+
address internal constant USER = 0xECf1839269f9240F9b897e38C092b1740A4c316D;
20+
21+
address internal constant STETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
22+
address internal constant REN = 0x408e41876cCCDC0F92210600ef50372656052a38;
23+
24+
bytes32 internal constant DATA_PROVIDER_ID =
25+
0x0100000000000000000000000000000000000000000000000000000000000000;
26+
27+
function setUp() public override {
28+
forkMainnetLatest();
29+
cut = new AaveView();
30+
}
31+
32+
function test_getLoanData_does_not_revert() public view {
33+
AaveView.LoanData memory data = cut.getLoanData(AAVE_V2_MARKET, USER);
34+
assertEq(data.user, USER);
35+
}
36+
37+
function test_getTokensInfo_stETH_and_REN() public view {
38+
address[] memory tokens = new address[](2);
39+
tokens[0] = STETH;
40+
tokens[1] = REN;
41+
42+
AaveView.TokenInfo[] memory infos = cut.getTokensInfo(AAVE_V2_MARKET, tokens);
43+
44+
assertEq(infos.length, 2);
45+
assertEq(infos[0].underlyingTokenAddress, STETH);
46+
assertEq(infos[1].underlyingTokenAddress, REN);
47+
assertTrue(infos[0].price > 0);
48+
assertTrue(infos[1].price == 0);
49+
}
50+
51+
function test_getTokenInfoFull_stETH() public view {
52+
address dataProviderAddr =
53+
ILendingPoolAddressesProviderV2(AAVE_V2_MARKET).getAddress(DATA_PROVIDER_ID);
54+
address priceOracle = ILendingPoolAddressesProviderV2(AAVE_V2_MARKET).getPriceOracle();
55+
IAaveProtocolDataProviderV2 dataProvider = IAaveProtocolDataProviderV2(dataProviderAddr);
56+
57+
AaveView.TokenInfoFull memory info = cut.getTokenInfoFull(dataProvider, priceOracle, STETH);
58+
59+
assertEq(info.underlyingTokenAddress, STETH);
60+
assertTrue(info.price > 0);
61+
assertTrue(info.totalSupply > 0);
62+
}
63+
64+
function test_getTokenInfoFull_REN() public view {
65+
address dataProviderAddr =
66+
ILendingPoolAddressesProviderV2(AAVE_V2_MARKET).getAddress(DATA_PROVIDER_ID);
67+
address priceOracle = ILendingPoolAddressesProviderV2(AAVE_V2_MARKET).getPriceOracle();
68+
IAaveProtocolDataProviderV2 dataProvider = IAaveProtocolDataProviderV2(dataProviderAddr);
69+
70+
AaveView.TokenInfoFull memory info = cut.getTokenInfoFull(dataProvider, priceOracle, REN);
71+
72+
assertEq(info.underlyingTokenAddress, REN);
73+
assertTrue(info.price == 0);
74+
}
75+
}

0 commit comments

Comments
 (0)