[
    {
        "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": "out_a" },
            { "type": "uint256", "name": "out_b" }
        ],
        "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"
    }
]
