diff --git a/contracts/ProxyLogics/FreeProxy.sol b/contracts/ProxyLogics/FreeProxy.sol index 20ab0af..71b6cfd 100644 --- a/contracts/ProxyLogics/FreeProxy.sol +++ b/contracts/ProxyLogics/FreeProxy.sol @@ -2,90 +2,58 @@ pragma solidity ^0.5.0; interface TubInterface { - function join(uint) external; - function exit(uint) external; - function free(bytes32, uint) external; - function give(bytes32, address) external; function gem() external view returns (TokenInterface); - function skr() external view returns (TokenInterface); - function ink(bytes32) external view returns (uint); - function per() external view returns (uint); } interface TokenInterface { function allowance(address, address) external view returns (uint); function balanceOf(address) external view returns (uint); + function transfer(address, uint) external returns (bool); function approve(address, uint) external; function withdraw(uint) external; } -contract DSMath { +contract FreeProxy { - function add(uint x, uint y) internal pure returns (uint z) { - require((z = x + y) >= x, "math-not-safe"); - } - - function mul(uint x, uint y) internal pure returns (uint z) { - require(y == 0 || (z = x * y) / y == x, "math-not-safe"); - } - - uint constant RAY = 10 ** 27; - - function rmul(uint x, uint y) internal pure returns (uint z) { - z = add(mul(x, y), RAY / 2) / RAY; - } - - function rdiv(uint x, uint y) internal pure returns (uint z) { - z = add(mul(x, RAY), y / 2) / y; - } - -} - - -contract Helpers is DSMath { - - /** - * @dev get MakerDAO CDP engine - */ function getSaiTubAddress() public pure returns (address sai) { sai = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3; } -} - - -contract CDPResolver is Helpers { - - /** - * @dev transfer CDP ownership - */ - function give(uint cdpNum, address nextOwner) public { - TubInterface(getSaiTubAddress()).give(bytes32(cdpNum), nextOwner); + function getAddressWETH() public pure returns (address weth) { + weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; } - function free(uint cdpNum, uint jam) public { - bytes32 cup = bytes32(cdpNum); - address tubAddr = getSaiTubAddress(); - - if (jam > 0) { - - TubInterface tub = TubInterface(tubAddr); - TokenInterface peth = tub.skr(); + function freeWETH(uint wamt) public { + TubInterface tub = TubInterface(getSaiTubAddress()); + TokenInterface weth = tub.gem(); - uint ink = rdiv(jam, tub.per()); - ink = rmul(ink, tub.per()) <= jam ? ink : ink - 1; - tub.free(cup, ink); - - setAllowance(peth, tubAddr); - - tub.exit(ink); - uint freeJam = tub.gem().balanceOf(address(this)); // withdraw possible previous stuck WETH as well - tub.gem().withdraw(freeJam); - - address(msg.sender).transfer(freeJam); + uint freeJam = wamt; + if (freeJam == 0) { + freeJam = weth.balanceOf(address(this)); } + + weth.withdraw(freeJam); + msg.sender.transfer(freeJam); + } + + function withdrawWETH() public { + TubInterface tub = TubInterface(getSaiTubAddress()); + TokenInterface weth = tub.gem(); + uint freeJam = weth.balanceOf(address(this)); + weth.transfer(msg.sender, freeJam); + } + + function getWETHBal() public view returns (uint freeJam) { + TubInterface tub = TubInterface(getSaiTubAddress()); + TokenInterface weth = tub.gem(); + freeJam = weth.balanceOf(address(this)); + } + + function getSaiWETH() public view returns (address) { + TubInterface tub = TubInterface(getSaiTubAddress()); + return address(tub.gem()); } function setAllowance(TokenInterface token_, address spender_) private { @@ -94,19 +62,4 @@ contract CDPResolver is Helpers { } } -} - - -contract InstaMaker is CDPResolver { - - uint public version; - - /** - * @dev setting up variables on deployment - * 1...2...3 versioning in each subsequent deployments - */ - constructor(uint _version) public { - version = _version; - } - } \ No newline at end of file diff --git a/contracts/ProxyLogics/InstaMaker.sol b/contracts/ProxyLogics/InstaMaker.sol index bd66263..688151a 100644 --- a/contracts/ProxyLogics/InstaMaker.sol +++ b/contracts/ProxyLogics/InstaMaker.sol @@ -165,6 +165,7 @@ contract CDPResolver is Helpers { TubInterface tub = TubInterface(tubAddr); TokenInterface peth = tub.skr(); + TokenInterface weth = tub.gem(); uint ink = rdiv(jam, tub.per()); ink = rmul(ink, tub.per()) <= jam ? ink : ink - 1; @@ -173,8 +174,8 @@ contract CDPResolver is Helpers { setAllowance(peth, tubAddr); tub.exit(ink); - uint freeJam = tub.gem().balanceOf(address(this)); // withdraw possible previous stuck WETH as well - tub.gem().withdraw(freeJam); + uint freeJam = weth.balanceOf(address(this)); // withdraw possible previous stuck WETH as well + weth.withdraw(freeJam); address(msg.sender).transfer(freeJam); } @@ -196,22 +197,18 @@ contract CDPResolver is Helpers { function wipe(uint cdpNum, uint wad) public { require(wad > 0, "no-wipe-no-dai"); - address tubAddr = getSaiTubAddress(); - address _daiEx = getUniswapDAIExchange(); - address _mkrEx = getUniswapMKRExchange(); - - TubInterface tub = TubInterface(tubAddr); - UniswapExchange daiEx = UniswapExchange(_daiEx); - UniswapExchange mkrEx = UniswapExchange(_mkrEx); + TubInterface tub = TubInterface(getSaiTubAddress()); + UniswapExchange daiEx = UniswapExchange(getUniswapDAIExchange()); + UniswapExchange mkrEx = UniswapExchange(getUniswapMKRExchange()); TokenInterface dai = tub.sai(); TokenInterface mkr = tub.gov(); PepInterface pep = tub.pep(); bytes32 cup = bytes32(cdpNum); - setAllowance(dai, tubAddr); - setAllowance(mkr, tubAddr); - setAllowance(dai, _daiEx); + setAllowance(dai, getSaiTubAddress()); + setAllowance(mkr, getSaiTubAddress()); + setAllowance(dai, getUniswapDAIExchange()); (bytes32 val, bool ok) = pep.peek(); @@ -286,4 +283,6 @@ contract InstaMaker is CDPCluster { version = _version; } + function() external payable {} + } \ No newline at end of file