From 166ce2497143e551943e6509e957a83752dbfc5b Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Thu, 18 May 2023 01:23:54 +0400 Subject: [PATCH 1/3] Aave v3 claim connectors --- .../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 +++++++++++++++++++ .../aave/aave-v3-rewards/events.sol | 13 ++++ .../aave/aave-v3-rewards/helpers.sol | 14 ++++ .../aave/aave-v3-rewards/interface.sol | 15 ++++ .../connectors/aave/aave-v3-rewards/main.sol | 78 +++++++++++++++++++ .../aave/aave-v3-rewards/events.sol | 13 ++++ .../aave/aave-v3-rewards/helpers.sol | 14 ++++ .../aave/aave-v3-rewards/interface.sol | 15 ++++ .../connectors/aave/aave-v3-rewards/main.sol | 78 +++++++++++++++++++ 12 files changed, 360 insertions(+) create mode 100644 contracts/arbitrum/connectors/aave/aave-rewards/v3/events.sol create mode 100644 contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol create mode 100644 contracts/arbitrum/connectors/aave/aave-rewards/v3/interface.sol create mode 100644 contracts/arbitrum/connectors/aave/aave-rewards/v3/main.sol create mode 100644 contracts/mainnet/connectors/aave/aave-v3-rewards/events.sol create mode 100644 contracts/mainnet/connectors/aave/aave-v3-rewards/helpers.sol create mode 100644 contracts/mainnet/connectors/aave/aave-v3-rewards/interface.sol create mode 100644 contracts/mainnet/connectors/aave/aave-v3-rewards/main.sol create mode 100644 contracts/polygon/connectors/aave/aave-v3-rewards/events.sol create mode 100644 contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol create mode 100644 contracts/polygon/connectors/aave/aave-v3-rewards/interface.sol create mode 100644 contracts/polygon/connectors/aave/aave-v3-rewards/main.sol diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/events.sol b/contracts/arbitrum/connectors/aave/aave-rewards/v3/events.sol new file mode 100644 index 00000000..683f3049 --- /dev/null +++ b/contracts/arbitrum/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, address[] rewards, uint256[] amts); +} diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol b/contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol new file mode 100644 index 00000000..ff7322a6 --- /dev/null +++ b/contracts/arbitrum/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(0x929EC64c34a17401F460460D4B9390518E5B473e); +} diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/interface.sol b/contracts/arbitrum/connectors/aave/aave-rewards/v3/interface.sol new file mode 100644 index 00000000..f2ab4704 --- /dev/null +++ b/contracts/arbitrum/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/arbitrum/connectors/aave/aave-rewards/v3/main.sol b/contracts/arbitrum/connectors/aave/aave-rewards/v3/main.sol new file mode 100644 index 00000000..5c31ed79 --- /dev/null +++ b/contracts/arbitrum/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 weth = TokenInterface(wethAddr); + uint256 wethAmount = weth.balanceOf(address(this)); + convertWethToEth(wethAmount > 0, weth, wethAmount); + + 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 _amts = new uint256[](assets.length); + address[] memory _rewards = new address[](assets.length); + + (_rewards, _amts) = incentives.claimAllRewards(assets, address(this)); + + TokenInterface weth = TokenInterface(wethAddr); + uint256 wethAmount = weth.balanceOf(address(this)); + convertWethToEth(wethAmount > 0, weth, wethAmount); + + _eventName = "LogAllClaimed(address[],address[],uint256[])"; + _eventParam = abi.encode(assets, _rewards, _amts); + } +} + +contract ConnectV3AaveIncentivesArbitrum is IncentivesResolver { + string public constant name = "Aave-V3-Incentives-v1"; +} diff --git a/contracts/mainnet/connectors/aave/aave-v3-rewards/events.sol b/contracts/mainnet/connectors/aave/aave-v3-rewards/events.sol new file mode 100644 index 00000000..683f3049 --- /dev/null +++ b/contracts/mainnet/connectors/aave/aave-v3-rewards/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, address[] rewards, uint256[] amts); +} diff --git a/contracts/mainnet/connectors/aave/aave-v3-rewards/helpers.sol b/contracts/mainnet/connectors/aave/aave-v3-rewards/helpers.sol new file mode 100644 index 00000000..3a2d8a9d --- /dev/null +++ b/contracts/mainnet/connectors/aave/aave-v3-rewards/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(0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb); +} diff --git a/contracts/mainnet/connectors/aave/aave-v3-rewards/interface.sol b/contracts/mainnet/connectors/aave/aave-v3-rewards/interface.sol new file mode 100644 index 00000000..f2ab4704 --- /dev/null +++ b/contracts/mainnet/connectors/aave/aave-v3-rewards/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/mainnet/connectors/aave/aave-v3-rewards/main.sol b/contracts/mainnet/connectors/aave/aave-v3-rewards/main.sol new file mode 100644 index 00000000..d36b2242 --- /dev/null +++ b/contracts/mainnet/connectors/aave/aave-v3-rewards/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 weth = TokenInterface(wethAddr); + uint256 wethAmount = weth.balanceOf(address(this)); + convertWethToEth(wethAmount > 0, weth, wethAmount); + + 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 _amts = new uint256[](assets.length); + address[] memory _rewards = new address[](assets.length); + + (_rewards, _amts) = incentives.claimAllRewards(assets, address(this)); + + TokenInterface weth = TokenInterface(wethAddr); + uint256 wethAmount = weth.balanceOf(address(this)); + convertWethToEth(wethAmount > 0, weth, wethAmount); + + _eventName = "LogAllClaimed(address[],address[],uint256[])"; + _eventParam = abi.encode(assets, _rewards, _amts); + } +} + +contract ConnectV3AaveIncentives is IncentivesResolver { + string public constant name = "Aave-V3-Incentives-v1"; +} diff --git a/contracts/polygon/connectors/aave/aave-v3-rewards/events.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/events.sol new file mode 100644 index 00000000..683f3049 --- /dev/null +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/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, address[] rewards, uint256[] amts); +} diff --git a/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol new file mode 100644 index 00000000..3a2d8a9d --- /dev/null +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/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(0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb); +} diff --git a/contracts/polygon/connectors/aave/aave-v3-rewards/interface.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/interface.sol new file mode 100644 index 00000000..f2ab4704 --- /dev/null +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/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/polygon/connectors/aave/aave-v3-rewards/main.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/main.sol new file mode 100644 index 00000000..5d98221a --- /dev/null +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/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 wmatic = TokenInterface(wmaticAddr); + uint256 wmaticAmount = wmatic.balanceOf(address(this)); + convertWmaticToMatic(wmaticAmount > 0, wmatic, wmaticAmount); + + 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 _amts = new uint256[](assets.length); + address[] memory _rewards = new address[](assets.length); + + (_rewards, _amts) = incentives.claimAllRewards(assets, address(this)); + + TokenInterface wmatic = TokenInterface(wmaticAddr); + uint256 wmaticAmount = wmatic.balanceOf(address(this)); + convertWmaticToMatic(wmaticAmount > 0, wmatic, wmaticAmount); + + _eventName = "LogAllClaimed(address[],address[],uint256[])"; + _eventParam = abi.encode(assets, _rewards, _amts); + } +} + +contract ConnectV3AaveIncentives is IncentivesResolver { + string public constant name = "Aave-V3-Incentives-v1"; +} From c8ce647aa882114f7d43bd8b3bdf8ec359e30b74 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Thu, 18 May 2023 01:27:20 +0400 Subject: [PATCH 2/3] arbitrum update --- .../aave/{aave-rewards/v3 => aave-v3-rewards}/events.sol | 0 .../aave/{aave-rewards/v3 => aave-v3-rewards}/helpers.sol | 4 ++-- .../aave/{aave-rewards/v3 => aave-v3-rewards}/interface.sol | 0 .../aave/{aave-rewards/v3 => aave-v3-rewards}/main.sol | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) rename contracts/arbitrum/connectors/aave/{aave-rewards/v3 => aave-v3-rewards}/events.sol (100%) rename contracts/arbitrum/connectors/aave/{aave-rewards/v3 => aave-v3-rewards}/helpers.sol (75%) rename contracts/arbitrum/connectors/aave/{aave-rewards/v3 => aave-v3-rewards}/interface.sol (100%) rename contracts/arbitrum/connectors/aave/{aave-rewards/v3 => aave-v3-rewards}/main.sol (94%) diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/events.sol b/contracts/arbitrum/connectors/aave/aave-v3-rewards/events.sol similarity index 100% rename from contracts/arbitrum/connectors/aave/aave-rewards/v3/events.sol rename to contracts/arbitrum/connectors/aave/aave-v3-rewards/events.sol diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol b/contracts/arbitrum/connectors/aave/aave-v3-rewards/helpers.sol similarity index 75% rename from contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol rename to contracts/arbitrum/connectors/aave/aave-v3-rewards/helpers.sol index ff7322a6..f599c936 100644 --- a/contracts/arbitrum/connectors/aave/aave-rewards/v3/helpers.sol +++ b/contracts/arbitrum/connectors/aave/aave-v3-rewards/helpers.sol @@ -1,8 +1,8 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.7.0; -import { DSMath } from "../../../../common/math.sol"; -import { Basic } from "../../../../common/basic.sol"; +import { DSMath } from "../../../common/math.sol"; +import { Basic } from "../../../common/basic.sol"; import { AaveIncentivesInterface } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/interface.sol b/contracts/arbitrum/connectors/aave/aave-v3-rewards/interface.sol similarity index 100% rename from contracts/arbitrum/connectors/aave/aave-rewards/v3/interface.sol rename to contracts/arbitrum/connectors/aave/aave-v3-rewards/interface.sol diff --git a/contracts/arbitrum/connectors/aave/aave-rewards/v3/main.sol b/contracts/arbitrum/connectors/aave/aave-v3-rewards/main.sol similarity index 94% rename from contracts/arbitrum/connectors/aave/aave-rewards/v3/main.sol rename to contracts/arbitrum/connectors/aave/aave-v3-rewards/main.sol index 5c31ed79..f9783a02 100644 --- a/contracts/arbitrum/connectors/aave/aave-rewards/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/aave-v3-rewards/main.sol @@ -6,8 +6,8 @@ pragma solidity ^0.7.0; * @dev Claim Aave v3 rewards. */ -import { TokenInterface } from "../../../../common/interfaces.sol"; -import { Stores } from "../../../../common/stores.sol"; +import { TokenInterface } from "../../../common/interfaces.sol"; +import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; From e143cb6ec6b37f615d7bebc56e3e341bf2c766a0 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Thu, 18 May 2023 01:46:49 +0400 Subject: [PATCH 3/3] Polygon address update --- contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol | 2 +- contracts/polygon/connectors/aave/aave-v3-rewards/main.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol index 3a2d8a9d..f599c936 100644 --- a/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/helpers.sol @@ -10,5 +10,5 @@ abstract contract Helpers is DSMath, Basic { * @dev Aave v3 Incentives */ AaveIncentivesInterface internal constant incentives = - AaveIncentivesInterface(0x8164Cc65827dcFe994AB23944CBC90e0aa80bFcb); + AaveIncentivesInterface(0x929EC64c34a17401F460460D4B9390518E5B473e); } diff --git a/contracts/polygon/connectors/aave/aave-v3-rewards/main.sol b/contracts/polygon/connectors/aave/aave-v3-rewards/main.sol index 5d98221a..5c04fef1 100644 --- a/contracts/polygon/connectors/aave/aave-v3-rewards/main.sol +++ b/contracts/polygon/connectors/aave/aave-v3-rewards/main.sol @@ -73,6 +73,6 @@ abstract contract IncentivesResolver is Helpers, Events { } } -contract ConnectV3AaveIncentives is IncentivesResolver { +contract ConnectV3AaveIncentivesPolygon is IncentivesResolver { string public constant name = "Aave-V3-Incentives-v1"; }