{
    "schemaVersion": "2.0.0",
    "contractName": "Forwarder",
    "compilerOutput": {
        "abi": [
            {
                "constant": false,
                "inputs": [
                    {
                        "components": [
                            { "name": "makerAddress", "type": "address" },
                            { "name": "takerAddress", "type": "address" },
                            { "name": "feeRecipientAddress", "type": "address" },
                            { "name": "senderAddress", "type": "address" },
                            { "name": "makerAssetAmount", "type": "uint256" },
                            { "name": "takerAssetAmount", "type": "uint256" },
                            { "name": "makerFee", "type": "uint256" },
                            { "name": "takerFee", "type": "uint256" },
                            { "name": "expirationTimeSeconds", "type": "uint256" },
                            { "name": "salt", "type": "uint256" },
                            { "name": "makerAssetData", "type": "bytes" },
                            { "name": "takerAssetData", "type": "bytes" }
                        ],
                        "name": "orders",
                        "type": "tuple[]"
                    },
                    { "name": "makerAssetFillAmount", "type": "uint256" },
                    { "name": "signatures", "type": "bytes[]" },
                    {
                        "components": [
                            { "name": "makerAddress", "type": "address" },
                            { "name": "takerAddress", "type": "address" },
                            { "name": "feeRecipientAddress", "type": "address" },
                            { "name": "senderAddress", "type": "address" },
                            { "name": "makerAssetAmount", "type": "uint256" },
                            { "name": "takerAssetAmount", "type": "uint256" },
                            { "name": "makerFee", "type": "uint256" },
                            { "name": "takerFee", "type": "uint256" },
                            { "name": "expirationTimeSeconds", "type": "uint256" },
                            { "name": "salt", "type": "uint256" },
                            { "name": "makerAssetData", "type": "bytes" },
                            { "name": "takerAssetData", "type": "bytes" }
                        ],
                        "name": "feeOrders",
                        "type": "tuple[]"
                    },
                    { "name": "feeSignatures", "type": "bytes[]" },
                    { "name": "feePercentage", "type": "uint256" },
                    { "name": "feeRecipient", "type": "address" }
                ],
                "name": "marketBuyOrdersWithEth",
                "outputs": [
                    {
                        "components": [
                            { "name": "makerAssetFilledAmount", "type": "uint256" },
                            { "name": "takerAssetFilledAmount", "type": "uint256" },
                            { "name": "makerFeePaid", "type": "uint256" },
                            { "name": "takerFeePaid", "type": "uint256" }
                        ],
                        "name": "orderFillResults",
                        "type": "tuple"
                    },
                    {
                        "components": [
                            { "name": "makerAssetFilledAmount", "type": "uint256" },
                            { "name": "takerAssetFilledAmount", "type": "uint256" },
                            { "name": "makerFeePaid", "type": "uint256" },
                            { "name": "takerFeePaid", "type": "uint256" }
                        ],
                        "name": "feeOrderFillResults",
                        "type": "tuple"
                    }
                ],
                "payable": true,
                "stateMutability": "payable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "name": "assetData", "type": "bytes" }, { "name": "amount", "type": "uint256" }],
                "name": "withdrawAsset",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "owner",
                "outputs": [{ "name": "", "type": "address" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "components": [
                            { "name": "makerAddress", "type": "address" },
                            { "name": "takerAddress", "type": "address" },
                            { "name": "feeRecipientAddress", "type": "address" },
                            { "name": "senderAddress", "type": "address" },
                            { "name": "makerAssetAmount", "type": "uint256" },
                            { "name": "takerAssetAmount", "type": "uint256" },
                            { "name": "makerFee", "type": "uint256" },
                            { "name": "takerFee", "type": "uint256" },
                            { "name": "expirationTimeSeconds", "type": "uint256" },
                            { "name": "salt", "type": "uint256" },
                            { "name": "makerAssetData", "type": "bytes" },
                            { "name": "takerAssetData", "type": "bytes" }
                        ],
                        "name": "orders",
                        "type": "tuple[]"
                    },
                    { "name": "signatures", "type": "bytes[]" },
                    {
                        "components": [
                            { "name": "makerAddress", "type": "address" },
                            { "name": "takerAddress", "type": "address" },
                            { "name": "feeRecipientAddress", "type": "address" },
                            { "name": "senderAddress", "type": "address" },
                            { "name": "makerAssetAmount", "type": "uint256" },
                            { "name": "takerAssetAmount", "type": "uint256" },
                            { "name": "makerFee", "type": "uint256" },
                            { "name": "takerFee", "type": "uint256" },
                            { "name": "expirationTimeSeconds", "type": "uint256" },
                            { "name": "salt", "type": "uint256" },
                            { "name": "makerAssetData", "type": "bytes" },
                            { "name": "takerAssetData", "type": "bytes" }
                        ],
                        "name": "feeOrders",
                        "type": "tuple[]"
                    },
                    { "name": "feeSignatures", "type": "bytes[]" },
                    { "name": "feePercentage", "type": "uint256" },
                    { "name": "feeRecipient", "type": "address" }
                ],
                "name": "marketSellOrdersWithEth",
                "outputs": [
                    {
                        "components": [
                            { "name": "makerAssetFilledAmount", "type": "uint256" },
                            { "name": "takerAssetFilledAmount", "type": "uint256" },
                            { "name": "makerFeePaid", "type": "uint256" },
                            { "name": "takerFeePaid", "type": "uint256" }
                        ],
                        "name": "orderFillResults",
                        "type": "tuple"
                    },
                    {
                        "components": [
                            { "name": "makerAssetFilledAmount", "type": "uint256" },
                            { "name": "takerAssetFilledAmount", "type": "uint256" },
                            { "name": "makerFeePaid", "type": "uint256" },
                            { "name": "takerFeePaid", "type": "uint256" }
                        ],
                        "name": "feeOrderFillResults",
                        "type": "tuple"
                    }
                ],
                "payable": true,
                "stateMutability": "payable",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [{ "name": "newOwner", "type": "address" }],
                "name": "transferOwnership",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "inputs": [
                    { "name": "_exchange", "type": "address" },
                    { "name": "_zrxAssetData", "type": "bytes" },
                    { "name": "_wethAssetData", "type": "bytes" }
                ],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            },
            { "payable": true, "stateMutability": "payable", "type": "fallback" }
        ],
        "devdoc": {
            "methods": {
                "marketBuyOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],uint256,bytes[],(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes[],uint256,address)": {
                    "details": "Attempt to purchase makerAssetFillAmount of makerAsset by selling ETH provided with transaction.      Any ZRX required to pay fees for primary orders will automatically be purchased by this contract.      Any ETH not spent will be refunded to sender.",
                    "params": {
                        "feeOrders": "Array of order specifications containing ZRX as makerAsset and WETH as takerAsset. Used to purchase ZRX for primary order fees.",
                        "feePercentage": "Percentage of WETH sold that will payed as fee to forwarding contract feeRecipient.",
                        "feeRecipient": "Address that will receive ETH when orders are filled.",
                        "feeSignatures": "Proofs that feeOrders have been created by makers.",
                        "makerAssetFillAmount": "Desired amount of makerAsset to purchase.",
                        "orders": "Array of order specifications used containing desired makerAsset and WETH as takerAsset.",
                        "signatures": "Proofs that orders have been created by makers."
                    },
                    "return": "Amounts filled and fees paid by maker and taker for both sets of orders."
                },
                "marketSellOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes[],(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes)[],bytes[],uint256,address)": {
                    "details": "Purchases as much of orders' makerAssets as possible by selling up to 95% of transaction's ETH value.      Any ZRX required to pay fees for primary orders will automatically be purchased by this contract.      5% of ETH value is reserved for paying fees to order feeRecipients (in ZRX) and forwarding contract feeRecipient (in ETH).      Any ETH not spent will be refunded to sender.",
                    "params": {
                        "feeOrders": "Array of order specifications containing ZRX as makerAsset and WETH as takerAsset. Used to purchase ZRX for primary order fees.",
                        "feePercentage": "Percentage of WETH sold that will payed as fee to forwarding contract feeRecipient.",
                        "feeRecipient": "Address that will receive ETH when orders are filled.",
                        "feeSignatures": "Proofs that feeOrders have been created by makers.",
                        "orders": "Array of order specifications used containing desired makerAsset and WETH as takerAsset.",
                        "signatures": "Proofs that orders have been created by makers."
                    },
                    "return": "Amounts filled and fees paid by maker and taker for both sets of orders."
                },
                "withdrawAsset(bytes,uint256)": {
                    "details": "Withdraws assets from this contract. The contract requires a ZRX balance in order to      function optimally, and this function allows the ZRX to be withdrawn by owner. It may also be      used to withdraw assets that were accidentally sent to this contract.",
                    "params": {
                        "amount": "Amount of ERC20 token to withdraw.",
                        "assetData": "Byte array encoded for the respective asset proxy."
                    }
                }
            }
        },
        "evm": {
            "bytecode": {
                "object": "[encoded data, 23130 characters]"
            }
        }
    },
    "networks": {}
}
