mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
feat: parse 32 bytes symbol to string
This commit is contained in:
parent
0b775af7a4
commit
8a57656668
|
@ -15,9 +15,7 @@ import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveC
|
|||
import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';
|
||||
import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
|
||||
import {IChainlinkAggregator} from '../interfaces/IChainlinkAggregator.sol';
|
||||
import {
|
||||
DefaultReserveInterestRateStrategy
|
||||
} from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol';
|
||||
import {DefaultReserveInterestRateStrategy} from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol';
|
||||
import {IERC20DetailedBytes} from './interfaces/IERC20DetailedBytes.sol';
|
||||
|
||||
contract UiPoolDataProvider is IUiPoolDataProvider {
|
||||
|
@ -30,9 +28,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
uint256 public constant ETH_CURRENCY_UNIT = 1 ether;
|
||||
address public constant MKRAddress = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;
|
||||
|
||||
|
||||
constructor(
|
||||
IChainlinkAggregator _networkBaseTokenPriceInUsdProxyAggregator,
|
||||
IChainlinkAggregator _networkBaseTokenPriceInUsdProxyAggregator,
|
||||
IChainlinkAggregator _marketReferenceCurrencyPriceInUsdProxyAggregator
|
||||
) public {
|
||||
networkBaseTokenPriceInUsdProxyAggregator = _networkBaseTokenPriceInUsdProxyAggregator;
|
||||
|
@ -71,10 +68,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
public
|
||||
view
|
||||
override
|
||||
returns (
|
||||
AggregatedReserveData[] memory,
|
||||
BaseCurrencyInfo memory
|
||||
)
|
||||
returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory)
|
||||
{
|
||||
IAaveOracle oracle = IAaveOracle(provider.getPriceOracle());
|
||||
ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
|
||||
|
@ -86,8 +80,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
reserveData.underlyingAsset = reserves[i];
|
||||
|
||||
// reserve current state
|
||||
DataTypes.ReserveData memory baseData =
|
||||
lendingPool.getReserveData(reserveData.underlyingAsset);
|
||||
DataTypes.ReserveData memory baseData = lendingPool.getReserveData(
|
||||
reserveData.underlyingAsset
|
||||
);
|
||||
reserveData.liquidityIndex = baseData.liquidityIndex;
|
||||
reserveData.variableBorrowIndex = baseData.variableBorrowIndex;
|
||||
reserveData.liquidityRate = baseData.currentLiquidityRate;
|
||||
|
@ -98,7 +93,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
reserveData.stableDebtTokenAddress = baseData.stableDebtTokenAddress;
|
||||
reserveData.variableDebtTokenAddress = baseData.variableDebtTokenAddress;
|
||||
reserveData.interestRateStrategyAddress = baseData.interestRateStrategyAddress;
|
||||
reserveData.priceInMarketReferenceCurrency = oracle.getAssetPrice(reserveData.underlyingAsset);
|
||||
reserveData.priceInMarketReferenceCurrency = oracle.getAssetPrice(
|
||||
reserveData.underlyingAsset
|
||||
);
|
||||
|
||||
reserveData.availableLiquidity = IERC20Detailed(reserveData.underlyingAsset).balanceOf(
|
||||
reserveData.aTokenAddress
|
||||
|
@ -115,12 +112,11 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
// we're getting this info from the aToken, because some of assets can be not compliant with ETC20Detailed
|
||||
if (address(reserveData.underlyingAsset) == address(MKRAddress)) {
|
||||
bytes32 symbol = IERC20DetailedBytes(reserveData.underlyingAsset).symbol();
|
||||
reserveData.symbol = string(abi.encodePacked(symbol));
|
||||
reserveData.symbol = bytes32ToString(symbol);
|
||||
} else {
|
||||
reserveData.symbol = IERC20Detailed(reserveData.underlyingAsset).symbol();
|
||||
}
|
||||
|
||||
|
||||
// (bool success, bytes memory result) = reserveData.underlyingAsset.staticcall(abi.encodeWithSignature("symbol()"));
|
||||
// reserveData.symbol = string(abi.encodePacked(result));
|
||||
|
||||
|
@ -129,7 +125,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
// } catch (bytes memory /*lowLevelData*/) {
|
||||
// bytes32 symbol = IERC20DetailedBytes(reserveData.underlyingAsset).symbol();
|
||||
// reserveData.symbol = string(abi.encodePacked(symbol));
|
||||
// }
|
||||
// }
|
||||
// reserveData.symbol = IERC20Detailed(reserveData.underlyingAsset).symbol();
|
||||
reserveData.name = '';
|
||||
|
||||
|
@ -158,15 +154,21 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
}
|
||||
|
||||
BaseCurrencyInfo memory baseCurrencyInfo;
|
||||
baseCurrencyInfo.networkBaseTokenPriceInUsd = networkBaseTokenPriceInUsdProxyAggregator.latestAnswer();
|
||||
baseCurrencyInfo.networkBaseTokenPriceDecimals = networkBaseTokenPriceInUsdProxyAggregator.decimals();
|
||||
baseCurrencyInfo.networkBaseTokenPriceInUsd = networkBaseTokenPriceInUsdProxyAggregator
|
||||
.latestAnswer();
|
||||
baseCurrencyInfo.networkBaseTokenPriceDecimals = networkBaseTokenPriceInUsdProxyAggregator
|
||||
.decimals();
|
||||
|
||||
try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) {
|
||||
baseCurrencyInfo.marketReferenceCurrencyUnit = baseCurrencyUnit;
|
||||
baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = int256(baseCurrencyUnit);
|
||||
} catch (bytes memory /*lowLevelData*/) {
|
||||
} catch (
|
||||
bytes memory /*lowLevelData*/
|
||||
) {
|
||||
baseCurrencyInfo.marketReferenceCurrencyUnit = ETH_CURRENCY_UNIT;
|
||||
baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator.latestAnswer();
|
||||
baseCurrencyInfo
|
||||
.marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator
|
||||
.latestAnswer();
|
||||
}
|
||||
|
||||
return (reservesData, baseCurrencyInfo);
|
||||
|
@ -182,8 +184,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
address[] memory reserves = lendingPool.getReservesList();
|
||||
DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user);
|
||||
|
||||
UserReserveData[] memory userReservesData =
|
||||
new UserReserveData[](user != address(0) ? reserves.length : 0);
|
||||
UserReserveData[] memory userReservesData = new UserReserveData[](
|
||||
user != address(0) ? reserves.length : 0
|
||||
);
|
||||
|
||||
for (uint256 i = 0; i < reserves.length; i++) {
|
||||
DataTypes.ReserveData memory baseData = lendingPool.getReserveData(reserves[i]);
|
||||
|
@ -197,24 +200,32 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
|
|||
|
||||
if (userConfig.isBorrowing(i)) {
|
||||
userReservesData[i].scaledVariableDebt = IVariableDebtToken(
|
||||
baseData
|
||||
.variableDebtTokenAddress
|
||||
)
|
||||
.scaledBalanceOf(user);
|
||||
baseData.variableDebtTokenAddress
|
||||
).scaledBalanceOf(user);
|
||||
userReservesData[i].principalStableDebt = IStableDebtToken(baseData.stableDebtTokenAddress)
|
||||
.principalBalanceOf(user);
|
||||
if (userReservesData[i].principalStableDebt != 0) {
|
||||
userReservesData[i].stableBorrowRate = IStableDebtToken(baseData.stableDebtTokenAddress)
|
||||
.getUserStableRate(user);
|
||||
userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken(
|
||||
baseData
|
||||
.stableDebtTokenAddress
|
||||
)
|
||||
.getUserLastUpdated(user);
|
||||
baseData.stableDebtTokenAddress
|
||||
).getUserLastUpdated(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (userReservesData);
|
||||
}
|
||||
|
||||
function bytes32ToString(bytes32 _bytes32) public pure returns (string memory) {
|
||||
uint8 i = 0;
|
||||
while (i < 32 && _bytes32[i] != 0) {
|
||||
i++;
|
||||
}
|
||||
bytes memory bytesArray = new bytes(i);
|
||||
for (i = 0; i < 32 && _bytes32[i] != 0; i++) {
|
||||
bytesArray[i] = _bytes32[i];
|
||||
}
|
||||
return string(bytesArray);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user