{
  "_format": "hh-sol-artifact-1",
  "contractName": "GPv2TradeSimulator",
  "sourceName": "src/contracts/reader/GPv2TradeSimulator.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "sellToken",
              "type": "address"
            },
            {
              "internalType": "contract IERC20",
              "name": "buyToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "sellAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "buyAmount",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "sellTokenBalance",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "buyTokenBalance",
              "type": "bytes32"
            }
          ],
          "internalType": "struct GPv2TradeSimulator.Trade",
          "name": "trade",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct GPv2Interaction.Data[][3]",
          "name": "interactions",
          "type": "tuple[][3]"
        }
      ],
      "name": "simulateTrade",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "gasUsed",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "executedBuyAmount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "int256",
                  "name": "sellTokenDelta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "buyTokenDelta",
                  "type": "int256"
                }
              ],
              "internalType": "struct GPv2TradeSimulator.BalanceDelta",
              "name": "contractBalance",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "int256",
                  "name": "sellTokenDelta",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "buyTokenDelta",
                  "type": "int256"
                }
              ],
              "internalType": "struct GPv2TradeSimulator.BalanceDelta",
              "name": "ownerBalance",
              "type": "tuple"
            }
          ],
          "internalType": "struct GPv2TradeSimulator.Result",
          "name": "result",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506111fc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063924fcc3a14610030575b600080fd5b61004361003e366004610e76565b610059565b6040516100509190611053565b60405180910390f35b610061610d22565b600061006c8461024f565b90503061008b8460005b6020028101906100869190611095565b6104ad565b8073ffffffffffffffffffffffffffffffffffffffff16639b552cc26040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d157600080fd5b505afa1580156100e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101099190610e5a565b73ffffffffffffffffffffffffffffffffffffffff16637d10d11f83602001516040518263ffffffff1660e01b81526004016101459190610f19565b600060405180830381600087803b15801561015f57600080fd5b505af1158015610173573d6000803e3d6000fd5b505050506101878460016003811061007657fe5b610190826104eb565b61023282604001518273ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610e5a565b73ffffffffffffffffffffffffffffffffffffffff1690610538565b61023d846002610076565b610247828461081f565b505092915050565b610257610d55565b5a815260008061026d6040850160208601610e37565b73ffffffffffffffffffffffffffffffffffffffff161461029d576102986040840160208501610e37565b6102aa565b6102aa6020840184610e37565b604080516001808252818301909252919250816020015b6102c9610d8a565b8152602001906001900390816102c15750506020830181905280516000919082906102f057fe5b6020026020010151905083600001602081019061030d9190610e37565b73ffffffffffffffffffffffffffffffffffffffff1681526103356060850160408601610e37565b73ffffffffffffffffffffffffffffffffffffffff1660208201526080840135604082015260c084013560609091015260016040519080825280602002602001820160405280156103a057816020015b61038d610d8a565b8152602001906001900390816103855790505b506040830181905280516000919082906103b657fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff8316815290506103ec6080850160608601610e37565b73ffffffffffffffffffffffffffffffffffffffff16602082015260a084013560408083019190915260e085013560609283015283820151805190926104409261043a918801908801610e37565b30610874565b60208101516104599061043a6080870160608801610e37565b5060808201518051610487906104756060870160408801610e37565b6104826020880188610e37565b610874565b60208101516104a6906104a06080870160608801610e37565b84610874565b5050919050565b60005b818110156104e6576104de8383838181106104c757fe5b90506020028101906104d99190611164565b61092e565b6001016104b0565b505050565b600081604001516000815181106104fe57fe5b602002602001015190506000816040015114156105345761052e610529836060015160200151610985565b610a52565b60408201525b5050565b6000815167ffffffffffffffff8111801561055257600080fd5b5060405190808252806020026020018201604052801561058c57816020015b610579610db1565b8152602001906001900390816105715790505b5090506000805b83518110156107835760008482815181106105aa57fe5b6020026020010151905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff1614156106b7577f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce81606001511415610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e9061101c565b60405180910390fd5b8051604080830151905173ffffffffffffffffffffffffffffffffffffffff9092169181156108fc0291906000818181858888f193505050501580156106b1573d6000803e3d6000fd5b5061077a565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981606001511415610716578051604082015160208301516107119273ffffffffffffffffffffffffffffffffffffffff90911691610ac7565b61077a565b600084848060010195508151811061072a57fe5b602090810291909101810151600081528382015173ffffffffffffffffffffffffffffffffffffffff90811692820192909252604080850151908201523060608201528351909116608090910152505b50600101610593565b508015610819576107948282610b9f565b6040517f0e8e3e8400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630e8e3e84906107e6908590600401610f96565b600060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b505050505b50505050565b816040015160008151811061083057fe5b60200260200101516040015181602001818152505061085782606001518260400151610ba3565b61086982608001518260600151610ba3565b5a9151919091039052565b73ffffffffffffffffffffffffffffffffffffffff80831680855290821660208501526040517f70a082310000000000000000000000000000000000000000000000000000000081526370a08231906108d1908490600401610ef8565b60206040518083038186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109219190610ed1565b6040909301929092525050565b73ffffffffffffffffffffffffffffffffffffffff813516602082013536600061095b6040860186611101565b9150915060405181838237600080838387895af161097d573d6000803e3d6000fd5b505050505050565b805160208201516040517f70a08231000000000000000000000000000000000000000000000000000000008152600092839273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916109e291600401610ef8565b60206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610ed1565b9050610a418360400151610bc7565b610a4a82610bc7565b039392505050565b600080821215610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53616665436173743a206e6f7420706f73697469766500000000000000000000604482015290519081900360640190fd5b5090565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b2a573d6000803e3d6000fd5b50610b3484610c58565b61081957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015290519081900360640190fd5b9052565b8151610bae90610985565b81526020820151610bbe90610985565b60209091015250565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53616665436173743a20696e74323536206f766572666c6f7700000000000000604482015290519081900360640190fd5b6000610c96565b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452806024528160445260646000fd5b3d8015610cd55760208114610d0f57610cd07f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610c5f565b610d1c565b823b610d0657610d067f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610c5f565b60019150610d1c565b3d6000803e600051151591505b50919050565b60405180608001604052806000815260200160008152602001610d43610de1565b8152602001610d50610de1565b905290565b6040518060a00160405280600081526020016060815260200160608152602001610d7d610dfb565b8152602001610d50610dfb565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b604051806040016040528060008152602001600081525090565b6040518060400160405280610e0e610e17565b8152602001610d505b604080516060810182526000808252602082018190529181019190915290565b600060208284031215610e48578081fd5b8135610e53816111a1565b9392505050565b600060208284031215610e6b578081fd5b8151610e53816111a1565b600080828403610120811215610e8a578182fd5b61010080821215610e99578283fd5b849350830135905067ffffffffffffffff811115610eb5578182fd5b830160608101851015610ec6578182fd5b809150509250929050565b600060208284031215610ee2578081fd5b5051919050565b80518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602080825282518282018190526000919060409081850190868401855b82811015610f89578151805173ffffffffffffffffffffffffffffffffffffffff908116865287820151168786015285810151868601526060908101519085015260809093019290850190600101610f36565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610f89578151805160048110610fc957fe5b85528087015173ffffffffffffffffffffffffffffffffffffffff908116888701528682015187870152606080830151821690870152608091820151169085015260a09093019290850190600101610fb3565b6020808252601e908201527f475076323a20756e737570706f7274656420696e7465726e616c204554480000604082015260600190565b600060c0820190508251825260208301516020830152604083015161107b6040840182610ee9565b50606083015161108e6080840182610ee9565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126110c9578283fd5b83018035915067ffffffffffffffff8211156110e3578283fd5b60209081019250810236038213156110fa57600080fd5b9250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611135578283fd5b83018035915067ffffffffffffffff82111561114f578283fd5b6020019150368190038213156110fa57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112611197578182fd5b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146111c357600080fd5b5056fea26469706673582212202c450649f9d23d94c44a45fb2ee7ca4c5aff4a6d6d11248358d6bca7b37a50f864736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063924fcc3a14610030575b600080fd5b61004361003e366004610e76565b610059565b6040516100509190611053565b60405180910390f35b610061610d22565b600061006c8461024f565b90503061008b8460005b6020028101906100869190611095565b6104ad565b8073ffffffffffffffffffffffffffffffffffffffff16639b552cc26040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d157600080fd5b505afa1580156100e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101099190610e5a565b73ffffffffffffffffffffffffffffffffffffffff16637d10d11f83602001516040518263ffffffff1660e01b81526004016101459190610f19565b600060405180830381600087803b15801561015f57600080fd5b505af1158015610173573d6000803e3d6000fd5b505050506101878460016003811061007657fe5b610190826104eb565b61023282604001518273ffffffffffffffffffffffffffffffffffffffff1663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610e5a565b73ffffffffffffffffffffffffffffffffffffffff1690610538565b61023d846002610076565b610247828461081f565b505092915050565b610257610d55565b5a815260008061026d6040850160208601610e37565b73ffffffffffffffffffffffffffffffffffffffff161461029d576102986040840160208501610e37565b6102aa565b6102aa6020840184610e37565b604080516001808252818301909252919250816020015b6102c9610d8a565b8152602001906001900390816102c15750506020830181905280516000919082906102f057fe5b6020026020010151905083600001602081019061030d9190610e37565b73ffffffffffffffffffffffffffffffffffffffff1681526103356060850160408601610e37565b73ffffffffffffffffffffffffffffffffffffffff1660208201526080840135604082015260c084013560609091015260016040519080825280602002602001820160405280156103a057816020015b61038d610d8a565b8152602001906001900390816103855790505b506040830181905280516000919082906103b657fe5b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff8316815290506103ec6080850160608601610e37565b73ffffffffffffffffffffffffffffffffffffffff16602082015260a084013560408083019190915260e085013560609283015283820151805190926104409261043a918801908801610e37565b30610874565b60208101516104599061043a6080870160608801610e37565b5060808201518051610487906104756060870160408801610e37565b6104826020880188610e37565b610874565b60208101516104a6906104a06080870160608801610e37565b84610874565b5050919050565b60005b818110156104e6576104de8383838181106104c757fe5b90506020028101906104d99190611164565b61092e565b6001016104b0565b505050565b600081604001516000815181106104fe57fe5b602002602001015190506000816040015114156105345761052e610529836060015160200151610985565b610a52565b60408201525b5050565b6000815167ffffffffffffffff8111801561055257600080fd5b5060405190808252806020026020018201604052801561058c57816020015b610579610db1565b8152602001906001900390816105715790505b5090506000805b83518110156107835760008482815181106105aa57fe5b6020026020010151905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff1614156106b7577f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce81606001511415610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e9061101c565b60405180910390fd5b8051604080830151905173ffffffffffffffffffffffffffffffffffffffff9092169181156108fc0291906000818181858888f193505050501580156106b1573d6000803e3d6000fd5b5061077a565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981606001511415610716578051604082015160208301516107119273ffffffffffffffffffffffffffffffffffffffff90911691610ac7565b61077a565b600084848060010195508151811061072a57fe5b602090810291909101810151600081528382015173ffffffffffffffffffffffffffffffffffffffff90811692820192909252604080850151908201523060608201528351909116608090910152505b50600101610593565b508015610819576107948282610b9f565b6040517f0e8e3e8400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630e8e3e84906107e6908590600401610f96565b600060405180830381600087803b15801561080057600080fd5b505af1158015610814573d6000803e3d6000fd5b505050505b50505050565b816040015160008151811061083057fe5b60200260200101516040015181602001818152505061085782606001518260400151610ba3565b61086982608001518260600151610ba3565b5a9151919091039052565b73ffffffffffffffffffffffffffffffffffffffff80831680855290821660208501526040517f70a082310000000000000000000000000000000000000000000000000000000081526370a08231906108d1908490600401610ef8565b60206040518083038186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109219190610ed1565b6040909301929092525050565b73ffffffffffffffffffffffffffffffffffffffff813516602082013536600061095b6040860186611101565b9150915060405181838237600080838387895af161097d573d6000803e3d6000fd5b505050505050565b805160208201516040517f70a08231000000000000000000000000000000000000000000000000000000008152600092839273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916109e291600401610ef8565b60206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610ed1565b9050610a418360400151610bc7565b610a4a82610bc7565b039392505050565b600080821215610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53616665436173743a206e6f7420706f73697469766500000000000000000000604482015290519081900360640190fd5b5090565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b2a573d6000803e3d6000fd5b50610b3484610c58565b61081957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015290519081900360640190fd5b9052565b8151610bae90610985565b81526020820151610bbe90610985565b60209091015250565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115610ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53616665436173743a20696e74323536206f766572666c6f7700000000000000604482015290519081900360640190fd5b6000610c96565b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452806024528160445260646000fd5b3d8015610cd55760208114610d0f57610cd07f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610c5f565b610d1c565b823b610d0657610d067f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610c5f565b60019150610d1c565b3d6000803e600051151591505b50919050565b60405180608001604052806000815260200160008152602001610d43610de1565b8152602001610d50610de1565b905290565b6040518060a00160405280600081526020016060815260200160608152602001610d7d610dfb565b8152602001610d50610dfb565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b604051806040016040528060008152602001600081525090565b6040518060400160405280610e0e610e17565b8152602001610d505b604080516060810182526000808252602082018190529181019190915290565b600060208284031215610e48578081fd5b8135610e53816111a1565b9392505050565b600060208284031215610e6b578081fd5b8151610e53816111a1565b600080828403610120811215610e8a578182fd5b61010080821215610e99578283fd5b849350830135905067ffffffffffffffff811115610eb5578182fd5b830160608101851015610ec6578182fd5b809150509250929050565b600060208284031215610ee2578081fd5b5051919050565b80518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602080825282518282018190526000919060409081850190868401855b82811015610f89578151805173ffffffffffffffffffffffffffffffffffffffff908116865287820151168786015285810151868601526060908101519085015260809093019290850190600101610f36565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610f89578151805160048110610fc957fe5b85528087015173ffffffffffffffffffffffffffffffffffffffff908116888701528682015187870152606080830151821690870152608091820151169085015260a09093019290850190600101610fb3565b6020808252601e908201527f475076323a20756e737570706f7274656420696e7465726e616c204554480000604082015260600190565b600060c0820190508251825260208301516020830152604083015161107b6040840182610ee9565b50606083015161108e6080840182610ee9565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126110c9578283fd5b83018035915067ffffffffffffffff8211156110e3578283fd5b60209081019250810236038213156110fa57600080fd5b9250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611135578283fd5b83018035915067ffffffffffffffff82111561114f578283fd5b6020019150368190038213156110fa57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112611197578182fd5b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146111c357600080fd5b5056fea26469706673582212202c450649f9d23d94c44a45fb2ee7ca4c5aff4a6d6d11248358d6bca7b37a50f864736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
