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;
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
import "./safemath.sol";
|
||||
|
||||
interface IERC20 {
|
||||
function balanceOf(address who) external view returns (uint256);
|
||||
|
@ -60,8 +44,8 @@ contract Registry {
|
|||
|
||||
|
||||
contract Trade is Registry {
|
||||
|
||||
using SafeMath for uint;
|
||||
using SafeMath for uint256;
|
||||
|
||||
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