mirror of
https://github.com/Instadapp/InstaContract.git
synced 2024-07-29 22:47:45 +00:00
Completed DAI2ETH contract.
This commit is contained in:
parent
bdb791e07e
commit
9c6ad44c83
|
|
@ -0,0 +1,106 @@
|
|||
pragma solidity ^0.4.24;
|
||||
|
||||
interface IERC20 {
|
||||
function balanceOf(address who) external view returns (uint256);
|
||||
// function transfer(address to, uint256 value) external returns (bool);
|
||||
function approve(address spender, uint256 value) external returns (bool);
|
||||
}
|
||||
|
||||
interface AddressRegistry {
|
||||
function getAddr(string name) external view returns(address);
|
||||
}
|
||||
|
||||
interface Kyber {
|
||||
function trade(
|
||||
address src,
|
||||
uint srcAmount,
|
||||
address dest,
|
||||
address destAddress,
|
||||
uint maxDestAmount,
|
||||
uint minConversionRate,
|
||||
address walletId
|
||||
) external payable returns (uint);
|
||||
|
||||
function getExpectedRate(
|
||||
address src,
|
||||
address dest,
|
||||
uint srcQty
|
||||
) external view returns (uint, uint);
|
||||
}
|
||||
|
||||
|
||||
contract Registry {
|
||||
address public addressRegistry;
|
||||
modifier onlyAdmin() {
|
||||
require(
|
||||
msg.sender == getAddress("admin"),
|
||||
"Permission Denied"
|
||||
);
|
||||
_;
|
||||
}
|
||||
function getAddress(string name) internal view returns(address) {
|
||||
AddressRegistry addrReg = AddressRegistry(addressRegistry);
|
||||
return addrReg.getAddr(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
contract Trade is Registry {
|
||||
|
||||
event KyberTrade(
|
||||
address src,
|
||||
uint srcAmt,
|
||||
address dest,
|
||||
uint destAmt,
|
||||
address beneficiary,
|
||||
uint minConversionRate,
|
||||
address affiliate
|
||||
);
|
||||
|
||||
function approveDAIKyber() public {
|
||||
IERC20 tokenFunctions = IERC20(getAddress("dai"));
|
||||
tokenFunctions.approve(getAddress("kyber"), 2**255);
|
||||
}
|
||||
|
||||
function expectedETH(uint srcDAI) public view returns (uint, uint) {
|
||||
Kyber kyberFunctions = Kyber(getAddress("kyber"));
|
||||
return kyberFunctions.getExpectedRate(getAddress("dai"), getAddress("eth"), srcDAI);
|
||||
}
|
||||
|
||||
function dai2eth(uint srcDAI) public payable returns (uint destAmt) {
|
||||
address src = getAddress("dai");
|
||||
address dest = getAddress("eth");
|
||||
uint minConversionRate;
|
||||
(, minConversionRate) = expectedETH(srcDAI);
|
||||
|
||||
// Interacting with Kyber Proxy Contract
|
||||
Kyber kyberFunctions = Kyber(getAddress("kyber"));
|
||||
destAmt = kyberFunctions.trade.value(msg.value)(
|
||||
src,
|
||||
srcDAI,
|
||||
dest,
|
||||
msg.sender,
|
||||
2**255,
|
||||
minConversionRate,
|
||||
getAddress("admin")
|
||||
);
|
||||
|
||||
emit KyberTrade(
|
||||
src, srcDAI, dest, destAmt, msg.sender, minConversionRate, getAddress("admin")
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
contract DAI2ETH is Trade {
|
||||
|
||||
constructor(address rAddr) public {
|
||||
addressRegistry = rAddr;
|
||||
approveDAIKyber();
|
||||
}
|
||||
|
||||
function () public payable {}
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
pragma solidity 0.4.24;
|
||||
|
||||
|
||||
library SafeMath {
|
||||
|
||||
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||
|
|
@ -52,7 +53,6 @@ interface Swap {
|
|||
|
||||
|
||||
contract Registry {
|
||||
|
||||
address public addressRegistry;
|
||||
modifier onlyAdmin() {
|
||||
require(
|
||||
|
|
@ -61,12 +61,10 @@ contract Registry {
|
|||
);
|
||||
_;
|
||||
}
|
||||
|
||||
function getAddress(string name) internal view returns(address) {
|
||||
AddressRegistry addrReg = AddressRegistry(addressRegistry);
|
||||
return addrReg.getAddr(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user