diff --git a/contracts/ProxyLogics/MCD/InstaMcdSwap.sol b/contracts/ProxyLogics/MCD/InstaMcdSwap.sol new file mode 100644 index 0000000..e1d5f8e --- /dev/null +++ b/contracts/ProxyLogics/MCD/InstaMcdSwap.sol @@ -0,0 +1,74 @@ +pragma solidity ^0.5.8; + +interface TokenInterface { + function allowance(address, address) external view returns (uint); + function balanceOf(address) external view returns (uint); + function approve(address, uint) external; + function transfer(address, uint) external returns (bool); + function transferFrom(address, address, uint) external returns (bool); +} + +/** Swap Functionality */ +interface ScdMcdMigration { + function swapDaiToSai(uint daiAmt) external; + function swapSaiToDai(uint saiAmt) external; +} + +interface InstaMcdAddress { + function migration() external returns (address payable); +} + + +contract Helpers { + /** + * @dev get MakerDAO MCD Address contract + */ + function getMcdAddresses() public pure returns (address mcd) { + mcd = 0xF23196DF1C440345DE07feFbe556a5eF0dcD29F0; + } + + /** + * @dev get Sai (Dai v1) address + */ + function getSaiAddress() public pure returns (address sai) { + sai = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359; + } + + /** + * @dev get Dai (Dai v2) address + */ + function getDaiAddress() public pure returns (address dai) { + dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F; + } +} + + +contract InstaMcdSwap is Helpers { + function swapDaiToSai( + uint wad // Amount to swap + ) external + { + address scdMcdMigration = InstaMcdAddress(getMcdAddresses()).migration(); // Migration contract address + TokenInterface dai = TokenInterface(getDaiAddress()); + dai.transferFrom(msg.sender, address(this), wad); + if (dai.allowance(address(this), scdMcdMigration) < wad) { + dai.approve(scdMcdMigration, wad); + } + ScdMcdMigration(scdMcdMigration).swapDaiToSai(wad); + TokenInterface(getSaiAddress()).transfer(msg.sender, wad); + } + + function swapSaiToDai( + uint wad // Amount to swap + ) external + { + address scdMcdMigration = InstaMcdAddress(getMcdAddresses()).migration(); // Migration contract address + TokenInterface sai = TokenInterface(getSaiAddress()); + sai.transferFrom(msg.sender, address(this), wad); + if (sai.allowance(address(this), scdMcdMigration) < wad) { + sai.approve(scdMcdMigration, wad); + } + ScdMcdMigration(scdMcdMigration).swapSaiToDai(wad); + TokenInterface(getDaiAddress()).transfer(msg.sender, wad); + } +}