mirror of
https://github.com/Instadapp/smart-contract.git
synced 2024-07-29 22:08:07 +00:00
MKR fee contract
This commit is contained in:
parent
a3854850de
commit
fdb675bb6a
103
contracts/Read/InstaCdpFee.sol
Normal file
103
contracts/Read/InstaCdpFee.sol
Normal file
|
@ -0,0 +1,103 @@
|
|||
pragma solidity ^0.5.0;
|
||||
|
||||
interface TubInterface {
|
||||
function tab(bytes32) external view returns (uint);
|
||||
function rap(bytes32) external view returns (uint);
|
||||
function pep() external view returns (PepInterface);
|
||||
function cups(bytes32) external view returns (address, uint, uint, uint);
|
||||
}
|
||||
|
||||
interface PepInterface {
|
||||
function peek() external view returns (bytes32, bool);
|
||||
}
|
||||
|
||||
interface InstaMcdAddress {
|
||||
function dai() external view returns (address);
|
||||
function gov() external view returns (address);
|
||||
function saiTub() external view returns (address);
|
||||
function weth() external view returns (address);
|
||||
function sai() external view returns (address);
|
||||
}
|
||||
|
||||
interface UniswapExchange {
|
||||
function getEthToTokenOutputPrice(uint256 tokensBought) external view returns (uint256 ethSold);
|
||||
function getTokenToEthOutputPrice(uint256 ethBought) external view returns (uint256 tokensSold);
|
||||
}
|
||||
|
||||
interface UniswapFactoryInterface {
|
||||
function getExchange(address token) external view returns (address exchange);
|
||||
}
|
||||
|
||||
interface OtcInterface {
|
||||
function getPayAmount(address, address, uint) external view returns (uint);
|
||||
}
|
||||
|
||||
|
||||
contract DSMath {
|
||||
|
||||
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 WAD = 10 ** 18;
|
||||
// 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;
|
||||
// }
|
||||
|
||||
function wdiv(uint x, uint y) internal pure returns (uint z) {
|
||||
z = add(mul(x, WAD), y / 2) / y;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
contract CdpFee is DSMath {
|
||||
|
||||
address public instaMcdAddress = 0x5092b94F61b1aa54969C67b58695a6fB15D70645;
|
||||
address public otcAddr = 0x39755357759cE0d7f32dC8dC45414CCa409AE24e;
|
||||
address public ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
|
||||
address public uniMkrEx = 0x2C4Bd064b998838076fa341A83d007FC2FA50957;
|
||||
address public uniFactory = 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95;
|
||||
address public peekAddr = 0x5C1fc813d9c1B5ebb93889B3d63bA24984CA44B7;
|
||||
address public mkr = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;
|
||||
address public weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
|
||||
|
||||
function getMkrRate() public view returns (uint mkrInUsd) {
|
||||
(bytes32 val,) = PepInterface(peekAddr).peek();
|
||||
mkrInUsd = uint(val);
|
||||
}
|
||||
|
||||
function getBestMkrSwap(address srcTknAddr, uint destMkrAmt) public view returns(uint bestEx, uint srcAmt) {
|
||||
uint oasisPrice = getOasisSwap(srcTknAddr, destMkrAmt);
|
||||
uint uniswapPrice = getUniswapSwap(srcTknAddr, destMkrAmt);
|
||||
srcAmt = oasisPrice < uniswapPrice ? oasisPrice : uniswapPrice;
|
||||
bestEx = oasisPrice < uniswapPrice ? 0 : 1; // if 0 then use Oasis for Swap, if 1 then use Uniswap
|
||||
}
|
||||
|
||||
function getOasisSwap(address tokenAddr, uint destMkrAmt) public view returns(uint srcAmt) {
|
||||
address srcTknAddr = tokenAddr == ethAddr ? weth : tokenAddr;
|
||||
srcAmt = OtcInterface(otcAddr).getPayAmount(srcTknAddr, mkr, destMkrAmt);
|
||||
}
|
||||
|
||||
function getUniswapSwap(address srcTknAddr, uint destMkrAmt) public view returns(uint srcAmt) {
|
||||
UniswapExchange mkrEx = UniswapExchange(uniMkrEx);
|
||||
if (srcTknAddr == ethAddr) {
|
||||
srcAmt = mkrEx.getEthToTokenOutputPrice(destMkrAmt);
|
||||
} else {
|
||||
address buyTknExAddr = UniswapFactoryInterface(uniFactory).getExchange(srcTknAddr);
|
||||
UniswapExchange buyTknEx = UniswapExchange(buyTknExAddr);
|
||||
srcAmt = buyTknEx.getTokenToEthOutputPrice(mkrEx.getEthToTokenOutputPrice(destMkrAmt)); //Check thrilok is this correct
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user