Created
July 21, 2020 18:19
-
-
Save mcchan1/d05ff5404f36c1b31df9df976b51ab82 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
///-safemath, ownable, reentrancy,et.. | |
//add proxy contracts below | |
interface ZapInUniSwap2 { | |
//updated zapIn parameters - replace slippage w/ _minPoolTokkenss | |
function ZapIn( | |
address _FromTokenContractAddress, | |
address _ToUnipoolToken0, | |
address _ToUnipoolToken1, | |
uint256 _amount, | |
uint256 _minPoolTokens) payable external returns(uint256); | |
} | |
//ZapIn(address _FromTokenContractAddress, address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 _amount, uint256 _minPoolTokens); | |
//updated Zapout | |
interface ZapOutUniSwap2 { | |
function ZapOut( | |
address _ToTokenContractAddress, | |
address _FromUniPoolAddress, | |
uint256 _IncomingLP, | |
uint256 _minTokensRec) payable external returns(uint256); | |
} | |
/** | |
* WIP _ The UniSwapv2MinionProxy contract is an extension with goal of keeping Minion itself modular... | |
*/ | |
contract MinionZap is Ownable, ReentrancyGuard{ | |
ZapInUniSwap2 public zapIn; // 0x775ee938186fddc13bd7c89d24820e1b0758f91d | |
ZapOutUniSwap2 public zapOut; //Zapper's Remove Liquidity K = 0x343e3a490c9251dc0eaa81da146ba6abe6c78b2d | |
address public recipient; | |
address rawETH = address(0); | |
//has to be hardcoded to deploy, maybe better to let user input param? | |
//uint256 public slippage; //= 500;//zapOut.defaultSlippage(); | |
constructor(address _zapIn, address _zapOut, address _receipient) public { | |
zapIn = ZapInUniSwap2(_zapIn); //0x775ee938186fddc13bd7c89d24820e1b0758f91d | |
zapOut = ZapOutUniSwap2(_zapOut); // 0x343e3a490c9251dc0eaa81da146ba6abe6c78b2d | |
recipient = _receipient; | |
} | |
// _FromTokenContractAddress => rawETH = addresss(0) - not hardcodig for test purposes. | |
//maker dai 0x6b175474e89094c44da98b954eedeac495271d0f - token 0 | |
//weth 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - token 1 | |
//amount = amount of eth to be exchanged | |
function zapInUniSwap2Pool (address _FromTokenContractAddress, address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 _amount, uint256 _minPoolTokens) public payable returns(uint256) { | |
//move require statement for testing | |
//require(msg.value == _amount); | |
zapIn.ZapIn(_FromTokenContractAddress, _ToUnipoolToken0, _ToUnipoolToken1, _amount, _minPoolTokens); | |
} | |
//Integrate into ZapInUniSwap2Pool - IS THIS NEEDED TO ZAP OUT of UNISWAP? | |
function approveLP (address _poolTokenAddress, address _zapContractAddress, uint256 _amount) public onlyOwner nonReentrant { | |
//require(IERC20(_poolTokenAddress).approve(_zapContractAddress, _amount), "token approval failed"); | |
IERC20(_poolTokenAddress).approve(_zapContractAddress, _amount); //less strict for testing | |
} | |
//// maker dai/weth pair 0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11 - uniPool | |
// alternate use WETH K instead of eth- 0c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 for _toTokenContractAddress | |
// @notice This function is used to zapout of given Uniswap pair in ETH/ERC20 Tokens | |
// @param _ToTokenContractAddress The ERC20 token to zapout in (address(0x00) if ether) | |
// @param _FromUniPoolAddress The uniswap pair address to zapout from | |
// @param _IncomingLP The amount of LP | |
// @return the amount of eth/tokens received after zapout | |
function zapOutUniSwap2Pool (address _FromUniPoolAddress, uint256 _IncomingLP, uint256 _minTokensRec ) public onlyOwner nonReentrant{ | |
zapOut.ZapOut(rawETH, _FromUniPoolAddress, _IncomingLP, _minTokensRec); | |
} | |
//recipeint could. be a wallet or pool manager. | |
//@param _recipient accepts erc20 tokens. Set by Owner/multisig | |
function setTokenRecipient (address _recipient) public nonReentrant onlyOwner { | |
recipient = _recipient; | |
} | |
//Need to be able to transfer tokens that the Minion withdraws from the LAO | |
//@param _tokenAddress is the erc20 token contract | |
//@param _amount = in wei format | |
function moveTokens(address _tokenAdress,uint _amount) public nonReentrant onlyOwner { | |
require(IERC20(_tokenAdress).transfer(recipient, _amount), "transfer failed"); | |
} | |
//add ownership to udpate slippage, zapin, zapout K addresses... | |
function udpdateZapperSettings (address _zapIn, address _zapOut) public onlyOwner { | |
zapIn = ZapInUniSwap2(_zapIn); | |
zapOut = ZapOutUniSwap2(_zapOut); | |
} | |
function() external payable { } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for taking a look -- idea is to zapIn/zapOut to a pool with ETH from a proxy contract. Members from a Moloch DAO/LAO would fund a proxy contract with ETH, and then the proxy contract would handle zapIn/zapOut