mirror of
https://github.com/Instadapp/smart-contract.git
synced 2024-07-29 22:08:07 +00:00
uniswap integration in process
This commit is contained in:
parent
e26d632344
commit
01d82a3a75
|
@ -1,23 +1,7 @@
|
||||||
pragma solidity 0.5.0;
|
pragma solidity 0.5.0;
|
||||||
|
|
||||||
|
|
||||||
library SafeMath {
|
import "./safemath.sol";
|
||||||
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
|
|
||||||
if (a == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
uint256 c = a * b;
|
|
||||||
require(c / a == b, "Assertion Failed");
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
function div(uint256 a, uint256 b) internal pure returns (uint256) {
|
|
||||||
require(b > 0, "Assertion Failed");
|
|
||||||
uint256 c = a / b;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IERC20 {
|
interface IERC20 {
|
||||||
function balanceOf(address who) external view returns (uint256);
|
function balanceOf(address who) external view returns (uint256);
|
||||||
|
@ -60,8 +44,8 @@ contract Registry {
|
||||||
|
|
||||||
|
|
||||||
contract Trade is Registry {
|
contract Trade is Registry {
|
||||||
|
|
||||||
using SafeMath for uint;
|
using SafeMath for uint;
|
||||||
using SafeMath for uint256;
|
|
||||||
|
|
||||||
event KyberTrade(address src, uint srcAmt, address dest, uint destAmt, address beneficiary, uint minConversionRate, address affiliate);
|
event KyberTrade(address src, uint srcAmt, address dest, uint destAmt, address beneficiary, uint minConversionRate, address affiliate);
|
||||||
|
|
||||||
|
|
32
contracts/ProxyLogics/safemath.sol
Normal file
32
contracts/ProxyLogics/safemath.sol
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
pragma solidity 0.5.0;
|
||||||
|
|
||||||
|
|
||||||
|
library SafeMath {
|
||||||
|
|
||||||
|
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||||
|
if (a == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
uint256 c = a * b;
|
||||||
|
require(c / a == b, "Assertion Failed");
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
function div(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||||
|
require(b > 0, "Assertion Failed");
|
||||||
|
uint256 c = a / b;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||||
|
assert(b <= a);
|
||||||
|
return a - b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function add(uint256 a, uint256 b) internal pure returns (uint256) {
|
||||||
|
uint256 c = a + b;
|
||||||
|
assert(c >= a);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
74
contracts/ProxyLogics/uniswap.sol
Normal file
74
contracts/ProxyLogics/uniswap.sol
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
pragma solidity 0.5.0;
|
||||||
|
|
||||||
|
|
||||||
|
import "./safemath.sol";
|
||||||
|
|
||||||
|
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);
|
||||||
|
function transferFrom(address from, address to, uint256 value) external returns (bool);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AddressRegistry {
|
||||||
|
function getAddr(string calldata name) external view returns (address);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UniswapFactoryInterface {
|
||||||
|
// Get Exchange and Token Info
|
||||||
|
function getExchange(address token) external view returns (address exchange);
|
||||||
|
function getToken(address exchange) external view returns (address token);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Solidity Interface
|
||||||
|
interface UniswapExchange {
|
||||||
|
// Address of ERC20 token sold on this exchange
|
||||||
|
function tokenAddress() external view returns (address token);
|
||||||
|
// Address of Uniswap Factory
|
||||||
|
function factoryAddress() external view returns (address factory);
|
||||||
|
// Get Prices
|
||||||
|
function getEthToTokenInputPrice(uint256 eth_sold) external view returns (uint256 tokens_bought);
|
||||||
|
function getEthToTokenOutputPrice(uint256 tokens_bought) external view returns (uint256 eth_sold);
|
||||||
|
function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 eth_bought);
|
||||||
|
function getTokenToEthOutputPrice(uint256 eth_bought) external view returns (uint256 tokens_sold);
|
||||||
|
// Trade ETH to ERC20
|
||||||
|
function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline) external payable returns (uint256 tokens_bought);
|
||||||
|
function ethToTokenTransferInput(uint256 min_tokens, uint256 deadline, address recipient) external payable returns (uint256 tokens_bought);
|
||||||
|
function ethToTokenSwapOutput(uint256 tokens_bought, uint256 deadline) external payable returns (uint256 eth_sold);
|
||||||
|
function ethToTokenTransferOutput(uint256 tokens_bought, uint256 deadline, address recipient) external payable returns (uint256 eth_sold);
|
||||||
|
// Trade ERC20 to ETH
|
||||||
|
function tokenToEthSwapInput(uint256 tokens_sold, uint256 min_eth, uint256 deadline) external returns (uint256 eth_bought);
|
||||||
|
function tokenToEthTransferInput(uint256 tokens_sold, uint256 min_tokens, uint256 deadline, address recipient) external returns (uint256 eth_bought);
|
||||||
|
function tokenToEthSwapOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline) external returns (uint256 tokens_sold);
|
||||||
|
function tokenToEthTransferOutput(uint256 eth_bought, uint256 max_tokens, uint256 deadline, address recipient) external returns (uint256 tokens_sold);
|
||||||
|
// Trade ERC20 to ERC20
|
||||||
|
function tokenToTokenSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address token_addr) external returns (uint256 tokens_bought);
|
||||||
|
function tokenToTokenTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address token_addr) external returns (uint256 tokens_bought);
|
||||||
|
function tokenToTokenSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address token_addr) external returns (uint256 tokens_sold);
|
||||||
|
function tokenToTokenTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address token_addr) external returns (uint256 tokens_sold);
|
||||||
|
// Trade ERC20 to Custom Pool
|
||||||
|
function tokenToExchangeSwapInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address exchange_addr) external returns (uint256 tokens_bought);
|
||||||
|
function tokenToExchangeTransferInput(uint256 tokens_sold, uint256 min_tokens_bought, uint256 min_eth_bought, uint256 deadline, address recipient, address exchange_addr) external returns (uint256 tokens_bought);
|
||||||
|
function tokenToExchangeSwapOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address exchange_addr) external returns (uint256 tokens_sold);
|
||||||
|
function tokenToExchangeTransferOutput(uint256 tokens_bought, uint256 max_tokens_sold, uint256 max_eth_sold, uint256 deadline, address recipient, address exchange_addr) external returns (uint256 tokens_sold);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
contract Registry {
|
||||||
|
address public addressRegistry;
|
||||||
|
modifier onlyAdmin() {
|
||||||
|
require(msg.sender == getAddress("admin"), "Permission Denied");
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
function getAddress(string memory name) internal view returns (address) {
|
||||||
|
AddressRegistry addrReg = AddressRegistry(addressRegistry);
|
||||||
|
return addrReg.getAddr(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
contract Trade is Registry {
|
||||||
|
|
||||||
|
using SafeMath for uint;
|
||||||
|
|
||||||
|
}
|
29
contracts/ProxyLogics/uniswapPool.sol
Normal file
29
contracts/ProxyLogics/uniswapPool.sol
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
pragma solidity 0.5.0;
|
||||||
|
|
||||||
|
|
||||||
|
interface UniswapFactoryInterface {
|
||||||
|
// Get Exchange and Token Info
|
||||||
|
function getExchange(address token) external view returns (address exchange);
|
||||||
|
function getToken(address exchange) external view returns (address token);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Solidity Interface
|
||||||
|
|
||||||
|
interface UniswapPool {
|
||||||
|
// Address of ERC20 token sold on this exchange
|
||||||
|
function tokenAddress() external view returns (address token);
|
||||||
|
// Address of Uniswap Factory
|
||||||
|
function factoryAddress() external view returns (address factory);
|
||||||
|
// Provide Liquidity
|
||||||
|
function addLiquidity(uint256 min_liquidity, uint256 max_tokens, uint256 deadline) external payable returns (uint256);
|
||||||
|
function removeLiquidity(uint256 amount, uint256 min_eth, uint256 min_tokens, uint256 deadline) external returns (uint256, uint256);
|
||||||
|
// ERC20 comaptibility for liquidity tokens
|
||||||
|
function name() external returns (bytes32);
|
||||||
|
function symbol() external returns (bytes32);
|
||||||
|
function decimals() external returns (uint256);
|
||||||
|
function transfer(address _to, uint256 _value) external returns (bool);
|
||||||
|
function transferFrom(address _from, address _to, uint256 value) external returns (bool);
|
||||||
|
function approve(address _spender, uint256 _value) external returns (bool);
|
||||||
|
function allowance(address _owner, address _spender) external view returns (uint256);
|
||||||
|
function balanceOf(address _owner) external view returns (uint256);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user