From f9cf541be1932db72fa2a81263d31cbb4890f7e4 Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 23 Mar 2021 18:52:51 +0100 Subject: [PATCH 01/30] Added incentives data to ui helper --- .../interfaces/IAaveIncentivesController.sol | 15 ++++++ contracts/misc/UiPoolDataProvider.sol | 51 ++++++++++++++++++- .../misc/interfaces/IUiPoolDataProvider.sol | 24 ++++++++- 3 files changed, 88 insertions(+), 2 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index c049bd77..5125ac7b 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -3,9 +3,24 @@ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; interface IAaveIncentivesController { + struct AssetData { + uint128 emissionPerSecond; + uint128 lastUpdateTimestamp; + uint256 index; + } + + function REWARD_TOKEN() external view returns (address rewardToken); + + function assets(address underlying) external view returns (AssetData memory assets); + function handleAction( address user, uint256 userBalance, uint256 totalSupply ) external; + + function getRewardsBalance(address[] calldata assets, address user) + external + view + returns (uint256); } diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 65fdc4dd..4d61ee8d 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -4,6 +4,7 @@ pragma experimental ABIEncoderV2; import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol'; import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol'; +import {IAaveIncentivesController} from '../interfaces/IAaveIncentivesController.sol'; import {IUiPoolDataProvider} from './interfaces/IUiPoolDataProvider.sol'; import {ILendingPool} from '../interfaces/ILendingPool.sol'; import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol'; @@ -43,7 +44,11 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); } - function getReservesData(ILendingPoolAddressesProvider provider, address user) + function getReservesData( + ILendingPoolAddressesProvider provider, + IAaveIncentivesController incentivesControllerAddr, + address user + ) external view override @@ -53,6 +58,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider { uint256 ) { + IAaveIncentivesController incentivesController = + IAaveIncentivesController(incentivesControllerAddr); ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); address[] memory reserves = lendingPool.getReservesList(); @@ -122,6 +129,11 @@ contract UiPoolDataProvider is IUiPoolDataProvider { DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress) ); + // incentives + reserveData.emissionPerSecond = incentivesController + .assets(reserveData.underlyingAsset) + .emissionPerSecond; + if (user != address(0)) { // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; @@ -155,6 +167,43 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } } + return (reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS)); } + + function getUserIncentivesBalance( + ILendingPoolAddressesProvider provider, + IAaveIncentivesController incentivesControllerAddr, + address user + ) external view override returns (IncentivesDataUser memory) { + IAaveIncentivesController incentivesController = + IAaveIncentivesController(incentivesControllerAddr); + ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); + IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); + address[] memory reserves = lendingPool.getReservesList(); + + // array of atokens that have incentives + address[] memory incentivesATokens = new address[](user != address(0) ? reserves.length : 0); + + for (uint256 i = 0; i < reserves.length; i++) { + DataTypes.ReserveData memory baseData = lendingPool.getReserveData(reserves[i]); + if (user != address(0)) { + incentivesATokens[i] = baseData.aTokenAddress; + } + } + + IncentivesDataUser memory userRewardsBalance; + if (user != address(0)) { + userRewardsBalance.rewardToken = incentivesController.REWARD_TOKEN(); + userRewardsBalance.claimableRewards = incentivesController.getRewardsBalance( + incentivesATokens, + user + ); + userRewardsBalance.rewardTokenDecimals = IERC20Detailed(userRewardsBalance.rewardToken) + .decimals(); + userRewardsBalance.rewardTokenPriceEth = oracle.getAssetPrice(userRewardsBalance.rewardToken); + } + + return (userRewardsBalance); + } } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 81a553e8..a1fb7572 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -3,6 +3,7 @@ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol'; +import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol'; interface IUiPoolDataProvider { struct AggregatedReserveData { @@ -41,7 +42,18 @@ interface IUiPoolDataProvider { uint256 variableRateSlope2; uint256 stableRateSlope1; uint256 stableRateSlope2; + // incentives + uint128 emissionPerSecond; } + + struct IncentivesDataUser { + address rewardToken; + uint256 claimableRewards; + uint256 rewardTokenDecimals; + uint256 rewardTokenPriceEth; + uint128 emissionPerSecond; + } + // // struct ReserveData { // uint256 averageStableBorrowRate; @@ -67,7 +79,11 @@ interface IUiPoolDataProvider { // address aTokenAddress; // } - function getReservesData(ILendingPoolAddressesProvider provider, address user) + function getReservesData( + ILendingPoolAddressesProvider provider, + IAaveIncentivesController incentives, + address user + ) external view returns ( @@ -76,6 +92,12 @@ interface IUiPoolDataProvider { uint256 ); + function getUserIncentivesBalance( + ILendingPoolAddressesProvider provider, + IAaveIncentivesController incentives, + address user + ) external view returns (IncentivesDataUser memory); + // function getUserReservesData(ILendingPoolAddressesProvider provider, address user) // external // view From 83a499f2994a4127d706c0cb5dfa39636ab042b8 Mon Sep 17 00:00:00 2001 From: sendra Date: Fri, 26 Mar 2021 11:08:07 +0100 Subject: [PATCH 02/30] added incentives emission for a / v /s tokens --- contracts/misc/UiPoolDataProvider.sol | 12 ++++++++++-- contracts/misc/interfaces/IUiPoolDataProvider.sol | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 4d61ee8d..15c0e91c 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -130,8 +130,16 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives - reserveData.emissionPerSecond = incentivesController - .assets(reserveData.underlyingAsset) + reserveData.aEmissionPerSecond = incentivesController + .assets(reserveData.aTokenAddress) + .emissionPerSecond; + + reserveData.vEmissionPerSecond = incentivesController + .assets(reserveData.variableDebtTokenAddress) + .emissionPerSecond; + + reserveData.sEmissionPerSecond = incentivesController + .assets(reserveData.stableDebtTokenAddress) .emissionPerSecond; if (user != address(0)) { diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index a1fb7572..41519611 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -43,7 +43,9 @@ interface IUiPoolDataProvider { uint256 stableRateSlope1; uint256 stableRateSlope2; // incentives - uint128 emissionPerSecond; + uint128 aEmissionPerSecond; + uint128 vEmissionPerSecond; + uint128 sEmissionPerSecond; } struct IncentivesDataUser { From 2028631ad74e89fbdd571a26b38cd6bb25ef2570 Mon Sep 17 00:00:00 2001 From: sendra Date: Fri, 26 Mar 2021 13:59:49 +0100 Subject: [PATCH 03/30] fixed not needed casting --- contracts/misc/UiPoolDataProvider.sol | 4 ---- 1 file changed, 4 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 15c0e91c..aff0c92d 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -58,8 +58,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { uint256 ) { - IAaveIncentivesController incentivesController = - IAaveIncentivesController(incentivesControllerAddr); ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); address[] memory reserves = lendingPool.getReservesList(); @@ -184,8 +182,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { IAaveIncentivesController incentivesControllerAddr, address user ) external view override returns (IncentivesDataUser memory) { - IAaveIncentivesController incentivesController = - IAaveIncentivesController(incentivesControllerAddr); ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); address[] memory reserves = lendingPool.getReservesList(); From ab8c9a22a912399df402acd8019f028c8cf74f65 Mon Sep 17 00:00:00 2001 From: andyk Date: Fri, 26 Mar 2021 15:06:49 +0200 Subject: [PATCH 04/30] fix typo in incentives controller env --- contracts/misc/UiPoolDataProvider.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index aff0c92d..d9350e6a 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -46,7 +46,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { function getReservesData( ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentivesControllerAddr, + IAaveIncentivesController incentivesController, address user ) external @@ -179,7 +179,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { function getUserIncentivesBalance( ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentivesControllerAddr, + IAaveIncentivesController incentivesController, address user ) external view override returns (IncentivesDataUser memory) { ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); From e81ddb4e2f66039a819183027dafd36bd609965f Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 29 Mar 2021 17:10:35 +0200 Subject: [PATCH 05/30] Added incentives information to UI data provider contract --- .../interfaces/IAaveIncentivesController.sol | 6 ++ contracts/misc/UiPoolDataProvider.sol | 91 +++++++++++-------- .../misc/interfaces/IUiPoolDataProvider.sol | 33 +++++-- 3 files changed, 85 insertions(+), 45 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index 5125ac7b..8e9c74a7 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -11,6 +11,8 @@ interface IAaveIncentivesController { function REWARD_TOKEN() external view returns (address rewardToken); + function PRECISION() external view returns (uint8); + function assets(address underlying) external view returns (AssetData memory assets); function handleAction( @@ -23,4 +25,8 @@ interface IAaveIncentivesController { external view returns (uint256); + + function getUserUnclaimedRewards(address _user) external view returns (uint256); + + function getUserAssetData(address user, address asset) external view returns (uint256); } diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index aff0c92d..28b0da0b 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -46,7 +46,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { function getReservesData( ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentivesControllerAddr, + IAaveIncentivesController incentivesController, address user ) external @@ -55,7 +55,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, - uint256 + uint256, + IncentivesDataUser memory ) { ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); @@ -128,19 +129,54 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives + // IncentivesAssetData memory aTokenIncentives = incentivesController.assets(reserveData.aTokenAddress); reserveData.aEmissionPerSecond = incentivesController .assets(reserveData.aTokenAddress) .emissionPerSecond; + reserveData.aIncentivesLastUpdateTimestamp = incentivesController + .assets(reserveData.aTokenAddress) + .lastUpdateTimestamp; + reserveData.aTokenIncentivesIndex = incentivesController + .assets(reserveData.aTokenAddress) + .index; - reserveData.vEmissionPerSecond = incentivesController - .assets(reserveData.variableDebtTokenAddress) - .emissionPerSecond; - + // IncentivesAssetData memory sTokenIncentives = incentivesController.assets(reserveData.stableDebtTokenAddress); reserveData.sEmissionPerSecond = incentivesController .assets(reserveData.stableDebtTokenAddress) .emissionPerSecond; + reserveData.sIncentivesLastUpdateTimestamp = incentivesController + .assets(reserveData.stableDebtTokenAddress) + .lastUpdateTimestamp; + reserveData.sTokenIncentivesIndex = incentivesController + .assets(reserveData.stableDebtTokenAddress) + .index; + + // IncentivesAssetData memory vTokenIncentives = incentivesController.assets(reserveData.variableDebtTokenAddress); + reserveData.vEmissionPerSecond = incentivesController + .assets(reserveData.variableDebtTokenAddress) + .emissionPerSecond; + reserveData.vIncentivesLastUpdateTimestamp = incentivesController + .assets(reserveData.variableDebtTokenAddress) + .lastUpdateTimestamp; + reserveData.vTokenIncentivesIndex = incentivesController + .assets(reserveData.variableDebtTokenAddress) + .index; if (user != address(0)) { + // incentives + // userIncentives.incentivesLastUpdated = + userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.aTokenAddress + ); + userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.stableDebtTokenAddress + ); + userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.variableDebtTokenAddress + ); // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; userReservesData[i].scaledATokenBalance = IAToken(reserveData.aTokenAddress) @@ -174,40 +210,21 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } - return (reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS)); - } - - function getUserIncentivesBalance( - ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentivesControllerAddr, - address user - ) external view override returns (IncentivesDataUser memory) { - ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); - IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); - address[] memory reserves = lendingPool.getReservesList(); - - // array of atokens that have incentives - address[] memory incentivesATokens = new address[](user != address(0) ? reserves.length : 0); - - for (uint256 i = 0; i < reserves.length; i++) { - DataTypes.ReserveData memory baseData = lendingPool.getReserveData(reserves[i]); - if (user != address(0)) { - incentivesATokens[i] = baseData.aTokenAddress; - } - } - - IncentivesDataUser memory userRewardsBalance; + IncentivesDataUser memory incentivesDataUser; if (user != address(0)) { - userRewardsBalance.rewardToken = incentivesController.REWARD_TOKEN(); - userRewardsBalance.claimableRewards = incentivesController.getRewardsBalance( - incentivesATokens, - user - ); - userRewardsBalance.rewardTokenDecimals = IERC20Detailed(userRewardsBalance.rewardToken) + incentivesDataUser.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user); + incentivesDataUser.rewardToken = incentivesController.REWARD_TOKEN(); + incentivesDataUser.precision = incentivesController.PRECISION(); + incentivesDataUser.rewardTokenDecimals = IERC20Detailed(incentivesDataUser.rewardToken) .decimals(); - userRewardsBalance.rewardTokenPriceEth = oracle.getAssetPrice(userRewardsBalance.rewardToken); + incentivesDataUser.rewardTokenPriceEth = oracle.getAssetPrice(incentivesDataUser.rewardToken); } - return (userRewardsBalance); + return ( + reservesData, + userReservesData, + oracle.getAssetPrice(MOCK_USD_ADDRESS), + incentivesDataUser + ); } } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 41519611..9ad0c8c4 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -46,14 +46,20 @@ interface IUiPoolDataProvider { uint128 aEmissionPerSecond; uint128 vEmissionPerSecond; uint128 sEmissionPerSecond; + uint256 aIncentivesLastUpdateTimestamp; + uint256 vIncentivesLastUpdateTimestamp; + uint256 sIncentivesLastUpdateTimestamp; + uint256 aTokenIncentivesIndex; + uint256 vTokenIncentivesIndex; + uint256 sTokenIncentivesIndex; } struct IncentivesDataUser { address rewardToken; - uint256 claimableRewards; + uint256 userUnclaimedRewards; uint256 rewardTokenDecimals; uint256 rewardTokenPriceEth; - uint128 emissionPerSecond; + uint8 precision; } // @@ -70,6 +76,16 @@ interface IUiPoolDataProvider { uint256 scaledVariableDebt; uint256 principalStableDebt; uint256 stableBorrowLastUpdateTimestamp; + // incentives + uint256 aTokenincentivesUserIndex; + uint256 vTokenincentivesUserIndex; + uint256 sTokenincentivesUserIndex; + } + + struct IncentivesAssetData { + uint128 emissionPerSecond; + uint128 lastUpdateTimestamp; + uint256 index; } // @@ -91,14 +107,15 @@ interface IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, - uint256 + uint256, + IncentivesDataUser memory ); - function getUserIncentivesBalance( - ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentives, - address user - ) external view returns (IncentivesDataUser memory); + // function getUserIncentivesBalance( + // ILendingPoolAddressesProvider provider, + // IAaveIncentivesController incentives, + // address user + // ) external view returns (IncentivesDataUser memory); // function getUserReservesData(ILendingPoolAddressesProvider provider, address user) // external From 99a0d17de4508abeeb67cca681180b6c9f695e42 Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 30 Mar 2021 12:39:00 +0200 Subject: [PATCH 06/30] reused local vars to not fill stack --- contracts/misc/UiPoolDataProvider.sol | 66 ++++++++----------- .../misc/interfaces/IUiPoolDataProvider.sol | 48 +------------- 2 files changed, 32 insertions(+), 82 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 28b0da0b..d585593c 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -25,6 +25,21 @@ contract UiPoolDataProvider is IUiPoolDataProvider { using UserConfiguration for DataTypes.UserConfigurationMap; address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96; + IAaveIncentivesController immutable incentivesController; + IPriceOracleGetter immutable oracle; + + constructor(IAaveIncentivesController _incentivesController, IPriceOracleGetter _oracle) public { + incentivesController = _incentivesController; + oracle = _oracle; + } + + function getPriceOracle() public view override returns (address) { + return address(oracle); + } + + function getIncentivesController() public view override returns (address) { + return address(incentivesController); + } function getInterestRateStrategySlopes(DefaultReserveInterestRateStrategy interestRateStrategy) internal @@ -44,11 +59,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); } - function getReservesData( - ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentivesController, - address user - ) + function getReservesData(ILendingPoolAddressesProvider provider, address user) external view override @@ -60,7 +71,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) { ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); - IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle()); address[] memory reserves = lendingPool.getReservesList(); DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user); @@ -129,42 +139,24 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives - // IncentivesAssetData memory aTokenIncentives = incentivesController.assets(reserveData.aTokenAddress); - reserveData.aEmissionPerSecond = incentivesController - .assets(reserveData.aTokenAddress) - .emissionPerSecond; - reserveData.aIncentivesLastUpdateTimestamp = incentivesController - .assets(reserveData.aTokenAddress) - .lastUpdateTimestamp; - reserveData.aTokenIncentivesIndex = incentivesController - .assets(reserveData.aTokenAddress) - .index; + IAaveIncentivesController.AssetData memory tokenIncentivesInfo = + incentivesController.assets(reserveData.aTokenAddress); + reserveData.aEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; + reserveData.aIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; + reserveData.aTokenIncentivesIndex = tokenIncentivesInfo.index; - // IncentivesAssetData memory sTokenIncentives = incentivesController.assets(reserveData.stableDebtTokenAddress); - reserveData.sEmissionPerSecond = incentivesController - .assets(reserveData.stableDebtTokenAddress) - .emissionPerSecond; - reserveData.sIncentivesLastUpdateTimestamp = incentivesController - .assets(reserveData.stableDebtTokenAddress) - .lastUpdateTimestamp; - reserveData.sTokenIncentivesIndex = incentivesController - .assets(reserveData.stableDebtTokenAddress) - .index; + tokenIncentivesInfo = incentivesController.assets(reserveData.stableDebtTokenAddress); + reserveData.sEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; + reserveData.sIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; + reserveData.sTokenIncentivesIndex = tokenIncentivesInfo.index; - // IncentivesAssetData memory vTokenIncentives = incentivesController.assets(reserveData.variableDebtTokenAddress); - reserveData.vEmissionPerSecond = incentivesController - .assets(reserveData.variableDebtTokenAddress) - .emissionPerSecond; - reserveData.vIncentivesLastUpdateTimestamp = incentivesController - .assets(reserveData.variableDebtTokenAddress) - .lastUpdateTimestamp; - reserveData.vTokenIncentivesIndex = incentivesController - .assets(reserveData.variableDebtTokenAddress) - .index; + tokenIncentivesInfo = incentivesController.assets(reserveData.variableDebtTokenAddress); + reserveData.vEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; + reserveData.vIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; + reserveData.vTokenIncentivesIndex = tokenIncentivesInfo.index; if (user != address(0)) { // incentives - // userIncentives.incentivesLastUpdated = userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( user, reserveData.aTokenAddress diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 9ad0c8c4..3bdad9f6 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -62,12 +62,6 @@ interface IUiPoolDataProvider { uint8 precision; } - // - // struct ReserveData { - // uint256 averageStableBorrowRate; - // uint256 totalLiquidity; - // } - struct UserReserveData { address underlyingAsset; uint256 scaledATokenBalance; @@ -82,26 +76,7 @@ interface IUiPoolDataProvider { uint256 sTokenincentivesUserIndex; } - struct IncentivesAssetData { - uint128 emissionPerSecond; - uint128 lastUpdateTimestamp; - uint256 index; - } - - // - // struct ATokenSupplyData { - // string name; - // string symbol; - // uint8 decimals; - // uint256 totalSupply; - // address aTokenAddress; - // } - - function getReservesData( - ILendingPoolAddressesProvider provider, - IAaveIncentivesController incentives, - address user - ) + function getReservesData(ILendingPoolAddressesProvider provider, address user) external view returns ( @@ -111,24 +86,7 @@ interface IUiPoolDataProvider { IncentivesDataUser memory ); - // function getUserIncentivesBalance( - // ILendingPoolAddressesProvider provider, - // IAaveIncentivesController incentives, - // address user - // ) external view returns (IncentivesDataUser memory); + function getPriceOracle() external view returns (address); - // function getUserReservesData(ILendingPoolAddressesProvider provider, address user) - // external - // view - // returns (UserReserveData[] memory); - // - // function getAllATokenSupply(ILendingPoolAddressesProvider provider) - // external - // view - // returns (ATokenSupplyData[] memory); - // - // function getATokenSupply(address[] calldata aTokens) - // external - // view - // returns (ATokenSupplyData[] memory); + function getIncentivesController() external view returns (address); } From 9ed357662bdecb7989da044c52846543786e9090 Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 30 Mar 2021 12:42:20 +0200 Subject: [PATCH 07/30] added public to incentives controller and price oracle so we can remove getters --- contracts/misc/UiPoolDataProvider.sol | 12 ++---------- contracts/misc/interfaces/IUiPoolDataProvider.sol | 4 ---- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index d585593c..d0b71a17 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -25,22 +25,14 @@ contract UiPoolDataProvider is IUiPoolDataProvider { using UserConfiguration for DataTypes.UserConfigurationMap; address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96; - IAaveIncentivesController immutable incentivesController; - IPriceOracleGetter immutable oracle; + IAaveIncentivesController public immutable incentivesController; + IPriceOracleGetter public immutable oracle; constructor(IAaveIncentivesController _incentivesController, IPriceOracleGetter _oracle) public { incentivesController = _incentivesController; oracle = _oracle; } - function getPriceOracle() public view override returns (address) { - return address(oracle); - } - - function getIncentivesController() public view override returns (address) { - return address(incentivesController); - } - function getInterestRateStrategySlopes(DefaultReserveInterestRateStrategy interestRateStrategy) internal view diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 3bdad9f6..240f9fd4 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -85,8 +85,4 @@ interface IUiPoolDataProvider { uint256, IncentivesDataUser memory ); - - function getPriceOracle() external view returns (address); - - function getIncentivesController() external view returns (address); } From 516cbc7349065bcea1f9d9e68810b12428ed3b36 Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 30 Mar 2021 13:17:08 +0200 Subject: [PATCH 08/30] updated deployment scripts --- helpers/contracts-deployments.ts | 26 +++++++++++++- package.json | 4 ++- .../deployments/deploy-UiPoolDataProvider.ts | 36 +++++++++++++------ 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts index 07f34a91..68024d2a 100644 --- a/helpers/contracts-deployments.ts +++ b/helpers/contracts-deployments.ts @@ -55,12 +55,28 @@ import { registerContractInJsonDb, linkBytecode, insertContractAddressInDb, + deployContract, } from './contracts-helpers'; import { StableAndVariableTokensHelperFactory } from '../types/StableAndVariableTokensHelperFactory'; import { MintableDelegationERC20 } from '../types/MintableDelegationERC20'; import { readArtifact as buidlerReadArtifact } from '@nomiclabs/buidler/plugins'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { LendingPoolLibraryAddresses } from '../types/LendingPoolFactory'; +import { UiPoolDataProvider } from '../types'; +import { verifyContract } from './etherscan-verification'; + +export const deployUiPoolDataProvider = async ( + [incentivesController, aaveOracle]: [tEthereumAddress, tEthereumAddress], + verify?: boolean +) => { + const id = eContractid.UiPoolDataProvider; + const args: string[] = [incentivesController, aaveOracle]; + const instance = await deployContract(id, args); + if (verify) { + await verifyContract(instance.address, args); + } + return instance; +}; const readArtifact = async (id: string) => { if (DRE.network.name === eEthereumNetwork.buidlerevm) { @@ -546,7 +562,15 @@ export const deployMockVariableDebtToken = async ( }; export const deployMockAToken = async ( - args: [tEthereumAddress, tEthereumAddress, tEthereumAddress, tEthereumAddress, string, string, string], + args: [ + tEthereumAddress, + tEthereumAddress, + tEthereumAddress, + tEthereumAddress, + string, + string, + string + ], verify?: boolean ) => { const instance = await withSaveAndVerify( diff --git a/package.json b/package.json index 4532f6fa..dce53f5d 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,9 @@ "print-contracts:kovan": "npm run hardhat:kovan -- print-contracts", "print-contracts:main": "npm run hardhat:main -- print-contracts", "print-contracts:ropsten": "npm run hardhat:main -- print-contracts", - "dev:deployUIProvider": "npm run hardhat:kovan deploy-UiPoolDataProvider", + "dev:deployUIProvider": "hardhat --network kovan deploy-UiPoolDataProvider", + "main:deployUIProvider": "hardhat --network main deploy-UiPoolDataProvider", + "matic:deployUIProvider": "hardhat --network matic deploy-UiPoolDataProvider", "dev:deployUniswapRepayAdapter": "hardhat --network kovan deploy-UniswapRepayAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c", "dev:UniswapLiquiditySwapAdapter": "hardhat --network kovan deploy-UniswapLiquiditySwapAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c", "main:deployUniswapRepayAdapter": "hardhat --network main deploy-UniswapRepayAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D --weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 2d696702..64a6dae4 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -1,8 +1,6 @@ import { task } from 'hardhat/config'; - -import { UiPoolDataProviderFactory } from '../../types'; -import { verifyContract } from '../../helpers/etherscan-verification'; -import { eContractid } from '../../helpers/types'; +import { eContractid, eEthereumNetwork, ePolygonNetwork } from '../../helpers/types'; +import { deployUiPoolDataProvider } from '../../helpers/contracts-deployments'; task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider contract`) .addFlag('verify', 'Verify UiPoolDataProvider contract via Etherscan API.') @@ -13,15 +11,31 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider throw new Error('INVALID_CHAIN_ID'); } + const addressesByNetwork = { + // [eEthereumNetwork.kovan]: { + // incentivesController: '', + // aaveOracle: '', + // }, + // [eEthereumNetwork.main]: { + // incentivesController: '', + // aaveOracle: '0xa50ba011c48153de246e5192c8f9258a2ba79ca9', + // }, + [ePolygonNetwork.matic]: { + incentivesController: '0x357D51124f59836DeD84c8a1730D72B749d8BC23', + aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', + }, + }; + console.log(`\n- UiPoolDataProvider deployment`); console.log(`\tDeploying UiPoolDataProvider implementation ...`); - const uiPoolDataProvider = await new UiPoolDataProviderFactory( - await localBRE.ethers.provider.getSigner() - ).deploy(); - await uiPoolDataProvider.deployTransaction.wait(); - console.log('uiPoolDataProvider.address', uiPoolDataProvider.address); - await verifyContract(uiPoolDataProvider.address, []); + const UiPoolDataProvider = await deployUiPoolDataProvider( + [ + addressesByNetwork[localBRE.network.name].incentivesController, + addressesByNetwork[localBRE.network.name].aaveOracle, + ], + verify + ); - console.log(`\tFinished UiPoolDataProvider proxy and implementation deployment`); + console.log(`\tFinished UiPoolDataProvider deployment: ${UiPoolDataProvider.address}`); }); From 5ba17aa1c1745d48379a48a072a0c613386195ea Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 30 Mar 2021 13:19:47 +0200 Subject: [PATCH 09/30] naming changed to IncentivesUserData --- contracts/misc/UiPoolDataProvider.sol | 16 ++++++++-------- .../misc/interfaces/IUiPoolDataProvider.sol | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index d0b71a17..49bbf63f 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -59,7 +59,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { AggregatedReserveData[] memory, UserReserveData[] memory, uint256, - IncentivesDataUser memory + IncentivesUserData memory ) { ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); @@ -194,21 +194,21 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } - IncentivesDataUser memory incentivesDataUser; + IncentivesUserData memory incentivesUserData; if (user != address(0)) { - incentivesDataUser.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user); - incentivesDataUser.rewardToken = incentivesController.REWARD_TOKEN(); - incentivesDataUser.precision = incentivesController.PRECISION(); - incentivesDataUser.rewardTokenDecimals = IERC20Detailed(incentivesDataUser.rewardToken) + incentivesUserData.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user); + incentivesUserData.rewardToken = incentivesController.REWARD_TOKEN(); + incentivesUserData.precision = incentivesController.PRECISION(); + incentivesUserData.rewardTokenDecimals = IERC20Detailed(incentivesUserData.rewardToken) .decimals(); - incentivesDataUser.rewardTokenPriceEth = oracle.getAssetPrice(incentivesDataUser.rewardToken); + incentivesUserData.rewardTokenPriceEth = oracle.getAssetPrice(incentivesUserData.rewardToken); } return ( reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS), - incentivesDataUser + incentivesUserData ); } } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 240f9fd4..efee35bc 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -54,7 +54,7 @@ interface IUiPoolDataProvider { uint256 sTokenIncentivesIndex; } - struct IncentivesDataUser { + struct IncentivesUserData { address rewardToken; uint256 userUnclaimedRewards; uint256 rewardTokenDecimals; @@ -83,6 +83,6 @@ interface IUiPoolDataProvider { AggregatedReserveData[] memory, UserReserveData[] memory, uint256, - IncentivesDataUser memory + IncentivesUserData memory ); } From b84a486d106fe67c9d1019a71132c26527fd789c Mon Sep 17 00:00:00 2001 From: sendra Date: Tue, 6 Apr 2021 16:17:04 +0200 Subject: [PATCH 10/30] removed extra external calls that are not needed --- contracts/misc/UiPoolDataProvider.sol | 3 --- contracts/misc/interfaces/IUiPoolDataProvider.sol | 2 -- 2 files changed, 5 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 49bbf63f..1672ab1a 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -198,9 +198,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { if (user != address(0)) { incentivesUserData.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user); incentivesUserData.rewardToken = incentivesController.REWARD_TOKEN(); - incentivesUserData.precision = incentivesController.PRECISION(); - incentivesUserData.rewardTokenDecimals = IERC20Detailed(incentivesUserData.rewardToken) - .decimals(); incentivesUserData.rewardTokenPriceEth = oracle.getAssetPrice(incentivesUserData.rewardToken); } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index efee35bc..7757a4f1 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -57,9 +57,7 @@ interface IUiPoolDataProvider { struct IncentivesUserData { address rewardToken; uint256 userUnclaimedRewards; - uint256 rewardTokenDecimals; uint256 rewardTokenPriceEth; - uint8 precision; } struct UserReserveData { From dc2943f2ec243ae93178913fc130c7570d5c5936 Mon Sep 17 00:00:00 2001 From: sendra Date: Wed, 7 Apr 2021 17:44:29 +0200 Subject: [PATCH 11/30] removed incentives data, as it is hardcoded on client side --- contracts/misc/UiPoolDataProvider.sol | 17 ++--------------- .../misc/interfaces/IUiPoolDataProvider.sol | 9 +-------- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 1672ab1a..026d67d9 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -58,8 +58,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, - uint256, - IncentivesUserData memory + uint256 ) { ILendingPool lendingPool = ILendingPool(provider.getLendingPool()); @@ -194,18 +193,6 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } - IncentivesUserData memory incentivesUserData; - if (user != address(0)) { - incentivesUserData.userUnclaimedRewards = incentivesController.getUserUnclaimedRewards(user); - incentivesUserData.rewardToken = incentivesController.REWARD_TOKEN(); - incentivesUserData.rewardTokenPriceEth = oracle.getAssetPrice(incentivesUserData.rewardToken); - } - - return ( - reservesData, - userReservesData, - oracle.getAssetPrice(MOCK_USD_ADDRESS), - incentivesUserData - ); + return (reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS)); } } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 7757a4f1..283c3500 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -54,12 +54,6 @@ interface IUiPoolDataProvider { uint256 sTokenIncentivesIndex; } - struct IncentivesUserData { - address rewardToken; - uint256 userUnclaimedRewards; - uint256 rewardTokenPriceEth; - } - struct UserReserveData { address underlyingAsset; uint256 scaledATokenBalance; @@ -80,7 +74,6 @@ interface IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, - uint256, - IncentivesUserData memory + uint256 ); } From 717bb133e100236d728fd463704fd0cb4e710815 Mon Sep 17 00:00:00 2001 From: sendra Date: Thu, 8 Apr 2021 13:55:01 +0200 Subject: [PATCH 12/30] added unclaimed user rewards --- contracts/misc/UiPoolDataProvider.sol | 8 +++++++- contracts/misc/interfaces/IUiPoolDataProvider.sol | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 026d67d9..7d2aef55 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -58,6 +58,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, + uint256, uint256 ) { @@ -193,6 +194,11 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } - return (reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS)); + return ( + reservesData, + userReservesData, + oracle.getAssetPrice(MOCK_USD_ADDRESS), + incentivesController.getUserUnclaimedRewards(user) + ); } } diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 283c3500..43e4e997 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -74,6 +74,7 @@ interface IUiPoolDataProvider { returns ( AggregatedReserveData[] memory, UserReserveData[] memory, + uint256, uint256 ); } From a5ab0a6e3b3b4715ff692740ae9b68fe2d407ab5 Mon Sep 17 00:00:00 2001 From: sendra Date: Fri, 9 Apr 2021 10:57:01 +0200 Subject: [PATCH 13/30] added mumbai addresses --- package-lock.json | 313 +++++++++--------- package.json | 1 + .../deployments/deploy-UiPoolDataProvider.ts | 6 +- 3 files changed, 171 insertions(+), 149 deletions(-) diff --git a/package-lock.json b/package-lock.json index b05b76cb..cf9af765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2803,7 +2803,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5151,8 +5150,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -5889,36 +5887,6 @@ "@ethersproject/strings": ">=5.0.0-beta.130" } }, - "@ethersproject/abstract-provider": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz", - "integrity": "sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw==", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.10.tgz", - "integrity": "sha512-irx7kH7FDAeW7QChDPW19WsxqeB1d3XLyOLSXm0bfPqL1SS07LXWltBJUBUxqC03ORpAOcM3JQj57DU8JnVY2g==", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, "@ethersproject/address": { "version": "5.0.9", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.9.tgz", @@ -5933,16 +5901,6 @@ "@ethersproject/rlp": "^5.0.7" } }, - "@ethersproject/base64": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.7.tgz", - "integrity": "sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw==", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9" - } - }, "@ethersproject/bignumber": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.13.tgz", @@ -6010,16 +5968,6 @@ "dev": true, "optional": true }, - "@ethersproject/networks": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.7.tgz", - "integrity": "sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ==", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, "@ethersproject/properties": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.7.tgz", @@ -6084,20 +6032,6 @@ "@ethersproject/signing-key": "^5.0.8" } }, - "@ethersproject/web": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.12.tgz", - "integrity": "sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g==", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -7294,15 +7228,6 @@ "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true, - "optional": true - } } }, "browserify-sign": { @@ -7410,6 +7335,14 @@ "dev": true, "requires": { "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-gyp-build": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", + "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", + "dev": true + } } }, "bytes": { @@ -7510,16 +7443,6 @@ } } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "caniuse-lite": { "version": "1.0.30001174", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001174.tgz", @@ -8038,7 +7961,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -8264,7 +8186,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -10434,8 +10355,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -10443,17 +10363,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -10501,6 +10410,14 @@ "requires": { "min-document": "^2.19.0", "process": "^0.11.10" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + } } }, "got": { @@ -10561,7 +10478,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -10599,8 +10515,7 @@ "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, "has-to-string-tag-x": { "version": "1.4.1", @@ -10873,8 +10788,7 @@ "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" }, "is-ci": { "version": "2.0.0", @@ -10897,8 +10811,7 @@ "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, "is-descriptor": { "version": "1.0.2", @@ -10947,8 +10860,7 @@ "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, "is-object": { "version": "1.0.2", @@ -10977,7 +10889,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -10993,7 +10904,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -11836,8 +11746,7 @@ "object-inspect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" }, "object-is": { "version": "1.1.4", @@ -11847,13 +11756,33 @@ "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -11868,12 +11797,32 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "object.getownpropertydescriptors": { @@ -12145,12 +12094,6 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -12411,22 +12354,71 @@ }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } } } } @@ -12514,6 +12506,15 @@ "uuid": "^3.3.2" } }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -13172,13 +13173,34 @@ "call-bind": "^1.0.0", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "string.prototype.trimend": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -13188,7 +13210,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -13375,15 +13396,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } } } }, @@ -13745,6 +13757,14 @@ "dev": true, "requires": { "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-gyp-build": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", + "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", + "dev": true + } } }, "utf8": { @@ -14723,7 +14743,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -15087,7 +15106,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -15113,8 +15131,7 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-to-string-tag-x": { "version": "1.4.1", diff --git a/package.json b/package.json index dce53f5d..cfb6ee28 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "dev:deployUIProvider": "hardhat --network kovan deploy-UiPoolDataProvider", "main:deployUIProvider": "hardhat --network main deploy-UiPoolDataProvider", "matic:deployUIProvider": "hardhat --network matic deploy-UiPoolDataProvider", + "mumbai:deployUIProvider": "hardhat --network mumbai deploy-UiPoolDataProvider", "dev:deployUniswapRepayAdapter": "hardhat --network kovan deploy-UniswapRepayAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c", "dev:UniswapLiquiditySwapAdapter": "hardhat --network kovan deploy-UniswapLiquiditySwapAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c", "main:deployUniswapRepayAdapter": "hardhat --network main deploy-UniswapRepayAdapter --provider 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5 --router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D --weth 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 64a6dae4..79d75a49 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -6,7 +6,7 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider .addFlag('verify', 'Verify UiPoolDataProvider contract via Etherscan API.') .setAction(async ({ verify }, localBRE) => { await localBRE.run('set-DRE'); - + console.log('founds: ', await localBRE.ethers.getSigners()); if (!localBRE.network.config.chainId) { throw new Error('INVALID_CHAIN_ID'); } @@ -24,6 +24,10 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider incentivesController: '0x357D51124f59836DeD84c8a1730D72B749d8BC23', aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', }, + [ePolygonNetwork.mumbai]: { + incentivesController: '0xc31c45a46e55f714f9CB2b43Ae688487C16616e2', + aaveOracle: '0x584c84AA7aE807e18957f8E3693BccBD482357E2', + }, }; console.log(`\n- UiPoolDataProvider deployment`); From f7fde949a75bb0e890d67d9619883c74e4decd3a Mon Sep 17 00:00:00 2001 From: sendra Date: Fri, 9 Apr 2021 15:06:57 +0200 Subject: [PATCH 14/30] updated with latest addresses --- tasks/deployments/deploy-UiPoolDataProvider.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 79d75a49..21bf08ed 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -6,7 +6,6 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider .addFlag('verify', 'Verify UiPoolDataProvider contract via Etherscan API.') .setAction(async ({ verify }, localBRE) => { await localBRE.run('set-DRE'); - console.log('founds: ', await localBRE.ethers.getSigners()); if (!localBRE.network.config.chainId) { throw new Error('INVALID_CHAIN_ID'); } @@ -25,8 +24,8 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', }, [ePolygonNetwork.mumbai]: { - incentivesController: '0xc31c45a46e55f714f9CB2b43Ae688487C16616e2', - aaveOracle: '0x584c84AA7aE807e18957f8E3693BccBD482357E2', + incentivesController: '0xa20493558dB697369ffB1b4A4Dc6455ee26aEeff', + aaveOracle: '0xE6d947B89c837B761bf3B7D48bB406a7a2EEc3e0', }, }; From 1849484cbf8c040c09f8faa6edaae06db6c980e0 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 12 Apr 2021 09:37:55 +0200 Subject: [PATCH 15/30] updated with new mumbai addresses --- tasks/deployments/deploy-UiPoolDataProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 21bf08ed..881e71eb 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -24,8 +24,8 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', }, [ePolygonNetwork.mumbai]: { - incentivesController: '0xa20493558dB697369ffB1b4A4Dc6455ee26aEeff', - aaveOracle: '0xE6d947B89c837B761bf3B7D48bB406a7a2EEc3e0', + incentivesController: '0xCA8f76C244271A857CE76263e60d294EB24186A8', + aaveOracle: '0x3cC6db8dBBa233Fe342c2c8379993aCa231674bd', }, }; From 47b3d8ff65c2280a183edee8b626123152090676 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 12 Apr 2021 10:56:33 +0200 Subject: [PATCH 16/30] new mumbai addresses --- tasks/deployments/deploy-UiPoolDataProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 881e71eb..31290c2d 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -24,8 +24,8 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', }, [ePolygonNetwork.mumbai]: { - incentivesController: '0xCA8f76C244271A857CE76263e60d294EB24186A8', - aaveOracle: '0x3cC6db8dBBa233Fe342c2c8379993aCa231674bd', + incentivesController: '0xd3aC1EBa90c21D70464dDafd30E3Ff8941002929', + aaveOracle: '0x48beE000e8f86d0ED8c0fB22D63e789b0cE9Aed1', }, }; From b0caaee52e7483ca50809a29765afcd84ae6e928 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 12 Apr 2021 21:36:34 +0200 Subject: [PATCH 17/30] updated for latest mumbai addresses --- tasks/deployments/deploy-UiPoolDataProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 31290c2d..c2646923 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -24,8 +24,8 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', }, [ePolygonNetwork.mumbai]: { - incentivesController: '0xd3aC1EBa90c21D70464dDafd30E3Ff8941002929', - aaveOracle: '0x48beE000e8f86d0ED8c0fB22D63e789b0cE9Aed1', + incentivesController: '0xd41aE58e803Edf4304334acCE4DC4Ec34a63C644', + aaveOracle: '0xC365C653f7229894F93994CD0b30947Ab69Ff1D5', }, }; From 21fc210901c7d50fbd1acfe1a6b8cc97b59ed3c3 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 19 Apr 2021 17:17:30 +0200 Subject: [PATCH 18/30] fix: updated interface to last version --- .../interfaces/IAaveIncentivesController.sol | 103 +++++++++++++++++- 1 file changed, 99 insertions(+), 4 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index 8e9c74a7..4b49eb23 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -9,24 +9,119 @@ interface IAaveIncentivesController { uint256 index; } - function REWARD_TOKEN() external view returns (address rewardToken); + event RewardsAccrued(address indexed user, uint256 amount); - function PRECISION() external view returns (uint8); + event RewardsClaimed( + address indexed user, + address indexed to, + uint256 amount + ); + + event RewardsClaimed( + address indexed user, + address indexed to, + address indexed claimer, + uint256 amount + ); + + event ClaimerSet(address indexed user, address indexed claimer); function assets(address underlying) external view returns (AssetData memory assets); + /** + * @dev Whitelists an address to claim the rewards on behalf of another address + * @param user The address of the user + * @param claimer The address of the claimer + */ + function setClaimer(address user, address claimer) external; + + /** + * @dev Returns the whitelisted claimer for a certain address (0x0 if not set) + * @param user The address of the user + * @return The claimer address + */ + function getClaimer(address user) external view returns (address); + + /** + * @dev Configure assets for a certain rewards emission + * @param assets The assets to incentivize + * @param emissionsPerSecond The emission for each asset + */ + function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond) + external; + + + /** + * @dev Called by the corresponding asset on any update that affects the rewards distribution + * @param asset The address of the user + * @param userBalance The balance of the user of the asset in the lending pool + * @param totalSupply The total supply of the asset in the lending pool + **/ function handleAction( - address user, + address asset, uint256 userBalance, uint256 totalSupply ) external; + /** + * @dev Returns the total of rewards of an user, already accrued + not yet accrued + * @param user The address of the user + * @return The rewards + **/ function getRewardsBalance(address[] calldata assets, address user) external view returns (uint256); - function getUserUnclaimedRewards(address _user) external view returns (uint256); + /** + * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards + * @param amount Amount of rewards to claim + * @param to Address that will be receiving the rewards + * @return Rewards claimed + **/ + function claimRewards( + address[] calldata assets, + uint256 amount, + address to + ) external returns (uint256); + /** + * @dev Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must + * be whitelisted via "allowClaimOnBehalf" function by the RewardsAdmin role manager + * @param amount Amount of rewards to claim + * @param user Address to check and claim rewards + * @param to Address that will be receiving the rewards + * @return Rewards claimed + **/ + function claimRewardsOnBehalf( + address[] calldata assets, + uint256 amount, + address user, + address to + ) external returns (uint256); + + /** + * @dev returns the unclaimed rewards of the user + * @param user the address of the user + * @return the unclaimed user rewards + */ + function getUserUnclaimedRewards(address user) external view returns (uint256); + + /** + * @dev returns the unclaimed rewards of the user + * @param user the address of the user + * @param asset The asset to incentivize + * @return the user index for the asset + */ function getUserAssetData(address user, address asset) external view returns (uint256); + + /** + * @dev for backward compatibility with previous implementation of the Incentives controller + */ + function REWARD_TOKEN() external view returns (address); + + /** + * @dev for backward compatibility with previous implementation of the Incentives controller + */ + function PRECISION() external view returns (uint8); } From 360d37f9f87bcb7198202fb2d50ab49376f87d7a Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 19 Apr 2021 17:23:45 +0200 Subject: [PATCH 19/30] fix: updated mainnet task to deploy ui helper --- package.json | 4 ++-- tasks/deployments/deploy-UiPoolDataProvider.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index cfb6ee28..c3a97f23 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "print-contracts:kovan": "npm run hardhat:kovan -- print-contracts", "print-contracts:main": "npm run hardhat:main -- print-contracts", "print-contracts:ropsten": "npm run hardhat:main -- print-contracts", - "dev:deployUIProvider": "hardhat --network kovan deploy-UiPoolDataProvider", - "main:deployUIProvider": "hardhat --network main deploy-UiPoolDataProvider", + "dev:deployUIProvider": "hardhat --network kovan deploy-UiPoolDataProvider --verify", + "main:deployUIProvider": "hardhat --network main deploy-UiPoolDataProvider --verify", "matic:deployUIProvider": "hardhat --network matic deploy-UiPoolDataProvider", "mumbai:deployUIProvider": "hardhat --network mumbai deploy-UiPoolDataProvider", "dev:deployUniswapRepayAdapter": "hardhat --network kovan deploy-UniswapRepayAdapter --provider 0x88757f2f99175387aB4C6a4b3067c77A695b0349 --router 0xfcd87315f0e4067070ade8682fcdbc3006631441 --weth 0xd0a1e359811322d97991e03f863a0c30c2cf029c", diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index c2646923..1158fe90 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -15,10 +15,10 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider // incentivesController: '', // aaveOracle: '', // }, - // [eEthereumNetwork.main]: { - // incentivesController: '', - // aaveOracle: '0xa50ba011c48153de246e5192c8f9258a2ba79ca9', - // }, + [eEthereumNetwork.main]: { + incentivesController: '0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5', + aaveOracle: '0xa50ba011c48153de246e5192c8f9258a2ba79ca9', + }, [ePolygonNetwork.matic]: { incentivesController: '0x357D51124f59836DeD84c8a1730D72B749d8BC23', aaveOracle: '0x21451bD7b528896B4AB2b9764b521D6ed641708d', From 8000d838a36c666b307f7b30bdefd1269410ecbf Mon Sep 17 00:00:00 2001 From: sendra Date: Wed, 21 Apr 2021 17:45:19 +0200 Subject: [PATCH 20/30] Updated to new asset struct interface --- contracts/interfaces/IAaveIncentivesController.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index 4b49eb23..55f0db7d 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -4,9 +4,9 @@ pragma experimental ABIEncoderV2; interface IAaveIncentivesController { struct AssetData { - uint128 emissionPerSecond; - uint128 lastUpdateTimestamp; - uint256 index; + uint104 emissionPerSecond; + uint104 index; + uint40 lastUpdateTimestamp; } event RewardsAccrued(address indexed user, uint256 amount); From 2a19131b7af38bf5233e0d34f83b450635e03676 Mon Sep 17 00:00:00 2001 From: David Racero Date: Wed, 21 Apr 2021 18:00:00 +0200 Subject: [PATCH 21/30] feat: Updated to new interface of Incentives Controller --- .../interfaces/IAaveIncentivesController.sol | 35 ++++++++++--------- contracts/misc/UiPoolDataProvider.sol | 28 ++++++++------- .../misc/interfaces/IUiPoolDataProvider.sol | 6 ++-- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index 55f0db7d..efa132b2 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -3,19 +3,9 @@ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; interface IAaveIncentivesController { - struct AssetData { - uint104 emissionPerSecond; - uint104 index; - uint40 lastUpdateTimestamp; - } - event RewardsAccrued(address indexed user, uint256 amount); - event RewardsClaimed( - address indexed user, - address indexed to, - uint256 amount - ); + event RewardsClaimed(address indexed user, address indexed to, uint256 amount); event RewardsClaimed( address indexed user, @@ -26,7 +16,19 @@ interface IAaveIncentivesController { event ClaimerSet(address indexed user, address indexed claimer); - function assets(address underlying) external view returns (AssetData memory assets); + /* + * @dev Returns the configuration of the distribution for a certain asset + * @param asset The address of the reference asset of the distribution + * @return The asset index, the emission per second and the last updated timestamp + **/ + function getAssetData(address asset) + external + view + returns ( + uint256, + uint256, + uint256 + ); /** * @dev Whitelists an address to claim the rewards on behalf of another address @@ -50,7 +52,6 @@ interface IAaveIncentivesController { function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond) external; - /** * @dev Called by the corresponding asset on any update that affects the rewards distribution * @param asset The address of the user @@ -116,12 +117,12 @@ interface IAaveIncentivesController { function getUserAssetData(address user, address asset) external view returns (uint256); /** - * @dev for backward compatibility with previous implementation of the Incentives controller - */ + * @dev for backward compatibility with previous implementation of the Incentives controller + */ function REWARD_TOKEN() external view returns (address); /** - * @dev for backward compatibility with previous implementation of the Incentives controller - */ + * @dev for backward compatibility with previous implementation of the Incentives controller + */ function PRECISION() external view returns (uint8); } diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 7d2aef55..a3f25c05 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -131,21 +131,23 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives - IAaveIncentivesController.AssetData memory tokenIncentivesInfo = - incentivesController.assets(reserveData.aTokenAddress); - reserveData.aEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; - reserveData.aIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; - reserveData.aTokenIncentivesIndex = tokenIncentivesInfo.index; + ( + reserveData.aEmissionPerSecond, + reserveData.aIncentivesLastUpdateTimestamp, + reserveData.aTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.aTokenAddress); - tokenIncentivesInfo = incentivesController.assets(reserveData.stableDebtTokenAddress); - reserveData.sEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; - reserveData.sIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; - reserveData.sTokenIncentivesIndex = tokenIncentivesInfo.index; + ( + reserveData.sEmissionPerSecond, + reserveData.sIncentivesLastUpdateTimestamp, + reserveData.sTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); - tokenIncentivesInfo = incentivesController.assets(reserveData.variableDebtTokenAddress); - reserveData.vEmissionPerSecond = tokenIncentivesInfo.emissionPerSecond; - reserveData.vIncentivesLastUpdateTimestamp = tokenIncentivesInfo.lastUpdateTimestamp; - reserveData.vTokenIncentivesIndex = tokenIncentivesInfo.index; + ( + reserveData.vEmissionPerSecond, + reserveData.vIncentivesLastUpdateTimestamp, + reserveData.vTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); if (user != address(0)) { // incentives diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol index 43e4e997..34f06d1c 100644 --- a/contracts/misc/interfaces/IUiPoolDataProvider.sol +++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol @@ -43,9 +43,9 @@ interface IUiPoolDataProvider { uint256 stableRateSlope1; uint256 stableRateSlope2; // incentives - uint128 aEmissionPerSecond; - uint128 vEmissionPerSecond; - uint128 sEmissionPerSecond; + uint256 aEmissionPerSecond; + uint256 vEmissionPerSecond; + uint256 sEmissionPerSecond; uint256 aIncentivesLastUpdateTimestamp; uint256 vIncentivesLastUpdateTimestamp; uint256 sIncentivesLastUpdateTimestamp; From 9df1502f2262d0783cf2c8c0001066fe8b82f0af Mon Sep 17 00:00:00 2001 From: sendra Date: Wed, 21 Apr 2021 19:16:11 +0200 Subject: [PATCH 22/30] correct mainnet incentives controller --- tasks/deployments/deploy-UiPoolDataProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 1158fe90..984d5a13 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -16,7 +16,7 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider // aaveOracle: '', // }, [eEthereumNetwork.main]: { - incentivesController: '0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5', + incentivesController: '0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5', aaveOracle: '0xa50ba011c48153de246e5192c8f9258a2ba79ca9', }, [ePolygonNetwork.matic]: { From 7ffb0e573fbf48160d93b974bd530ff06d3aea0d Mon Sep 17 00:00:00 2001 From: David Racero Date: Thu, 22 Apr 2021 10:17:45 +0200 Subject: [PATCH 23/30] fix: Change the order of return variables of incentives getAssetData --- contracts/misc/UiPoolDataProvider.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index a3f25c05..bbd78f29 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -132,21 +132,21 @@ contract UiPoolDataProvider is IUiPoolDataProvider { // incentives ( + reserveData.aTokenIncentivesIndex, reserveData.aEmissionPerSecond, - reserveData.aIncentivesLastUpdateTimestamp, - reserveData.aTokenIncentivesIndex + reserveData.aIncentivesLastUpdateTimestamp ) = incentivesController.getAssetData(reserveData.aTokenAddress); ( + reserveData.sTokenIncentivesIndex, reserveData.sEmissionPerSecond, - reserveData.sIncentivesLastUpdateTimestamp, - reserveData.sTokenIncentivesIndex + reserveData.sIncentivesLastUpdateTimestamp ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); ( + reserveData.vTokenIncentivesIndex, reserveData.vEmissionPerSecond, - reserveData.vIncentivesLastUpdateTimestamp, - reserveData.vTokenIncentivesIndex + reserveData.vIncentivesLastUpdateTimestamp ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); if (user != address(0)) { From 60dc2346c822e7faa6d7a31cb38b3d5d22c30cdc Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 12:26:30 +0200 Subject: [PATCH 24/30] fix: added try catch for incentives controller interactions --- contracts/misc/UiPoolDataProvider.sol | 78 ++++++++++++++++++--------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index a3f25c05..6a051f23 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -131,38 +131,61 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives - ( - reserveData.aEmissionPerSecond, - reserveData.aIncentivesLastUpdateTimestamp, - reserveData.aTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.aTokenAddress); + try incentivesController.getAssetData(reserveData.aTokenAddress) returns ( + uint256 aEmissionPerSecond, uint256 aIncentivesLastUpdateTimestamp, uint256 aTokenIncentivesIndex) { + + reserveData.aEmissionPerSecond = aEmissionPerSecond; + reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; + reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; + } catch Error(string memory /*reason*/) { + } + + try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( + uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { + + reserveData.vEmissionPerSecond = vEmissionPerSecond; + reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; + reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; + } catch Error(string memory /*reason*/) { + } - ( - reserveData.sEmissionPerSecond, - reserveData.sIncentivesLastUpdateTimestamp, - reserveData.sTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); - - ( - reserveData.vEmissionPerSecond, - reserveData.vIncentivesLastUpdateTimestamp, - reserveData.vTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); + try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( + uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { + + reserveData.sEmissionPerSecond = sEmissionPerSecond; + reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; + reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; + } catch Error(string memory /*reason*/) { + } if (user != address(0)) { // incentives - userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( + try incentivesController.getUserAssetData( user, reserveData.aTokenAddress - ); - userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData( - user, - reserveData.stableDebtTokenAddress - ); - userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData( + ) returns ( + uint256 aTokenincentivesUserIndex) { + userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) { + } + + try incentivesController.getUserAssetData( user, reserveData.variableDebtTokenAddress - ); + ) returns ( + uint256 vTokenincentivesUserIndex) { + userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) { + } + + try incentivesController.getUserAssetData( + user, + reserveData.stableDebtTokenAddress + ) returns ( + uint256 sTokenincentivesUserIndex) { + userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) { + } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; userReservesData[i].scaledATokenBalance = IAToken(reserveData.aTokenAddress) @@ -196,11 +219,16 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } + uint256 unclaimedRewards; + try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { + unclaimedRewards = rewards; + } catch Error (string memory) {} + return ( reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS), - incentivesController.getUserUnclaimedRewards(user) + unclaimedRewards ); } } From 60ee0c54eb8e880b1392cc9f69f4381015b2b20b Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 12:39:37 +0200 Subject: [PATCH 25/30] fix: added check if incentives contract is 0 --- contracts/misc/UiPoolDataProvider.sol | 85 +++++++++++---------------- 1 file changed, 33 insertions(+), 52 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 6a051f23..c24e8939 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -131,60 +131,41 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ); // incentives - try incentivesController.getAssetData(reserveData.aTokenAddress) returns ( - uint256 aEmissionPerSecond, uint256 aIncentivesLastUpdateTimestamp, uint256 aTokenIncentivesIndex) { - - reserveData.aEmissionPerSecond = aEmissionPerSecond; - reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; - reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; - } catch Error(string memory /*reason*/) { - } - - try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( - uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { - - reserveData.vEmissionPerSecond = vEmissionPerSecond; - reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; - reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; - } catch Error(string memory /*reason*/) { - } + if (address(0) != address(incentivesController)) { + ( + reserveData.aEmissionPerSecond, + reserveData.aIncentivesLastUpdateTimestamp, + reserveData.aTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.aTokenAddress); - try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( - uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { - - reserveData.sEmissionPerSecond = sEmissionPerSecond; - reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; - reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; - } catch Error(string memory /*reason*/) { + ( + reserveData.sEmissionPerSecond, + reserveData.sIncentivesLastUpdateTimestamp, + reserveData.sTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); + + ( + reserveData.vEmissionPerSecond, + reserveData.vIncentivesLastUpdateTimestamp, + reserveData.vTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); } if (user != address(0)) { // incentives - try incentivesController.getUserAssetData( - user, - reserveData.aTokenAddress - ) returns ( - uint256 aTokenincentivesUserIndex) { - userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) { - } - - try incentivesController.getUserAssetData( - user, - reserveData.variableDebtTokenAddress - ) returns ( - uint256 vTokenincentivesUserIndex) { - userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) { - } - - try incentivesController.getUserAssetData( - user, - reserveData.stableDebtTokenAddress - ) returns ( - uint256 sTokenincentivesUserIndex) { - userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) { + if (address(0) != address(incentivesController)) { + userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.aTokenAddress + ); + userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.stableDebtTokenAddress + ); + userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData( + user, + reserveData.variableDebtTokenAddress + ); } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; @@ -220,9 +201,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } uint256 unclaimedRewards; - try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { - unclaimedRewards = rewards; - } catch Error (string memory) {} + if (address(0) != address(incentivesController)) { + unclaimedRewards = incentivesController.getUserUnclaimedRewards(user); + } return ( reservesData, From 8b8736dc5a4956ae470990b3f4b05556b6cd5ab8 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 15:26:36 +0200 Subject: [PATCH 26/30] Back to try catch, but with also 0 address catching --- contracts/misc/UiPoolDataProvider.sol | 67 +++++++++++++++++---------- package-lock.json | 35 ++++++++------ 2 files changed, 64 insertions(+), 38 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index c24e8939..70aef7b9 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -132,40 +132,57 @@ contract UiPoolDataProvider is IUiPoolDataProvider { // incentives if (address(0) != address(incentivesController)) { - ( - reserveData.aEmissionPerSecond, - reserveData.aIncentivesLastUpdateTimestamp, - reserveData.aTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.aTokenAddress); + try incentivesController.getAssetData(reserveData.aTokenAddress) returns ( + uint256 aEmissionPerSecond, uint256 aIncentivesLastUpdateTimestamp, uint256 aTokenIncentivesIndex) { - ( - reserveData.sEmissionPerSecond, - reserveData.sIncentivesLastUpdateTimestamp, - reserveData.sTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); + reserveData.aEmissionPerSecond = aEmissionPerSecond; + reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; + reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; + } catch Error(string memory /*reason*/) {} - ( - reserveData.vEmissionPerSecond, - reserveData.vIncentivesLastUpdateTimestamp, - reserveData.vTokenIncentivesIndex - ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); + try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( + uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { + + reserveData.vEmissionPerSecond = vEmissionPerSecond; + reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; + reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; + } catch Error(string memory /*reason*/) {} + + try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( + uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { + + reserveData.sEmissionPerSecond = sEmissionPerSecond; + reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; + reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; + } catch Error(string memory /*reason*/) {} } if (user != address(0)) { // incentives if (address(0) != address(incentivesController)) { - userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( + try incentivesController.getUserAssetData( user, reserveData.aTokenAddress - ); - userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData( - user, - reserveData.stableDebtTokenAddress - ); - userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData( + ) returns ( + uint256 aTokenincentivesUserIndex) { + userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) {} + + try incentivesController.getUserAssetData( user, reserveData.variableDebtTokenAddress - ); + ) returns ( + uint256 vTokenincentivesUserIndex) { + userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) {} + + try incentivesController.getUserAssetData( + user, + reserveData.stableDebtTokenAddress + ) returns ( + uint256 sTokenincentivesUserIndex) { + userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; + } catch Error(string memory /*reason*/) {} } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; @@ -202,7 +219,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider { uint256 unclaimedRewards; if (address(0) != address(incentivesController)) { - unclaimedRewards = incentivesController.getUserUnclaimedRewards(user); + // try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { + // unclaimedRewards = rewards; + // } catch Error (string memory) {} } return ( diff --git a/package-lock.json b/package-lock.json index 6cd1ef03..c5cc43eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7709,6 +7709,15 @@ "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "optional": true + } } }, "browserify-sign": { @@ -7819,9 +7828,9 @@ }, "dependencies": { "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", + "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", "dev": true } } @@ -10891,14 +10900,6 @@ "requires": { "min-document": "^2.19.0", "process": "^0.11.10" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } } }, "got": { @@ -12575,6 +12576,12 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -14241,9 +14248,9 @@ }, "dependencies": { "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", + "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", "dev": true } } From acc2207d81d136781735360f89bd513c33d6d245 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 15:57:26 +0200 Subject: [PATCH 27/30] added kovan config --- tasks/deployments/deploy-UiPoolDataProvider.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasks/deployments/deploy-UiPoolDataProvider.ts b/tasks/deployments/deploy-UiPoolDataProvider.ts index 984d5a13..6cc07449 100644 --- a/tasks/deployments/deploy-UiPoolDataProvider.ts +++ b/tasks/deployments/deploy-UiPoolDataProvider.ts @@ -11,10 +11,10 @@ task(`deploy-${eContractid.UiPoolDataProvider}`, `Deploys the UiPoolDataProvider } const addressesByNetwork = { - // [eEthereumNetwork.kovan]: { - // incentivesController: '', - // aaveOracle: '', - // }, + [eEthereumNetwork.kovan]: { + incentivesController: '0x0000000000000000000000000000000000000000', + aaveOracle: '0x8fb777d67e9945e2c01936e319057f9d41d559e6', + }, [eEthereumNetwork.main]: { incentivesController: '0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5', aaveOracle: '0xa50ba011c48153de246e5192c8f9258a2ba79ca9', From f5f3adeb0f83f229ddf879346dbb5707bcb16e45 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 16:29:30 +0200 Subject: [PATCH 28/30] removed error from catch so it catches everything --- contracts/misc/UiPoolDataProvider.sol | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 70aef7b9..7a77c43a 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -138,7 +138,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.aEmissionPerSecond = aEmissionPerSecond; reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; - } catch Error(string memory /*reason*/) {} + } catch {} try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { @@ -146,7 +146,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.vEmissionPerSecond = vEmissionPerSecond; reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; - } catch Error(string memory /*reason*/) {} + } catch {} try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { @@ -154,7 +154,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.sEmissionPerSecond = sEmissionPerSecond; reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; - } catch Error(string memory /*reason*/) {} + } catch {} } if (user != address(0)) { @@ -166,7 +166,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 aTokenincentivesUserIndex) { userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) {} + } catch {} try incentivesController.getUserAssetData( user, @@ -174,7 +174,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 vTokenincentivesUserIndex) { userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) {} + } catch {} try incentivesController.getUserAssetData( user, @@ -182,7 +182,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 sTokenincentivesUserIndex) { userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; - } catch Error(string memory /*reason*/) {} + } catch {} } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; @@ -219,9 +219,9 @@ contract UiPoolDataProvider is IUiPoolDataProvider { uint256 unclaimedRewards; if (address(0) != address(incentivesController)) { - // try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { - // unclaimedRewards = rewards; - // } catch Error (string memory) {} + try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { + unclaimedRewards = rewards; + } catch {} } return ( From d36b9fd14c0cf96dc927531d814713785f486f0a Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 16:43:21 +0200 Subject: [PATCH 29/30] added other catch --- contracts/misc/UiPoolDataProvider.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index 7a77c43a..bbb8290d 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -138,7 +138,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.aEmissionPerSecond = aEmissionPerSecond; reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { @@ -146,7 +146,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.vEmissionPerSecond = vEmissionPerSecond; reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { @@ -154,7 +154,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { reserveData.sEmissionPerSecond = sEmissionPerSecond; reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} } if (user != address(0)) { @@ -166,7 +166,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 aTokenincentivesUserIndex) { userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} try incentivesController.getUserAssetData( user, @@ -174,7 +174,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 vTokenincentivesUserIndex) { userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} try incentivesController.getUserAssetData( user, @@ -182,7 +182,7 @@ contract UiPoolDataProvider is IUiPoolDataProvider { ) returns ( uint256 sTokenincentivesUserIndex) { userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; - } catch {} + } catch Error(string memory) {} catch (bytes memory) {} } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; From c1c2cffd2671678c02381c862233429d76145cf1 Mon Sep 17 00:00:00 2001 From: sendra Date: Mon, 26 Apr 2021 17:51:39 +0200 Subject: [PATCH 30/30] remove try catch as it doesnt catch the implementation exeption --- contracts/misc/UiPoolDataProvider.sol | 68 +++++++++------------------ 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol index bbb8290d..63dd7a1c 100644 --- a/contracts/misc/UiPoolDataProvider.sol +++ b/contracts/misc/UiPoolDataProvider.sol @@ -132,57 +132,40 @@ contract UiPoolDataProvider is IUiPoolDataProvider { // incentives if (address(0) != address(incentivesController)) { - try incentivesController.getAssetData(reserveData.aTokenAddress) returns ( - uint256 aEmissionPerSecond, uint256 aIncentivesLastUpdateTimestamp, uint256 aTokenIncentivesIndex) { + ( + reserveData.aEmissionPerSecond, + reserveData.aIncentivesLastUpdateTimestamp, + reserveData.aTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.aTokenAddress); - reserveData.aEmissionPerSecond = aEmissionPerSecond; - reserveData.aIncentivesLastUpdateTimestamp = aIncentivesLastUpdateTimestamp; - reserveData.aTokenIncentivesIndex = aTokenIncentivesIndex; - } catch Error(string memory) {} catch (bytes memory) {} + ( + reserveData.sEmissionPerSecond, + reserveData.sIncentivesLastUpdateTimestamp, + reserveData.sTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.stableDebtTokenAddress); - try incentivesController.getAssetData(reserveData.variableDebtTokenAddress) returns ( - uint256 vEmissionPerSecond, uint256 vIncentivesLastUpdateTimestamp, uint256 vTokenIncentivesIndex) { - - reserveData.vEmissionPerSecond = vEmissionPerSecond; - reserveData.vIncentivesLastUpdateTimestamp = vIncentivesLastUpdateTimestamp; - reserveData.vTokenIncentivesIndex = vTokenIncentivesIndex; - } catch Error(string memory) {} catch (bytes memory) {} - - try incentivesController.getAssetData(reserveData.stableDebtTokenAddress) returns ( - uint256 sEmissionPerSecond, uint256 sIncentivesLastUpdateTimestamp, uint256 sTokenIncentivesIndex) { - - reserveData.sEmissionPerSecond = sEmissionPerSecond; - reserveData.sIncentivesLastUpdateTimestamp = sIncentivesLastUpdateTimestamp; - reserveData.sTokenIncentivesIndex = sTokenIncentivesIndex; - } catch Error(string memory) {} catch (bytes memory) {} + ( + reserveData.vEmissionPerSecond, + reserveData.vIncentivesLastUpdateTimestamp, + reserveData.vTokenIncentivesIndex + ) = incentivesController.getAssetData(reserveData.variableDebtTokenAddress); } if (user != address(0)) { // incentives if (address(0) != address(incentivesController)) { - try incentivesController.getUserAssetData( + userReservesData[i].aTokenincentivesUserIndex = incentivesController.getUserAssetData( user, reserveData.aTokenAddress - ) returns ( - uint256 aTokenincentivesUserIndex) { - userReservesData[i].aTokenincentivesUserIndex = aTokenincentivesUserIndex; - } catch Error(string memory) {} catch (bytes memory) {} - - try incentivesController.getUserAssetData( + ); + userReservesData[i].vTokenincentivesUserIndex = incentivesController.getUserAssetData( user, reserveData.variableDebtTokenAddress - ) returns ( - uint256 vTokenincentivesUserIndex) { - userReservesData[i].vTokenincentivesUserIndex = vTokenincentivesUserIndex; - } catch Error(string memory) {} catch (bytes memory) {} - - try incentivesController.getUserAssetData( + ); + userReservesData[i].sTokenincentivesUserIndex = incentivesController.getUserAssetData( user, reserveData.stableDebtTokenAddress - ) returns ( - uint256 sTokenincentivesUserIndex) { - userReservesData[i].sTokenincentivesUserIndex = sTokenincentivesUserIndex; - } catch Error(string memory) {} catch (bytes memory) {} + ); } // user reserve data userReservesData[i].underlyingAsset = reserveData.underlyingAsset; @@ -217,18 +200,11 @@ contract UiPoolDataProvider is IUiPoolDataProvider { } } - uint256 unclaimedRewards; - if (address(0) != address(incentivesController)) { - try incentivesController.getUserUnclaimedRewards(user) returns (uint256 rewards) { - unclaimedRewards = rewards; - } catch {} - } - return ( reservesData, userReservesData, oracle.getAssetPrice(MOCK_USD_ADDRESS), - unclaimedRewards + incentivesController.getUserUnclaimedRewards(user) ); } }