mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
136 lines
4.4 KiB
Solidity
136 lines
4.4 KiB
Solidity
//SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.7.0;
|
|
|
|
|
|
/**
|
|
* @title stkAave.
|
|
* @dev Staked Aave.
|
|
*/
|
|
|
|
import { Helpers } from "./helpers.sol";
|
|
import { Events } from "./events.sol";
|
|
|
|
abstract contract AaveResolver is Helpers, Events {
|
|
|
|
/**
|
|
* @dev Claim Accrued AAVE.
|
|
* @notice Claim Accrued AAVE Token rewards.
|
|
* @param amount The amount of rewards to claim. uint(-1) for max.
|
|
* @param getId ID to retrieve amount.
|
|
* @param setId ID stores the amount of tokens claimed.
|
|
*/
|
|
function claim(
|
|
uint256 amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
uint intialBal = aave.balanceOf(address(this));
|
|
stkAave.claimRewards(address(this), _amt);
|
|
uint finalBal = aave.balanceOf(address(this));
|
|
_amt = sub(finalBal, intialBal);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogClaim(uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(_amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @dev Stake AAVE Token
|
|
* @notice Stake AAVE Token in Aave security module
|
|
* @param amount The amount of AAVE to stake. uint(-1) for max.
|
|
* @param getId ID to retrieve amount.
|
|
* @param setId ID stores the amount of tokens staked.
|
|
*/
|
|
function stake(
|
|
uint256 amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
_amt = _amt == uint(-1) ? aave.balanceOf(address(this)) : _amt;
|
|
stkAave.stake(address(this), _amt);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogStake(uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(_amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @dev Initiate cooldown to unstake
|
|
* @notice Initiate cooldown to unstake from Aave security module
|
|
*/
|
|
function cooldown() external payable returns (string memory _eventName, bytes memory _eventParam) {
|
|
require(stkAave.balanceOf(address(this)) > 0, "no-staking");
|
|
|
|
stkAave.cooldown();
|
|
|
|
_eventName = "LogCooldown()";
|
|
}
|
|
|
|
/**
|
|
* @dev Redeem tokens from Staked AAVE
|
|
* @notice Redeem AAVE tokens from Staked AAVE after cooldown period is over
|
|
* @param amount The amount of AAVE to redeem. uint(-1) for max.
|
|
* @param getId ID to retrieve amount.
|
|
* @param setId ID stores the amount of tokens redeemed.
|
|
*/
|
|
function redeem(
|
|
uint256 amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
uint intialBal = aave.balanceOf(address(this));
|
|
stkAave.redeem(address(this), _amt);
|
|
uint finalBal = aave.balanceOf(address(this));
|
|
_amt = sub(finalBal, intialBal);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogRedeem(uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(_amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @dev Delegate AAVE or stkAAVE
|
|
* @notice Delegate AAVE or stkAAVE
|
|
* @param delegatee The address of the delegatee
|
|
* @param delegateAave Whether to delegate Aave balance
|
|
* @param delegateStkAave Whether to delegate Staked Aave balance
|
|
* @param aaveDelegationType Aave delegation type. Voting power - 0, Proposition power - 1, Both - 2
|
|
* @param stkAaveDelegationType Staked Aave delegation type. Values similar to aaveDelegationType
|
|
*/
|
|
function delegate(
|
|
address delegatee,
|
|
bool delegateAave,
|
|
bool delegateStkAave,
|
|
uint8 aaveDelegationType,
|
|
uint8 stkAaveDelegationType
|
|
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
|
require(delegateAave || delegateStkAave, "invalid-delegate");
|
|
require(delegatee != address(0), "invalid-delegatee");
|
|
|
|
if (delegateAave) {
|
|
_delegateAave(delegatee, Helpers.DelegationType(aaveDelegationType));
|
|
}
|
|
|
|
if (delegateStkAave) {
|
|
_delegateStakedAave(delegatee, Helpers.DelegationType(stkAaveDelegationType));
|
|
}
|
|
|
|
_eventName = "LogDelegate(address,bool,bool,uint8,uint8)";
|
|
_eventParam = abi.encode(delegatee, delegateAave, delegateStkAave, aaveDelegationType, stkAaveDelegationType);
|
|
}
|
|
}
|
|
|
|
|
|
contract ConnectV2AaveStake is AaveResolver {
|
|
string public constant name = "Aave-Stake-v1";
|
|
}
|