{
    "schemaVersion": "2.0.0",
    "contractName": "Coordinator",
    "compilerOutput": {
        "abi": [
            {
                "constant": true,
                "inputs": [{ "name": "hash", "type": "bytes32" }, { "name": "signature", "type": "bytes" }],
                "name": "getSignerAddress",
                "outputs": [{ "name": "signerAddress", "type": "address" }],
                "payable": false,
                "stateMutability": "pure",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "components": [
                            { "name": "salt", "type": "uint256" },
                            { "name": "signerAddress", "type": "address" },
                            { "name": "data", "type": "bytes" }
                        ],
                        "name": "transaction",
                        "type": "tuple"
                    }
                ],
                "name": "getTransactionHash",
                "outputs": [{ "name": "transactionHash", "type": "bytes32" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "components": [
                            { "name": "txOrigin", "type": "address" },
                            { "name": "transactionHash", "type": "bytes32" },
                            { "name": "transactionSignature", "type": "bytes" },
                            { "name": "approvalExpirationTimeSeconds", "type": "uint256" }
                        ],
                        "name": "approval",
                        "type": "tuple"
                    }
                ],
                "name": "getCoordinatorApprovalHash",
                "outputs": [{ "name": "approvalHash", "type": "bytes32" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": false,
                "inputs": [
                    {
                        "components": [
                            { "name": "salt", "type": "uint256" },
                            { "name": "signerAddress", "type": "address" },
                            { "name": "data", "type": "bytes" }
                        ],
                        "name": "transaction",
                        "type": "tuple"
                    },
                    { "name": "txOrigin", "type": "address" },
                    { "name": "transactionSignature", "type": "bytes" },
                    { "name": "approvalExpirationTimeSeconds", "type": "uint256[]" },
                    { "name": "approvalSignatures", "type": "bytes[]" }
                ],
                "name": "executeTransaction",
                "outputs": [],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "EIP712_EXCHANGE_DOMAIN_HASH",
                "outputs": [{ "name": "", "type": "bytes32" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [
                    {
                        "components": [
                            { "name": "salt", "type": "uint256" },
                            { "name": "signerAddress", "type": "address" },
                            { "name": "data", "type": "bytes" }
                        ],
                        "name": "transaction",
                        "type": "tuple"
                    },
                    { "name": "txOrigin", "type": "address" },
                    { "name": "transactionSignature", "type": "bytes" },
                    { "name": "approvalExpirationTimeSeconds", "type": "uint256[]" },
                    { "name": "approvalSignatures", "type": "bytes[]" }
                ],
                "name": "assertValidCoordinatorApprovals",
                "outputs": [],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [{ "name": "data", "type": "bytes" }],
                "name": "decodeOrdersFromFillData",
                "outputs": [
                    {
                        "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[]"
                    }
                ],
                "payable": false,
                "stateMutability": "pure",
                "type": "function"
            },
            {
                "constant": true,
                "inputs": [],
                "name": "EIP712_COORDINATOR_DOMAIN_HASH",
                "outputs": [{ "name": "", "type": "bytes32" }],
                "payable": false,
                "stateMutability": "view",
                "type": "function"
            },
            {
                "inputs": [{ "name": "_exchange", "type": "address" }],
                "payable": false,
                "stateMutability": "nonpayable",
                "type": "constructor"
            }
        ],
        "devdoc": {
            "methods": {
                "assertValidCoordinatorApprovals((uint256,address,bytes),address,bytes,uint256[],bytes[])": {
                    "details": "Validates that the 0x transaction has been approved by all of the feeRecipients      that correspond to each order in the transaction's Exchange calldata.",
                    "params": {
                        "approvalExpirationTimeSeconds": "Array of expiration times in seconds for which each corresponding approval signature expires.",
                        "approvalSignatures": "Array of signatures that correspond to the feeRecipients of each order in the transaction's Exchange calldata.",
                        "transaction": "0x transaction containing salt, signerAddress, and data.",
                        "transactionSignature": "Proof that the transaction has been signed by the signer.",
                        "txOrigin": "Required signer of Ethereum transaction calling this function."
                    }
                },
                "decodeOrdersFromFillData(bytes)": {
                    "details": "Decodes the orders from Exchange calldata representing any fill method.",
                    "params": { "data": "Exchange calldata representing a fill method." },
                    "return": "The orders from the Exchange calldata."
                },
                "executeTransaction((uint256,address,bytes),address,bytes,uint256[],bytes[])": {
                    "details": "Executes a 0x transaction that has been signed by the feeRecipients that correspond to each order in the transaction's Exchange calldata.",
                    "params": {
                        "approvalExpirationTimeSeconds": "Array of expiration times in seconds for which each corresponding approval signature expires.",
                        "approvalSignatures": "Array of signatures that correspond to the feeRecipients of each order in the transaction's Exchange calldata.",
                        "transaction": "0x transaction containing salt, signerAddress, and data.",
                        "transactionSignature": "Proof that the transaction has been signed by the signer.",
                        "txOrigin": "Required signer of Ethereum transaction calling this function."
                    }
                },
                "getCoordinatorApprovalHash((address,bytes32,bytes,uint256))": {
                    "details": "Calculated the EIP712 hash of the Coordinator approval mesasage using the domain separator of this contract.",
                    "params": {
                        "approval": "Coordinator approval message containing the transaction hash, transaction signature, and expiration of the approval."
                    },
                    "return": "EIP712 hash of the Coordinator approval message with the domain separator of this contract."
                },
                "getSignerAddress(bytes32,bytes)": {
                    "details": "Recovers the address of a signer given a hash and signature.",
                    "params": {
                        "hash": "Any 32 byte hash.",
                        "signature": "Proof that the hash has been signed by signer."
                    }
                },
                "getTransactionHash((uint256,address,bytes))": {
                    "details": "Calculates the EIP712 hash of a 0x transaction using the domain separator of the Exchange contract.",
                    "params": { "transaction": "0x transaction containing salt, signerAddress, and data." },
                    "return": "EIP712 hash of the transaction with the domain separator of this contract."
                }
            }
        },
        "evm": {
            "bytecode": {
                "object": "[encoded data, 18104 characters]"
            }
        }
    },
    "networks": {}
}
