From fa4df5860afb3c2de2ce1363b3a274e7d8417f83 Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Thu, 21 Apr 2022 00:49:13 +0530 Subject: [PATCH 1/2] avax rewards: aave v3 --- .../connectors/aave/aave-rewards/helpers.sol | 13 ---- .../connectors/aave/aave-rewards/main.sol | 51 ------------ .../aave/aave-rewards/{ => v2}/events.sol | 0 .../aave/aave-rewards/v2/helpers.sol | 14 ++++ .../aave/aave-rewards/{ => v2}/interface.sol | 0 .../connectors/aave/aave-rewards/v2/main.sol | 52 +++++++++++++ .../aave/aave-rewards/v3/events.sol | 13 ++++ .../aave/aave-rewards/v3/helpers.sol | 14 ++++ .../aave/aave-rewards/v3/interface.sol | 15 ++++ .../connectors/aave/aave-rewards/v3/main.sol | 78 +++++++++++++++++++ 10 files changed, 186 insertions(+), 64 deletions(-) delete mode 100644 contracts/avalanche/connectors/aave/aave-rewards/helpers.sol delete mode 100644 contracts/avalanche/connectors/aave/aave-rewards/main.sol rename contracts/avalanche/connectors/aave/aave-rewards/{ => v2}/events.sol (100%) create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v2/helpers.sol rename contracts/avalanche/connectors/aave/aave-rewards/{ => v2}/interface.sol (100%) create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v2/main.sol create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v3/events.sol create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v3/helpers.sol create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v3/interface.sol create mode 100644 contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol diff --git a/contracts/avalanche/connectors/aave/aave-rewards/helpers.sol b/contracts/avalanche/connectors/aave/aave-rewards/helpers.sol deleted file mode 100644 index 9f4ff500..00000000 --- a/contracts/avalanche/connectors/aave/aave-rewards/helpers.sol +++ /dev/null @@ -1,13 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; - -import { DSMath } from "../../../common/math.sol"; -import { Basic } from "../../../common/basic.sol"; -import { AaveIncentivesInterface } from "./interface.sol"; - -abstract contract Helpers is DSMath, Basic { - /** - * @dev Aave Incentives - */ - AaveIncentivesInterface internal constant incentives = AaveIncentivesInterface(0x01D83Fe6A10D2f2B7AF17034343746188272cAc9); -} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/main.sol b/contracts/avalanche/connectors/aave/aave-rewards/main.sol deleted file mode 100644 index d18a80e2..00000000 --- a/contracts/avalanche/connectors/aave/aave-rewards/main.sol +++ /dev/null @@ -1,51 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; - - -/** - * @title Aave Rewards. - * @dev Claim Aave rewards. - */ - -import { TokenInterface } from "../../../common/interfaces.sol"; -import { Stores } from "../../../common/stores.sol"; -import { Helpers } from "./helpers.sol"; -import { Events } from "./events.sol"; - -abstract contract IncentivesResolver is Helpers, Events { - - /** - * @dev Claim Pending Rewards. - * @notice Claim Pending Rewards from Aave incentives contract. - * @param assets The list of assets supplied and borrowed. - * @param amt The amount of reward to claim. (uint(-1) for max) - * @param getId ID to retrieve amt. - * @param setId ID stores the amount of rewards claimed. - */ - function claim( - address[] calldata assets, - uint256 amt, - uint256 getId, - uint256 setId - ) external payable returns (string memory _eventName, bytes memory _eventParam) { - uint _amt = getUint(getId, amt); - - require(assets.length > 0, "invalid-assets"); - - _amt = incentives.claimRewards(assets, _amt, address(this)); - - - TokenInterface wavax = TokenInterface(wavaxAddr); - uint256 wavaxAmount = wavax.balanceOf(address(this)); - convertWavaxToAvax(wavaxAmount > 0, wavax, wavaxAmount); - - setUint(setId, _amt); - - _eventName = "LogClaimed(address[],uint256,uint256,uint256)"; - _eventParam = abi.encode(assets, _amt, getId, setId); - } -} - -contract ConnectV2AaveIncentivesAvalanche is IncentivesResolver { - string public constant name = "Aave-Incentives-v1"; -} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/events.sol b/contracts/avalanche/connectors/aave/aave-rewards/v2/events.sol similarity index 100% rename from contracts/avalanche/connectors/aave/aave-rewards/events.sol rename to contracts/avalanche/connectors/aave/aave-rewards/v2/events.sol diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v2/helpers.sol b/contracts/avalanche/connectors/aave/aave-rewards/v2/helpers.sol new file mode 100644 index 00000000..f9b7da1a --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v2/helpers.sol @@ -0,0 +1,14 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +import { DSMath } from "../../../../common/math.sol"; +import { Basic } from "../../../../common/basic.sol"; +import { AaveIncentivesInterface } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + /** + * @dev Aave Incentives + */ + AaveIncentivesInterface internal constant incentives = + AaveIncentivesInterface(0x929EC64c34a17401F460460D4B9390518E5B473e); +} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/interface.sol b/contracts/avalanche/connectors/aave/aave-rewards/v2/interface.sol similarity index 100% rename from contracts/avalanche/connectors/aave/aave-rewards/interface.sol rename to contracts/avalanche/connectors/aave/aave-rewards/v2/interface.sol diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v2/main.sol b/contracts/avalanche/connectors/aave/aave-rewards/v2/main.sol new file mode 100644 index 00000000..e6f5fd8b --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v2/main.sol @@ -0,0 +1,52 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +/** + * @title Aave Rewards. + * @dev Claim Aave rewards. + */ + +import { TokenInterface } from "../../../../common/interfaces.sol"; +import { Stores } from "../../../../common/stores.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; + +abstract contract IncentivesResolver is Helpers, Events { + /** + * @dev Claim Pending Rewards. + * @notice Claim Pending Rewards from Aave incentives contract. + * @param assets The list of assets supplied and borrowed. + * @param amt The amount of reward to claim. (uint(-1) for max) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of rewards claimed. + */ + function claim( + address[] calldata assets, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + require(assets.length > 0, "invalid-assets"); + + _amt = incentives.claimRewards(assets, _amt, address(this)); + + TokenInterface wavax = TokenInterface(wavaxAddr); + uint256 wavaxAmount = wavax.balanceOf(address(this)); + convertWavaxToAvax(wavaxAmount > 0, wavax, wavaxAmount); + + setUint(setId, _amt); + + _eventName = "LogClaimed(address[],uint256,uint256,uint256)"; + _eventParam = abi.encode(assets, _amt, getId, setId); + } +} + +contract ConnectV2AaveIncentivesAvalanche is IncentivesResolver { + string public constant name = "Aave-Incentives-v1"; +} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v3/events.sol b/contracts/avalanche/connectors/aave/aave-rewards/v3/events.sol new file mode 100644 index 00000000..4d91ea53 --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v3/events.sol @@ -0,0 +1,13 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +contract Events { + event LogClaimed( + address[] assets, + uint256 amt, + uint256 getId, + uint256 setId + ); + + event LogAllClaimed(address[] assets, uint256[] amt); +} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v3/helpers.sol b/contracts/avalanche/connectors/aave/aave-rewards/v3/helpers.sol new file mode 100644 index 00000000..d9f47736 --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v3/helpers.sol @@ -0,0 +1,14 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +import { DSMath } from "../../../../common/math.sol"; +import { Basic } from "../../../../common/basic.sol"; +import { AaveIncentivesInterface } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + /** + * @dev Aave v3 Incentives + */ + AaveIncentivesInterface internal constant incentives = + AaveIncentivesInterface(0x01D83Fe6A10D2f2B7AF17034343746188272cAc9); +} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v3/interface.sol b/contracts/avalanche/connectors/aave/aave-rewards/v3/interface.sol new file mode 100644 index 00000000..f2ab4704 --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v3/interface.sol @@ -0,0 +1,15 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +interface AaveIncentivesInterface { + function claimRewards( + address[] calldata assets, + uint256 amount, + address to, + address reward + ) external returns (uint256); + + function claimAllRewards(address[] calldata assets, address to) + external + returns (address[] memory rewardsList, uint256[] memory claimedAmounts); +} diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol b/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol new file mode 100644 index 00000000..c82156a2 --- /dev/null +++ b/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol @@ -0,0 +1,78 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +/** + * @title Aave v3 Rewards. + * @dev Claim Aave v3 rewards. + */ + +import { TokenInterface } from "../../../../common/interfaces.sol"; +import { Stores } from "../../../../common/stores.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; + +abstract contract IncentivesResolver is Helpers, Events { + /** + * @dev Claim Pending Rewards. + * @notice Claim Pending Rewards from Aave v3 incentives contract. + * @param assets The list of assets supplied and borrowed. + * @param amt The amount of reward to claim. (uint(-1) for max) + * @param reward The address of reward token to claim. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of rewards claimed. + */ + function claim( + address[] calldata assets, + uint256 amt, + address reward, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + require(assets.length > 0, "invalid-assets"); + + _amt = incentives.claimRewards(assets, _amt, address(this), reward); + + TokenInterface wavax = TokenInterface(wavaxAddr); + uint256 wavaxAmount = wavax.balanceOf(address(this)); + convertWavaxToAvax(wavaxAmount > 0, wavax, wavaxAmount); + + setUint(setId, _amt); + + _eventName = "LogClaimed(address[],uint256,uint256,uint256)"; + _eventParam = abi.encode(assets, _amt, getId, setId); + } + + /** + * @dev Claim All Pending Rewards. + * @notice Claim All Pending Rewards from Aave v3 incentives contract. + * @param assets The list of assets supplied and borrowed. + */ + function claimAll(address[] calldata assets) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(assets.length > 0, "invalid-assets"); + uint256[] memory _amt = new uint256[](assets.length); + address[] memory _rewards = new address[](assets.length); + + (_rewards, _amt) = incentives.claimAllRewards(assets, address(this)); + + TokenInterface wavax = TokenInterface(wavaxAddr); + uint256 wavaxAmount = wavax.balanceOf(address(this)); + convertWavaxToAvax(wavaxAmount > 0, wavax, wavaxAmount); + + _eventName = "LogAllClaimed(address[],uint256[])"; + _eventParam = abi.encode(assets, _amt); + } +} + +contract ConnectV3AaveIncentivesAvalanche is IncentivesResolver { + string public constant name = "Aave-Incentives-v1"; +} From 85ea05e6b48970c1c7ff3717fd22a059e714c45d Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Thu, 21 Apr 2022 01:29:05 +0530 Subject: [PATCH 2/2] minor fix --- contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol b/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol index c82156a2..9131aca0 100644 --- a/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol +++ b/contracts/avalanche/connectors/aave/aave-rewards/v3/main.sol @@ -74,5 +74,5 @@ abstract contract IncentivesResolver is Helpers, Events { } contract ConnectV3AaveIncentivesAvalanche is IncentivesResolver { - string public constant name = "Aave-Incentives-v1"; + string public constant name = "Aave-V3-Incentives-v1"; }