Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add alcx strategy #38

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
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
Prev Previous commit
Next Next commit
minor fixes
corollari committed Mar 28, 2021
commit 24cf2f18c2f48dc41a42609f7759ba25f93dedce
24 changes: 13 additions & 11 deletions implementations/strategy/StrategyAlchemix.sol
Original file line number Diff line number Diff line change
@@ -6,18 +6,20 @@ import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

import "./Strategy.sol";
import "../../interfaces/external/WETH.sol";
import "../../interfaces/external/AlcxStakingPools.sol";
import "../../interfaces/external/MetaCurvePools.sol";
import "../../interfaces/external/Uniswap.sol";

contract StrategyAave is Strategy {
// owner == harvester
contract StrategyAlchemix is Strategy, Ownable {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;

address constant public alcx = 0xdbdb4d16eda451d0503b854cf79d55697f90c8df;
address constant public alcx = 0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF;
address constant public sushiRouter = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;
address constant public weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // used for alcx <> weth <> usdt route
StakingPools public alcxStakingPools = StakingPools(0xAB8e74017a8Cc7c15FFcCd726603790d26d7DeCa);
@@ -26,7 +28,6 @@ contract StrategyAave is Strategy {
uint256 constant public alcxCrvPoolId = 4;
int128 constant public usdtIndexInCrvMetapool = 3;


constructor(address _want) public Strategy(_want) {
}

@@ -40,15 +41,16 @@ contract StrategyAave is Strategy {
}

function deposit(uint256 _ne18) public override {
require(msg.sender == strategist || msg.sender == governance, "!authorized");
require(msg.sender == owner() || msg.sender == governance, "!authorized");
uint256 _amount = IERC20(want).balanceOf(address(this)).mul(_ne18).div(1e18);
IERC20(want).safeApprove(address(metaCurvePools), 0);
IERC20(want).safeApprove(address(metaCurvePools), _amount);
uint256[] memory amountsToAdd = new uint256[](4);
amountsToAdd[0] = 0;
amountsToAdd[1] = 0;
amountsToAdd[2] = 0;
amountsToAdd[2] = _amount;
uint256[4] memory amountsToAdd = [
uint256(0),
uint256(0),
uint256(0),
uint256(usdtIndexInCrvMetapool)
Copy link
Member

@flam-income flam-income Mar 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uint256(usdtIndexInCrvMetapool) should be _amount ?

];
metaCurvePools.add_liquidity(alcx3CrvCurvePool, amountsToAdd, uint256(0)); // Vulnerable to sandwich attacks but only strategist and governnace can call this so no flash loans attacks + it's stableswap
uint256 crvAmount = IERC20(alcx3CrvCurvePool).balanceOf(address(this));
IERC20(alcx3CrvCurvePool).safeApprove(address(alcxStakingPools), 0);
@@ -64,7 +66,7 @@ contract StrategyAave is Strategy {
}

function harvest(uint minimumReceived) public { // Avoids sandwich attacks
require(msg.sender == strategist || msg.sender == governance, "!authorized");
require(msg.sender == owner() || msg.sender == governance, "!authorized");
alcxStakingPools.claim(alcxCrvPoolId);
uint alcxBalance = IERC20(alcx).balanceOf(address(this));
uint prevWantBalance = IERC20(want).balanceOf(address(this));
2 changes: 1 addition & 1 deletion interfaces/external/MetaCurvePools.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pragma solidity ^0.6.2;

interface MetaCurvePools {
function add_liquidity(address _pool, uint256[4] calldata _deposit_amounts, uint256 _min_mint_amount) public;
function add_liquidity(address _pool, uint256[4] calldata _deposit_amounts, uint256 _min_mint_amount) external;
function calc_withdraw_one_coin(address _pool, uint256 _token_amount, int128 i) external view returns (uint256);
function remove_liquidity_one_coin(address _pool, uint256 _token_amount, int128 i, uint256 min_amount) external;
}