Skip to main content
Version: V1

Factory

Solidity#

interface UniswapFactoryInterface {    // Public Variables    address public exchangeTemplate;    uint256 public tokenCount;    // Create Exchange    function createExchange(address token) external returns (address exchange);    // Get Exchange and Token Info    function getExchange(address token) external view returns (address exchange);    function getToken(address exchange) external view returns (address token);    function getTokenWithId(uint256 tokenId) external view returns (address token);    // Never use    function initializeFactory(address template) external;}

Vyper#

contract UniswapFactoryInterface():    # Create Exchange    def createExchange(token: address) -> address: modifying    # Public Variables    def exchangeTemplate() -> address: constant    def tokenCount() -> uint256: constant    # Get Exchange and Token Info    def getExchange(token_addr: address) -> address: constant    def getToken(exchange: address) -> address: constant    def getTokenWithId(token_id: uint256) -> address: constant    # Initialize Factory    def initializeFactory(template: address): modifying

Exchange

Solidity#

interface UniswapExchangeInterface {    // 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);    // 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_eth, 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);    // ERC20 comaptibility for liquidity tokens    bytes32 public name;    bytes32 public symbol;    uint256 public decimals;    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);    function totalSupply() external view returns (uint256);    // Never use    function setup(address token_addr) external;}

Vyper#

contract UniswapExchangeInterface():    # Public Variables    def tokenAddress() -> address: constant    def factoryAddress() -> address: constant    # Providing Liquidity    def addLiquidity(min_liquidity: uint256, max_tokens: uint256, deadline: timestamp) -> uint256: modifying    def removeLiquidity(amount: uint256, min_eth: uint256(wei), min_tokens: uint256, deadline: timestamp) -> (uint256(wei), uint256): modifying    # Trading    def ethToTokenSwapInput(min_tokens: uint256, deadline: timestamp) -> uint256: modifying    def ethToTokenTransferInput(min_tokens: uint256, deadline: timestamp, recipient: address) -> uint256: modifying    def ethToTokenSwapOutput(tokens_bought: uint256, deadline: timestamp) -> uint256(wei): modifying    def ethToTokenTransferOutput(tokens_bought: uint256, deadline: timestamp, recipient: address) -> uint256(wei): modifying    def tokenToEthSwapInput(tokens_sold: uint256, min_eth: uint256(wei), deadline: timestamp) -> uint256(wei): modifying    def tokenToEthTransferInput(tokens_sold: uint256, min_eth: uint256(wei), deadline: timestamp, recipient: address) -> uint256(wei): modifying    def tokenToEthSwapOutput(eth_bought: uint256(wei), max_tokens: uint256, deadline: timestamp) -> uint256: modifying    def tokenToEthTransferOutput(eth_bought: uint256(wei), max_tokens: uint256, deadline: timestamp, recipient: address) -> uint256: modifying    def tokenToTokenSwapInput(tokens_sold: uint256, min_tokens_bought: uint256, min_eth_bought: uint256(wei), deadline: timestamp, token_addr: address) -> uint256: modifying    def tokenToTokenTransferInput(tokens_sold: uint256, min_tokens_bought: uint256, min_eth_bought: uint256(wei), deadline: timestamp, recipient: address, token_addr: address) -> uint256: modifying    def tokenToTokenSwapOutput(tokens_bought: uint256, max_tokens_sold: uint256, max_eth_sold: uint256(wei), deadline: timestamp, token_addr: address) -> uint256: modifying    def tokenToTokenTransferOutput(tokens_bought: uint256, max_tokens_sold: uint256, max_eth_sold: uint256(wei), deadline: timestamp, recipient: address, token_addr: address) -> uint256: modifying    def tokenToExchangeSwapInput(tokens_sold: uint256, min_tokens_bought: uint256, min_eth_bought: uint256(wei), deadline: timestamp, exchange_addr: address) -> uint256: modifying    def tokenToExchangeTransferInput(tokens_sold: uint256, min_tokens_bought: uint256, min_eth_bought: uint256(wei), deadline: timestamp, recipient: address, exchange_addr: address) -> uint256: modifying    def tokenToExchangeSwapOutput(tokens_bought: uint256, max_tokens_sold: uint256, max_eth_sold: uint256(wei), deadline: timestamp, exchange_addr: address) -> uint256: modifying    def tokenToExchangeTransferOutput(tokens_bought: uint256, max_tokens_sold: uint256, max_eth_sold: uint256(wei), deadline: timestamp, recipient: address, exchange_addr: address) -> uint256: modifying    # Get Price    def getEthToTokenInputPrice(eth_sold: uint256(wei)) -> uint256: constant    def getEthToTokenOutputPrice(tokens_bought: uint256) -> uint256(wei): constant    def getTokenToEthInputPrice(tokens_sold: uint256) -> uint256(wei): constant    def getTokenToEthOutputPrice(eth_bought: uint256(wei)) -> uint256: constant    # Pool Token ERC20 Compatibility    def balanceOf() -> address: constant    def allowance(_owner : address, _spender : address) -> uint256: constant    def transfer(_to : address, _value : uint256) -> bool: modifying    def transferFrom(_from : address, _to : address, _value : uint256) -> bool: modifying    def approve(_spender : address, _value : uint256) -> bool: modifying    # Setup    def setup(token_addr: address): modifying

ERC20 Token

Solidity#

interface ERC20Interface {    function totalSupply() public view returns (uint);    function balanceOf(address tokenOwner) public view returns (uint balance);    function allowance(address tokenOwner, address spender) public view returns (uint remaining);    function transfer(address to, uint tokens) public returns (bool success);    function approve(address spender, uint tokens) public returns (bool success);    function transferFrom(address from, address to, uint tokens) public returns (bool success);    // optional    function name() external view returns (string);    function symbol() external view returns (string);    function decimals() external view returns (string);
    event Transfer(address indexed from, address indexed to, uint tokens);    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);}

Vyper#

contract ERC20Interface():    def totalSupply() -> uint256: constant    def balanceOf(_owner: address) -> uint256: constant    def allowance(_owner : address, _spender : address) -> uint256: constant    def transfer(_to : address, _value : uint256) -> bool: modifying    def approve(_spender : address, _value : uint256) -> bool: modifying    def transferFrom(_from : address, _to : address, _value : uint256) -> bool: modifying    # optional    def name() -> bytes32: constant    def symbol() -> bytes32: constant    def decimals() -> uint256: constant