[
  {
    "name": "TokenPurchase",
    "inputs": [
      {
        "type": "address",
        "name": "buyer",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "eth_sold",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "tokens_bought",
        "indexed": true
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "EthPurchase",
    "inputs": [
      {
        "type": "address",
        "name": "buyer",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "tokens_sold",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "eth_bought",
        "indexed": true
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "AddLiquidity",
    "inputs": [
      {
        "type": "address",
        "name": "provider",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "eth_amount",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "token_amount",
        "indexed": true
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "RemoveLiquidity",
    "inputs": [
      {
        "type": "address",
        "name": "provider",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "eth_amount",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "token_amount",
        "indexed": true
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "Transfer",
    "inputs": [
      {
        "type": "address",
        "name": "_from",
        "indexed": true
      },
      {
        "type": "address",
        "name": "_to",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "_value",
        "indexed": false
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "Approval",
    "inputs": [
      {
        "type": "address",
        "name": "_owner",
        "indexed": true
      },
      {
        "type": "address",
        "name": "_spender",
        "indexed": true
      },
      {
        "type": "uint256",
        "name": "_value",
        "indexed": false
      }
    ],
    "anonymous": false,
    "type": "event"
  },
  {
    "name": "setup",
    "outputs": [],
    "inputs": [
      {
        "type": "address",
        "name": "token_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "addLiquidity",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "min_liquidity"
      },
      {
        "type": "uint256",
        "name": "max_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "removeLiquidity",
    "outputs": [
      {
        "type": "uint256",
        "name": "outA"
      },
      {
        "type": "uint256",
        "name": "outB"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "amount"
      },
      {
        "type": "uint256",
        "name": "min_eth"
      },
      {
        "type": "uint256",
        "name": "min_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "__default__",
    "outputs": [],
    "inputs": [],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "ethToTokenSwapInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "min_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "ethToTokenTransferInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "min_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      }
    ],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "ethToTokenSwapOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "ethToTokenTransferOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      }
    ],
    "constant": false,
    "payable": true,
    "type": "function"
  },
  {
    "name": "tokenToEthSwapInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_eth"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToEthTransferInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_eth"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToEthSwapOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "eth_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToEthTransferOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "eth_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToTokenSwapInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_tokens_bought"
      },
      {
        "type": "uint256",
        "name": "min_eth_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "token_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToTokenTransferInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_tokens_bought"
      },
      {
        "type": "uint256",
        "name": "min_eth_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      },
      {
        "type": "address",
        "name": "token_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToTokenSwapOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens_sold"
      },
      {
        "type": "uint256",
        "name": "max_eth_sold"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "token_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToTokenTransferOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens_sold"
      },
      {
        "type": "uint256",
        "name": "max_eth_sold"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      },
      {
        "type": "address",
        "name": "token_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToExchangeSwapInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_tokens_bought"
      },
      {
        "type": "uint256",
        "name": "min_eth_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "exchange_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToExchangeTransferInput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      },
      {
        "type": "uint256",
        "name": "min_tokens_bought"
      },
      {
        "type": "uint256",
        "name": "min_eth_bought"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      },
      {
        "type": "address",
        "name": "exchange_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToExchangeSwapOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens_sold"
      },
      {
        "type": "uint256",
        "name": "max_eth_sold"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "exchange_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenToExchangeTransferOutput",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      },
      {
        "type": "uint256",
        "name": "max_tokens_sold"
      },
      {
        "type": "uint256",
        "name": "max_eth_sold"
      },
      {
        "type": "uint256",
        "name": "deadline"
      },
      {
        "type": "address",
        "name": "recipient"
      },
      {
        "type": "address",
        "name": "exchange_addr"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "getEthToTokenInputPrice",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "eth_sold"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "getEthToTokenOutputPrice",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_bought"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "getTokenToEthInputPrice",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "tokens_sold"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "getTokenToEthOutputPrice",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "uint256",
        "name": "eth_bought"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "tokenAddress",
    "outputs": [
      {
        "type": "address",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "factoryAddress",
    "outputs": [
      {
        "type": "address",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "balanceOf",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "address",
        "name": "_owner"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "transfer",
    "outputs": [
      {
        "type": "bool",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "address",
        "name": "_to"
      },
      {
        "type": "uint256",
        "name": "_value"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "transferFrom",
    "outputs": [
      {
        "type": "bool",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "address",
        "name": "_from"
      },
      {
        "type": "address",
        "name": "_to"
      },
      {
        "type": "uint256",
        "name": "_value"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "approve",
    "outputs": [
      {
        "type": "bool",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "address",
        "name": "_spender"
      },
      {
        "type": "uint256",
        "name": "_value"
      }
    ],
    "constant": false,
    "payable": false,
    "type": "function"
  },
  {
    "name": "allowance",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [
      {
        "type": "address",
        "name": "_owner"
      },
      {
        "type": "address",
        "name": "_spender"
      }
    ],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "name",
    "outputs": [
      {
        "type": "bytes32",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "symbol",
    "outputs": [
      {
        "type": "bytes32",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "decimals",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  },
  {
    "name": "totalSupply",
    "outputs": [
      {
        "type": "uint256",
        "name": "out"
      }
    ],
    "inputs": [],
    "constant": true,
    "payable": false,
    "type": "function"
  }
]
