MasterHealer

Created Diff never expires
39 removals
124 lines
27 additions
112 lines
// SPDX-License-Identifier: MIT
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
pragma solidity 0.8.6;


import "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import "./libs/IMasterchef.sol";
import "./libs/IMasterchef.sol";
import "./BaseStrategyLPSingle.sol";
import "./BaseStrategyLPSingle.sol";


contract StrategyMasterChef is BaseStrategyLPSingle, Initializable {
contract StrategyMasterHealer is BaseStrategyLPSingle {
using SafeMath for uint256;
using SafeMath for uint256;
using SafeERC20 for IERC20;
using SafeERC20 for IERC20;


address public masterchefAddress;
address public masterchefAddress;
uint256 public pid;
uint256 public pid;


/**
constructor(
address[8] _configAddresses,
address[5] memory _configAddress, //vaulthealer, masterchef, unirouter, want, earned
_configAddresses[0] _vaultChefAddress,
_configAddresses[1] _masterchefAddress,
_configAddresses[2] _uniRouterAddress,
_configAddresses[3] _wantAddress,
_configAddress[4] _earnedAddress,
_configAddress[5] _usdAddress,
_configAddress[6] _bananaAddress,
*/
function initialize(
address[7] memory _configAddresses,
uint256 _pid,
uint256 _pid,
address[] memory _earnedToWnativePath,
uint256 _tolerance,
address[] memory _earnedToUsdPath,
address[] memory _earnedToWmaticPath,
address[] memory _earnedToBananaPath,
address[] memory _earnedToUsdcPath,
address[] memory _earnedToCrystlPath,
address[] memory _earnedToToken0Path,
address[] memory _earnedToToken0Path,
address[] memory _earnedToToken1Path,
address[] memory _earnedToToken1Path,
address[] memory _token0ToEarnedPath,
address[] memory _token0ToEarnedPath,
address[] memory _token1ToEarnedPath
address[] memory _token1ToEarnedPath
) external initializer {
) {
govAddress = msg.sender;
govAddress = msg.sender;
vaultChefAddress = _configAddresses[0];
vaultChefAddress = _configAddress[0];
masterchefAddress = _configAddresses[1];
masterchefAddress = _configAddress[1];
uniRouterAddress = _configAddresses[2];
uniRouterAddress = _configAddress[2];


wantAddress = _configAddresses[3];
wantAddress = _configAddress[3];
token0Address = IUniPair(wantAddress).token0();
token0Address = IUniPair(wantAddress).token0();
token1Address = IUniPair(wantAddress).token1();
token1Address = IUniPair(wantAddress).token1();


pid = _pid;
pid = _pid;
earnedAddress = _configAddresses[4];
earnedAddress = _configAddress[4];
usdAddress = _configAddresses[5];
tolerance = _tolerance;
bananaAddress = _configAddresses[6];


earnedToWnativePath = _earnedToWnativePath;
earnedToWnativePath = _earnedToWmaticPath;
earnedToUsdPath = _earnedToUsdPath;
earnedToUsdPath = _earnedToUsdcPath;
earnedToBananaPath = _earnedToBananaPath;
earnedToCrystlPath = _earnedToCrystlPath;
earnedToToken0Path = _earnedToToken0Path;
earnedToToken0Path = _earnedToToken0Path;
earnedToToken1Path = _earnedToToken1Path;
earnedToToken1Path = _earnedToToken1Path;
token0ToEarnedPath = _token0ToEarnedPath;
token0ToEarnedPath = _token0ToEarnedPath;
token1ToEarnedPath = _token1ToEarnedPath;
token1ToEarnedPath = _token1ToEarnedPath;


transferOwnership(vaultChefAddress);
transferOwnership(vaultChefAddress);
_resetAllowances();
_resetAllowances();
}
}


function _vaultDeposit(uint256 _amount) internal override {
function _vaultDeposit(uint256 _amount) internal override {
IMasterchef(masterchefAddress).deposit(pid, _amount);
IMasterchef(masterchefAddress).deposit(pid, _amount);
}
}
function _vaultWithdraw(uint256 _amount) internal override {
function _vaultWithdraw(uint256 _amount) internal override {
IMasterchef(masterchefAddress).withdraw(pid, _amount);
IMasterchef(masterchefAddress).withdraw(pid, _amount);
}
}
function _vaultHarvest() internal override {
function _vaultHarvest() internal override {
IMasterchef(masterchefAddress).withdraw(pid, 0);
IMasterchef(masterchefAddress).withdraw(pid, 0);
}
}
function vaultSharesTotal() public override view returns (uint256) {
function vaultSharesTotal() public override view returns (uint256) {
(uint256 amount,) = IMasterchef(masterchefAddress).userInfo(pid, address(this));
(uint256 amount,) = IMasterchef(masterchefAddress).userInfo(pid, address(this));
return amount;
return amount;
}
}
function wantLockedTotal() public override view returns (uint256) {
function wantLockedTotal() public override view returns (uint256) {
return IERC20(wantAddress).balanceOf(address(this))
return IERC20(wantAddress).balanceOf(address(this))
.add(vaultSharesTotal());
.add(vaultSharesTotal());
}
}


function _resetAllowances() internal override {
function _resetAllowances() internal override {
IERC20(wantAddress).safeApprove(masterchefAddress, uint256(0));
IERC20(wantAddress).safeApprove(masterchefAddress, uint256(0));
IERC20(wantAddress).safeIncreaseAllowance(
IERC20(wantAddress).safeIncreaseAllowance(
masterchefAddress,
masterchefAddress,
type(uint256).max
type(uint256).max
);
);


IERC20(earnedAddress).safeApprove(uniRouterAddress, uint256(0));
IERC20(earnedAddress).safeApprove(uniRouterAddress, uint256(0));
IERC20(earnedAddress).safeIncreaseAllowance(
IERC20(earnedAddress).safeIncreaseAllowance(
uniRouterAddress,
uniRouterAddress,
type(uint256).max
type(uint256).max
);
);


IERC20(token0Address).safeApprove(uniRouterAddress, uint256(0));
IERC20(token0Address).safeApprove(uniRouterAddress, uint256(0));
IERC20(token0Address).safeIncreaseAllowance(
IERC20(token0Address).safeIncreaseAllowance(
uniRouterAddress,
uniRouterAddress,
type(uint256).max
type(uint256).max
);
);


IERC20(token1Address).safeApprove(uniRouterAddress, uint256(0));
IERC20(token1Address).safeApprove(uniRouterAddress, uint256(0));
IERC20(token1Address).safeIncreaseAllowance(
IERC20(token1Address).safeIncreaseAllowance(
uniRouterAddress,
uniRouterAddress,
type(uint256).max
type(uint256).max
);
);


}
}
function _emergencyVaultWithdraw() internal override {
function _emergencyVaultWithdraw() internal override {
IMasterchef(masterchefAddress).emergencyWithdraw(pid);
IMasterchef(masterchefAddress).emergencyWithdraw(pid);
}
}


function _beforeDeposit(address _to) internal override {
function _beforeDeposit(address _to) internal override {
}
}


function _beforeWithdraw(address _to) internal override {
function _beforeWithdraw(address _to) internal override {
}
}
}
}