diff --git a/contracts/mainnet/connectors/euler/euler-rewards/events.sol b/contracts/mainnet/connectors/euler/euler-rewards/events.sol new file mode 100644 index 00000000..c1f17625 --- /dev/null +++ b/contracts/mainnet/connectors/euler/euler-rewards/events.sol @@ -0,0 +1,13 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +contract Events { + event LogClaimed( + address user, + address token, + uint256 amt, + bytes32[] proof, + uint256 getId, + uint256 setId + ); +} diff --git a/contracts/mainnet/connectors/euler/euler-rewards/helpers.sol b/contracts/mainnet/connectors/euler/euler-rewards/helpers.sol new file mode 100644 index 00000000..b056659a --- /dev/null +++ b/contracts/mainnet/connectors/euler/euler-rewards/helpers.sol @@ -0,0 +1,13 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; +import "./interface.sol"; +import { Basic } from "../../../common/basic.sol"; + +contract Helpers is Basic { + + /** + * @dev Euler Incentives Distributor + */ + IEulerDistributor internal constant eulerDistribute = IEulerDistributor(0xd524E29E3BAF5BB085403Ca5665301E94387A7e2); + +} diff --git a/contracts/mainnet/connectors/euler/euler-rewards/interface.sol b/contracts/mainnet/connectors/euler/euler-rewards/interface.sol new file mode 100644 index 00000000..59aab085 --- /dev/null +++ b/contracts/mainnet/connectors/euler/euler-rewards/interface.sol @@ -0,0 +1,6 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; + +interface IEulerDistributor { + function claim(address account, address token, uint claimable, bytes32[] calldata proof, address stake) external; +} diff --git a/contracts/mainnet/connectors/euler/euler-rewards/main.sol b/contracts/mainnet/connectors/euler/euler-rewards/main.sol new file mode 100644 index 00000000..d3d9e66a --- /dev/null +++ b/contracts/mainnet/connectors/euler/euler-rewards/main.sol @@ -0,0 +1,46 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.7.0; +import "./helpers.sol"; +import "./events.sol"; + +/** + * @title Euler Rewards. + * @dev Claim Euler rewards. + */ + +contract EulerIncentives is Helpers, Events { + + /** + * @dev Claim Pending Rewards. + * @notice Claim Pending Rewards from Euler incentives contract. + * @param user Address that should receive tokens. + * @param token Address of token being claimed (ie EUL) + * @param amt The amount of reward to claim. + * @param proof Merkle proof that validates this claim. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of rewards claimed. + */ + function claim( + address user, + address token, + uint256 amt, + bytes32[] memory proof, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + require(proof.length > 0, "invalid-assets"); + + eulerDistribute.claim(user, token, _amt, proof, address(0)); + + setUint(setId, _amt); + + _eventName = "LogClaimed(address,address,uint256,bytes32[],uint256,uint256)"; + _eventParam = abi.encode(user, token, _amt, proof, getId, setId); + } +} + +contract ConnectV2EulereIncentives is EulerIncentives { + string public constant name = "Euler-Incentives-v1"; +}