Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions contracts/deploy/PoolToken_Compound_DAI.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ contract PoolToken_Compound_DAI is PoolToken {
function initialize(address _pool) public initializer {
PoolToken.initialize(
_pool,
"Akropolis Delpi Savings - Compound - DAI",
"ADST-COMP-DAI"
"Delphi Compound DAI",
"dCDAI"
);
}
}
13 changes: 13 additions & 0 deletions contracts/deploy/PoolToken_CurveFi_SBTC.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pragma solidity ^0.5.12;

import "../modules/token/PoolToken.sol";

contract PoolToken_CurveFi_SBTC is PoolToken {
function initialize(address _pool) public initializer {
PoolToken.initialize(
_pool,
"Delphi Curve sBTC",
"dsBTC"
);
}
}
13 changes: 13 additions & 0 deletions contracts/deploy/PoolToken_CurveFi_SUSD.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pragma solidity ^0.5.12;

import "../modules/token/PoolToken.sol";

contract PoolToken_CurveFi_SUSD is PoolToken {
function initialize(address _pool) public initializer {
PoolToken.initialize(
_pool,
"Delphi Curve sUSD",
"dsUSD"
);
}
}
13 changes: 13 additions & 0 deletions contracts/deploy/PoolToken_CurveFi_Y.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pragma solidity ^0.5.12;

import "../modules/token/PoolToken.sol";

contract PoolToken_CurveFi_Y is PoolToken {
function initialize(address _pool) public initializer {
PoolToken.initialize(
_pool,
"Delphi Curve yPool",
"dyPool"
);
}
}
3 changes: 0 additions & 3 deletions contracts/interfaces/defi/ICurveFiDeposit.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
pragma solidity ^0.5.12;

contract ICurveFiDeposit {
function add_liquidity (uint256[3] calldata uamounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[3] calldata min_uamounts) external;
function remove_liquidity_imbalance (uint256[3] calldata uamounts, uint256 max_burn_amount) external;
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_uamount) external;
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_uamount, bool donate_dust) external;
function withdraw_donated_dust() external;
Expand Down
7 changes: 7 additions & 0 deletions contracts/interfaces/defi/ICurveFiDeposit_SBTC.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pragma solidity ^0.5.12;

contract ICurveFiDeposit_SBTC {
function add_liquidity (uint256[3] calldata uamounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[3] calldata min_uamounts) external;
function remove_liquidity_imbalance (uint256[3] calldata uamounts, uint256 max_burn_amount) external;
}
7 changes: 7 additions & 0 deletions contracts/interfaces/defi/ICurveFiDeposit_SUSD.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pragma solidity ^0.5.12;

contract ICurveFiDeposit_SUSD {
function add_liquidity (uint256[4] calldata uamounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[4] calldata min_uamounts) external;
function remove_liquidity_imbalance (uint256[4] calldata uamounts, uint256 max_burn_amount) external;
}
7 changes: 7 additions & 0 deletions contracts/interfaces/defi/ICurveFiDeposit_Y.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pragma solidity ^0.5.12;

contract ICurveFiDeposit_Y {
function add_liquidity (uint256[4] calldata uamounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[4] calldata min_uamounts) external;
function remove_liquidity_imbalance (uint256[4] calldata uamounts, uint256 max_burn_amount) external;
}
9 changes: 9 additions & 0 deletions contracts/interfaces/defi/ICurveFiRewards.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
pragma solidity ^0.5.16;

interface ICurveFiRewards {
function stake(uint256 amount) external;
function withdraw(uint256 amount) external;
function getReward() external;
function earned(address account) external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
}
5 changes: 5 additions & 0 deletions contracts/interfaces/defi/ICurveFiRewards_SBTC.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pragma solidity ^0.5.16;

interface ICurveFiRewards_SBTC {
function rewardsToken() external view returns (address);
}
5 changes: 5 additions & 0 deletions contracts/interfaces/defi/ICurveFiRewards_SUSD.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pragma solidity ^0.5.16;

interface ICurveFiRewards_SUSD {
function snx() external view returns (address);
}
5 changes: 5 additions & 0 deletions contracts/interfaces/defi/ICurveFiRewards_Y.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pragma solidity ^0.5.16;

interface ICurveFiRewards_Y {
function yfi() external view returns (address);
}
4 changes: 0 additions & 4 deletions contracts/interfaces/defi/ICurveFiSwap.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
pragma solidity ^0.5.12;

interface ICurveFiSwap {
function add_liquidity (uint256[3] calldata amounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[3] calldata min_amounts) external;
function remove_liquidity_imbalance (uint256[3] calldata amounts, uint256 max_burn_amount) external;
function calc_token_amount(uint256[3] calldata amounts, bool deposit) external view returns(uint256);
function balances(int128 i) external view returns(uint256);
function A() external view returns(uint256);
function fee() external view returns(uint256);
Expand Down
8 changes: 8 additions & 0 deletions contracts/interfaces/defi/ICurveFiSwap_SBTC.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pragma solidity ^0.5.12;

interface ICurveFiSwap_SBTC {
function add_liquidity (uint256[3] calldata amounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[3] calldata min_amounts) external;
function remove_liquidity_imbalance (uint256[3] calldata amounts, uint256 max_burn_amount) external;
function calc_token_amount(uint256[3] calldata amounts, bool deposit) external view returns(uint256);
}
8 changes: 8 additions & 0 deletions contracts/interfaces/defi/ICurveFiSwap_SUSD.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pragma solidity ^0.5.12;

interface ICurveFiSwap_SUSD {
function add_liquidity (uint256[4] calldata amounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[4] calldata min_amounts) external;
function remove_liquidity_imbalance (uint256[4] calldata amounts, uint256 max_burn_amount) external;
function calc_token_amount(uint256[4] calldata amounts, bool deposit) external view returns(uint256);
}
8 changes: 8 additions & 0 deletions contracts/interfaces/defi/ICurveFiSwap_Y.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pragma solidity ^0.5.12;

interface ICurveFiSwap_Y {
function add_liquidity (uint256[4] calldata amounts, uint256 min_mint_amount) external;
function remove_liquidity (uint256 _amount, uint256[4] calldata min_amounts) external;
function remove_liquidity_imbalance (uint256[4] calldata amounts, uint256 max_burn_amount) external;
function calc_token_amount(uint256[4] calldata amounts, bool deposit) external view returns(uint256);
}
19 changes: 18 additions & 1 deletion contracts/interfaces/defi/IDefiProtocol.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,20 @@ interface IDefiProtocol {
*/
function withdraw(address beneficiary, uint256[] calldata amounts) external;

function withdrawRewards(address to) external returns(address[] memory tokens, uint256[] memory amounts);
/**
* @notice Claim rewards. Reward tokens will be stored on protocol balance.
* @return tokens and their amounts received
*/
function claimRewards() external returns(address[] memory tokens, uint256[] memory amounts);

/**
* @notice Withdraw reward tokens to user
* @dev called by SavingsModule
* @param token Reward token to withdraw
* @param user Who should receive tokens
* @param amount How many tokens to send
*/
function withdrawReward(address token, address user, uint256 amount) external;

/**
* @dev This function is not view because on some protocols
Expand All @@ -51,6 +64,10 @@ interface IDefiProtocol {

function supportedTokensCount() external view returns(uint256);

function supportedRewardTokens() external view returns(address[] memory);

function isSupportedRewardToken(address token) external view returns(bool);

/**
* @notice Returns if this protocol can swap all it's normalizedBalance() to specified token
*/
Expand Down
29 changes: 17 additions & 12 deletions contracts/modules/defi/CompoundProtocol.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import "../../interfaces/defi/ICErc20.sol";
import "../../interfaces/defi/IComptroller.sol";
import "../../common/Module.sol";
import "./DefiOperatorRole.sol";
import "./ProtocolBase.sol";

/**
* RAY Protocol support module which works with only one base token
*/
contract CompoundProtocol is Module, DefiOperatorRole, IDefiProtocol {
contract CompoundProtocol is ProtocolBase {
uint256 constant MAX_UINT256 = uint256(-1);

using SafeMath for uint256;
Expand All @@ -26,8 +27,7 @@ contract CompoundProtocol is Module, DefiOperatorRole, IDefiProtocol {
IERC20 compToken;

function initialize(address _pool, address _token, address _cToken, address _comptroller) public initializer {
Module.initialize(_pool);
DefiOperatorRole.initialize(_msgSender());
ProtocolBase.initialize(_pool);
baseToken = IERC20(_token);
cToken = ICErc20(_cToken);
decimals = ERC20Detailed(_token).decimals();
Expand Down Expand Up @@ -60,15 +60,6 @@ contract CompoundProtocol is Module, DefiOperatorRole, IDefiProtocol {
baseToken.safeTransfer(beneficiary, amounts[0]);
}

function withdrawRewards(address to) public onlyDefiOperator returns(address[] memory tokens, uint256[] memory amounts){
comptroller.claimComp(address(this));
tokens = new address[](1);
tokens[0] = address(compToken);
amounts = new uint256[](1);
amounts[0] = compToken.balanceOf(address(this));
compToken.safeTransfer(to, amounts[0]);
}

function balanceOf(address token) public returns(uint256) {
if (token != address(baseToken)) return 0;
return cToken.balanceOfUnderlying(address(this));
Expand Down Expand Up @@ -98,6 +89,20 @@ contract CompoundProtocol is Module, DefiOperatorRole, IDefiProtocol {
return 1;
}

function supportedRewardTokens() public view returns(address[] memory) {
address[] memory rtokens = new address[](1);
rtokens[0] = address(compToken);
return rtokens;
}

function isSupportedRewardToken(address token) public view returns(bool) {
return(token == address(compToken));
}

function cliamRewardsFromProtocol() internal {
comptroller.claimComp(address(this));
}

function normalizeAmount(address, uint256 amount) internal view returns(uint256) {
if (decimals == 18) {
return amount;
Expand Down
Loading