{
    "_format": "hh-sol-artifact-1",
    "contractName": "TokenExchange",
    "sourceName": "contracts/TokenExchange.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "name": "ExchangeOrderSent",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                }
            ],
            "name": "OrderSettled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                }
            ],
            "name": "Trade",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                }
            ],
            "name": "cancelOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nextOrderId",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "orders",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "tokenGive",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "tokenGet",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountGive",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amountGet",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_tokenGive",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_tokenGet",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGive",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_amountGet",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_tokenGiveBalance",
                    "type": "uint256"
                }
            ],
            "name": "sendOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "orderId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "trade",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50610e87806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638129fc1c116100665780638129fc1c146100e45780638da5cb5b146100ec578063a85c38ef14610107578063e20be69a14610199578063f2fde38b146101ac57600080fd5b80632a58b33014610098578063514fcac7146100b4578063715018a6146100c95780638028136a146100d1575b600080fd5b6100a160655481565b6040519081526020015b60405180910390f35b6100c76100c2366004610c1d565b6101bf565b005b6100c7610335565b6100c76100df366004610c52565b610349565b6100c76104d9565b6033546040516001600160a01b0390911681526020016100ab565b61015a610115366004610c1d565b6066602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593851694929391929091169086565b604080516001600160a01b03978816815295871660208701528501939093526060840191909152909216608082015260a081019190915260c0016100ab565b6100c76101a7366004610c9f565b6105ef565b6100c76101ba366004610cc1565b610791565b6101c7610807565b600081815260666020908152604091829020825160c08101845281546001600160a01b03908116825260018301548116938201939093526002820154938101939093526003810154606084015260048101549091166080830181905260059091015460a08301526102675760405162461bcd60e51b81526020600482015260056024820152642a2298181960d91b60448201526064015b60405180910390fd5b60a08101511561029257608081015160a08201518251610292926001600160a01b0390911691610861565b805160208083015160a0840151604080516001600160a01b039586168152949092169284019290925282015282907ff763d5bc84f4f7cfd13e7c5f8b3045e94e42aece4c27e81c9b31759927a0fc2c9060600160405180910390a250600090815260666020526040812080546001600160a01b03199081168255600182018054821690556002820183905560038201839055600482018054909116905560050155565b61033d610807565b61034760006108c9565b565b610351610807565b600081116103895760405162461bcd60e51b8152602060048201526005602482015264544530303160d81b604482015260640161025e565b61039e6001600160a01b03861633308461091b565b6040805160c0810182526001600160a01b038088168252868116602080840191825283850188815260608501888152336080870181815260a088018a81526065805460009081526066909752958a9020985189549089166001600160a01b0319918216178a55965160018a018054918a16918916919091179055935160028901559151600388015590516004870180549190961694169390931790935591516005909301929092555491517f291fe7b7effb8442ef421f6392e3caf152b74849a1e3fa333704f74f0fc474b8916104b291899089908990899089906001600160a01b03968716815294861660208601529290941660408401526060830152608082019290925260a081019190915260c00190565b60405180910390a26001606560008282546104cd9190610cf9565b90915550505050505050565b600054610100900460ff16158080156104f95750600054600160ff909116105b806105135750303b158015610513575060005460ff166001145b6105765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161025e565b6000805460ff191660011790558015610599576000805461ff0019166101001790555b6105a1610959565b600160655580156105ec576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600082815260666020526040902060048101546001600160a01b031661063f5760405162461bcd60e51b81526020600482015260056024820152642a2298181960d91b604482015260640161025e565b600181015460405163079cc67960e41b8152336004820152602481018490526001600160a01b03909116906379cc679090604401600060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b50505050600081600301548260020154846106bc9190610d11565b6106c69190610d30565b905081600501548111156107045760405162461bcd60e51b8152602060048201526005602482015264544530303360d81b604482015260640161025e565b815461071a906001600160a01b03163383610861565b80826005015461072a9190610d52565b600583015581546001830154604080516001600160a01b03938416815292909116602083015281018290526060810184905284907f0ae2f968fb2a042a36c6f0028b9b01c3642c0eaf4957e5fd8c34fb7d5f15e7c09060800160405180910390a250505050565b610799610807565b6001600160a01b0381166107fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b6105ec816108c9565b6033546001600160a01b031633146103475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b6040516001600160a01b0383166024820152604481018290526108c490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610988565b505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526109539085906323b872dd60e01b9060840161088d565b50505050565b600054610100900460ff166109805760405162461bcd60e51b815260040161025e90610d69565b610347610a5d565b60006109dd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a8d9092919063ffffffff16565b90508051600014806109fe5750808060200190518101906109fe9190610db4565b6108c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161025e565b600054610100900460ff16610a845760405162461bcd60e51b815260040161025e90610d69565b610347336108c9565b6060610a9c8484600085610aa4565b949350505050565b606082471015610b055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161025e565b600080866001600160a01b03168587604051610b219190610e02565b60006040518083038185875af1925050503d8060008114610b5e576040519150601f19603f3d011682016040523d82523d6000602084013e610b63565b606091505b5091509150610b7487838387610b7f565b979650505050505050565b60608315610bee578251600003610be7576001600160a01b0385163b610be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161025e565b5081610a9c565b610a9c8383815115610c035781518083602001fd5b8060405162461bcd60e51b815260040161025e9190610e1e565b600060208284031215610c2f57600080fd5b5035919050565b80356001600160a01b0381168114610c4d57600080fd5b919050565b600080600080600060a08688031215610c6a57600080fd5b610c7386610c36565b9450610c8160208701610c36565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215610cb257600080fd5b50508035926020909101359150565b600060208284031215610cd357600080fd5b610cdc82610c36565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610d0c57610d0c610ce3565b500190565b6000816000190483118215151615610d2b57610d2b610ce3565b500290565b600082610d4d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610d6457610d64610ce3565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215610dc657600080fd5b81518015158114610cdc57600080fd5b60005b83811015610df1578181015183820152602001610dd9565b838111156109535750506000910152565b60008251610e14818460208701610dd6565b9190910192915050565b6020815260008251806020840152610e3d816040850160208701610dd6565b601f01601f1916919091016040019291505056fea2646970667358221220a0efb8f75bac8809207335db5441f7409a672a378e4fa53e4dc43c10738e18c464736f6c634300080f0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638129fc1c116100665780638129fc1c146100e45780638da5cb5b146100ec578063a85c38ef14610107578063e20be69a14610199578063f2fde38b146101ac57600080fd5b80632a58b33014610098578063514fcac7146100b4578063715018a6146100c95780638028136a146100d1575b600080fd5b6100a160655481565b6040519081526020015b60405180910390f35b6100c76100c2366004610c1d565b6101bf565b005b6100c7610335565b6100c76100df366004610c52565b610349565b6100c76104d9565b6033546040516001600160a01b0390911681526020016100ab565b61015a610115366004610c1d565b6066602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039485169593851694929391929091169086565b604080516001600160a01b03978816815295871660208701528501939093526060840191909152909216608082015260a081019190915260c0016100ab565b6100c76101a7366004610c9f565b6105ef565b6100c76101ba366004610cc1565b610791565b6101c7610807565b600081815260666020908152604091829020825160c08101845281546001600160a01b03908116825260018301548116938201939093526002820154938101939093526003810154606084015260048101549091166080830181905260059091015460a08301526102675760405162461bcd60e51b81526020600482015260056024820152642a2298181960d91b60448201526064015b60405180910390fd5b60a08101511561029257608081015160a08201518251610292926001600160a01b0390911691610861565b805160208083015160a0840151604080516001600160a01b039586168152949092169284019290925282015282907ff763d5bc84f4f7cfd13e7c5f8b3045e94e42aece4c27e81c9b31759927a0fc2c9060600160405180910390a250600090815260666020526040812080546001600160a01b03199081168255600182018054821690556002820183905560038201839055600482018054909116905560050155565b61033d610807565b61034760006108c9565b565b610351610807565b600081116103895760405162461bcd60e51b8152602060048201526005602482015264544530303160d81b604482015260640161025e565b61039e6001600160a01b03861633308461091b565b6040805160c0810182526001600160a01b038088168252868116602080840191825283850188815260608501888152336080870181815260a088018a81526065805460009081526066909752958a9020985189549089166001600160a01b0319918216178a55965160018a018054918a16918916919091179055935160028901559151600388015590516004870180549190961694169390931790935591516005909301929092555491517f291fe7b7effb8442ef421f6392e3caf152b74849a1e3fa333704f74f0fc474b8916104b291899089908990899089906001600160a01b03968716815294861660208601529290941660408401526060830152608082019290925260a081019190915260c00190565b60405180910390a26001606560008282546104cd9190610cf9565b90915550505050505050565b600054610100900460ff16158080156104f95750600054600160ff909116105b806105135750303b158015610513575060005460ff166001145b6105765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161025e565b6000805460ff191660011790558015610599576000805461ff0019166101001790555b6105a1610959565b600160655580156105ec576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600082815260666020526040902060048101546001600160a01b031661063f5760405162461bcd60e51b81526020600482015260056024820152642a2298181960d91b604482015260640161025e565b600181015460405163079cc67960e41b8152336004820152602481018490526001600160a01b03909116906379cc679090604401600060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b50505050600081600301548260020154846106bc9190610d11565b6106c69190610d30565b905081600501548111156107045760405162461bcd60e51b8152602060048201526005602482015264544530303360d81b604482015260640161025e565b815461071a906001600160a01b03163383610861565b80826005015461072a9190610d52565b600583015581546001830154604080516001600160a01b03938416815292909116602083015281018290526060810184905284907f0ae2f968fb2a042a36c6f0028b9b01c3642c0eaf4957e5fd8c34fb7d5f15e7c09060800160405180910390a250505050565b610799610807565b6001600160a01b0381166107fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b6105ec816108c9565b6033546001600160a01b031633146103475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b6040516001600160a01b0383166024820152604481018290526108c490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610988565b505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526109539085906323b872dd60e01b9060840161088d565b50505050565b600054610100900460ff166109805760405162461bcd60e51b815260040161025e90610d69565b610347610a5d565b60006109dd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a8d9092919063ffffffff16565b90508051600014806109fe5750808060200190518101906109fe9190610db4565b6108c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161025e565b600054610100900460ff16610a845760405162461bcd60e51b815260040161025e90610d69565b610347336108c9565b6060610a9c8484600085610aa4565b949350505050565b606082471015610b055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161025e565b600080866001600160a01b03168587604051610b219190610e02565b60006040518083038185875af1925050503d8060008114610b5e576040519150601f19603f3d011682016040523d82523d6000602084013e610b63565b606091505b5091509150610b7487838387610b7f565b979650505050505050565b60608315610bee578251600003610be7576001600160a01b0385163b610be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161025e565b5081610a9c565b610a9c8383815115610c035781518083602001fd5b8060405162461bcd60e51b815260040161025e9190610e1e565b600060208284031215610c2f57600080fd5b5035919050565b80356001600160a01b0381168114610c4d57600080fd5b919050565b600080600080600060a08688031215610c6a57600080fd5b610c7386610c36565b9450610c8160208701610c36565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215610cb257600080fd5b50508035926020909101359150565b600060208284031215610cd357600080fd5b610cdc82610c36565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610d0c57610d0c610ce3565b500190565b6000816000190483118215151615610d2b57610d2b610ce3565b500290565b600082610d4d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610d6457610d64610ce3565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215610dc657600080fd5b81518015158114610cdc57600080fd5b60005b83811015610df1578181015183820152602001610dd9565b838111156109535750506000910152565b60008251610e14818460208701610dd6565b9190910192915050565b6020815260008251806020840152610e3d816040850160208701610dd6565b601f01601f1916919091016040019291505056fea2646970667358221220a0efb8f75bac8809207335db5441f7409a672a378e4fa53e4dc43c10738e18c464736f6c634300080f0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
