{
  "_format": "hh-sol-artifact-1",
  "contractName": "PerpV2Mock",
  "sourceName": "contracts/mocks/protocol/integration/lib/PerpV2Mock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "initializeModuleOnSet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "testGetDepositCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IClearingHouse",
          "name": "_clearingHouse",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            }
          ],
          "internalType": "struct IClearingHouse.OpenPositionParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "testGetOpenPositionCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IQuoter",
          "name": "_quoter",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct IQuoter.SwapParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "testGetSwapCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "testGetWithdrawCalldata",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "testInvokeDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IClearingHouse",
          "name": "_clearingHouse",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            }
          ],
          "internalType": "struct IClearingHouse.OpenPositionParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "testInvokeOpenPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "deltaBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deltaQuote",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IQuoter",
          "name": "_quoter",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct IQuoter.SwapParams",
          "name": "_params",
          "type": "tuple"
        }
      ],
      "name": "testInvokeSwap",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "deltaAvailableBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deltaAvailableQuote",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "exchangedPositionSize",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exchangedPositionNotional",
              "type": "int256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceX96",
              "type": "uint160"
            }
          ],
          "internalType": "struct IQuoter.SwapResponse",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IVault",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountNotional",
          "type": "uint256"
        }
      ],
      "name": "testInvokeWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610c3d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80635f35af31116100665780635f35af31146100fe578063634328551461011157806366efcda314610124578063d554a20614610144578063d6409d941461016557610093565b8063058237761461009857806313c47e66146100c35780633cc991e1146100d8578063598a8d24146100eb575b600080fd5b6100ab6100a63660046108c8565b610178565b6040516100ba93929190610a1d565b60405180910390f35b6100d66100d1366004610878565b61021b565b005b6100d66100e6366004610878565b61028f565b6100ab6100f93660046108c8565b6102cc565b6100ab61010c366004610774565b61030c565b6100ab61011f3660046107aa565b6103ab565b61013761013236600461083a565b6103e9565b6040516100ba9190610b42565b6101576101523660046107f2565b610486565b6040516100ba929190610b80565b6100d66101733660046107d6565b61051f565b600080606073__$417d3a69c503e50f80ca354fced566350c$__630293a1288787876040518463ffffffff1660e01b81526004016101b893929190610b1e565b60006040518083038186803b1580156101d057600080fd5b505af41580156101e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261020c91908101906106c9565b92509250925093509350939050565b604051632ab3e8ef60e11b815273__$417d3a69c503e50f80ca354fced566350c$__90635567d1de90610258908790879087908790600401610af4565b60006040518083038186803b15801561027057600080fd5b505af4158015610284573d6000803e3d6000fd5b505050505b50505050565b6040516305e190a960e21b815273__$417d3a69c503e50f80ca354fced566350c$__9063178642a490610258908790879087908790600401610af4565b600080606073__$417d3a69c503e50f80ca354fced566350c$__6384e88afe8787876040518463ffffffff1660e01b81526004016101b893929190610b1e565b600080606073__$417d3a69c503e50f80ca354fced566350c$__633f3876eb86866040518363ffffffff1660e01b815260040161034a929190610a66565b60006040518083038186803b15801561036257600080fd5b505af4158015610376573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039e91908101906106c9565b9250925092509250925092565b600080606073__$417d3a69c503e50f80ca354fced566350c$__632130ef5e86866040518363ffffffff1660e01b815260040161034a929190610a84565b6103f1610575565b604051634496ad3760e11b815273__$417d3a69c503e50f80ca354fced566350c$__9063892d5a6e9061042c90879087908790600401610acf565b60a06040518083038186803b15801561044457600080fd5b505af4158015610458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047c9190610908565b90505b9392505050565b60008073__$417d3a69c503e50f80ca354fced566350c$__63d3a5c2858686866040518463ffffffff1660e01b81526004016104c493929190610aa1565b604080518083038186803b1580156104db57600080fd5b505af41580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610513919061095f565b91509150935093915050565b806001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561055a57600080fd5b505af115801561056e573d6000803e3d6000fd5b5050505050565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b803580151581146105bd57600080fd5b92915050565b60006101008083850312156105d6578182fd5b6105df81610b8e565b91505081356105ed81610be1565b81526105fc83602084016105ad565b602082015261060e83604084016105ad565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013561063f81610be1565b8060c08301525060e082013560e082015292915050565b600060a08284031215610667578081fd5b61067160a0610b8e565b9050813561067e81610be1565b8152602082013561068e81610bf9565b602082015260408201356106a181610bf9565b60408201526060828101359082015260808201356106be81610be1565b608082015292915050565b6000806000606084860312156106dd578283fd5b83516106e881610be1565b60208501516040860151919450925067ffffffffffffffff8082111561070c578283fd5b81860187601f82011261071d578384fd5b805192508183111561072d578384fd5b610740601f8401601f1916602001610b8e565b9150828252876020848301011115610756578384fd5b610767836020840160208401610bb5565b5080925050509250925092565b6000806101208385031215610787578182fd5b823561079281610be1565b91506107a184602085016105c3565b90509250929050565b60008060c083850312156107bc578182fd5b82356107c781610be1565b91506107a18460208501610656565b6000602082840312156107e7578081fd5b813561047f81610be1565b60008060006101408486031215610807578283fd5b833561081281610be1565b9250602084013561082281610be1565b915061083185604086016105c3565b90509250925092565b600080600060e0848603121561084e578081fd5b833561085981610be1565b9250602084013561086981610be1565b91506108318560408601610656565b6000806000806080858703121561088d578182fd5b843561089881610be1565b935060208501356108a881610be1565b925060408501356108b881610be1565b9396929550929360600135925050565b6000806000606084860312156108dc578081fd5b83356108e781610be1565b925060208401356108f781610be1565b929592945050506040919091013590565b600060a08284031215610919578081fd5b61092360a0610b8e565b82518152602083015160208201526040830151604082015260608301516060820152608083015161095381610be1565b60808201529392505050565b60008060408385031215610971578182fd5b505080516020909101519092909150565b60018060a01b03808251168352602082015115156020840152604082015115156040840152606082015160608401526080820151608084015260a082015160a08401528060c08301511660c08401525060e081015160e08301525050565b80516001600160a01b0390811683526020808301511515908401526040808301511515908401526060808301519084015260809182015116910152565b600060018060a01b0385168252836020830152606060408301528251806060840152610a50816080850160208701610bb5565b601f01601f191691909101608001949350505050565b6001600160a01b0383168152610120810161047f6020830184610982565b6001600160a01b038316815260c0810161047f60208301846109e0565b6001600160a01b038481168252831660208201526101408101610ac76040830184610982565b949350505050565b6001600160a01b0384811682528316602082015260e08101610ac760408301846109e0565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610bad57600080fd5b604052919050565b60005b83811015610bd0578181015183820152602001610bb8565b838111156102895750506000910152565b6001600160a01b0381168114610bf657600080fd5b50565b8015158114610bf657600080fdfea2646970667358221220c0fda4f416befd59540315335cfd57a799a0d40e6e544229b62e419e82254e3764736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80635f35af31116100665780635f35af31146100fe578063634328551461011157806366efcda314610124578063d554a20614610144578063d6409d941461016557610093565b8063058237761461009857806313c47e66146100c35780633cc991e1146100d8578063598a8d24146100eb575b600080fd5b6100ab6100a63660046108c8565b610178565b6040516100ba93929190610a1d565b60405180910390f35b6100d66100d1366004610878565b61021b565b005b6100d66100e6366004610878565b61028f565b6100ab6100f93660046108c8565b6102cc565b6100ab61010c366004610774565b61030c565b6100ab61011f3660046107aa565b6103ab565b61013761013236600461083a565b6103e9565b6040516100ba9190610b42565b6101576101523660046107f2565b610486565b6040516100ba929190610b80565b6100d66101733660046107d6565b61051f565b600080606073__$417d3a69c503e50f80ca354fced566350c$__630293a1288787876040518463ffffffff1660e01b81526004016101b893929190610b1e565b60006040518083038186803b1580156101d057600080fd5b505af41580156101e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261020c91908101906106c9565b92509250925093509350939050565b604051632ab3e8ef60e11b815273__$417d3a69c503e50f80ca354fced566350c$__90635567d1de90610258908790879087908790600401610af4565b60006040518083038186803b15801561027057600080fd5b505af4158015610284573d6000803e3d6000fd5b505050505b50505050565b6040516305e190a960e21b815273__$417d3a69c503e50f80ca354fced566350c$__9063178642a490610258908790879087908790600401610af4565b600080606073__$417d3a69c503e50f80ca354fced566350c$__6384e88afe8787876040518463ffffffff1660e01b81526004016101b893929190610b1e565b600080606073__$417d3a69c503e50f80ca354fced566350c$__633f3876eb86866040518363ffffffff1660e01b815260040161034a929190610a66565b60006040518083038186803b15801561036257600080fd5b505af4158015610376573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039e91908101906106c9565b9250925092509250925092565b600080606073__$417d3a69c503e50f80ca354fced566350c$__632130ef5e86866040518363ffffffff1660e01b815260040161034a929190610a84565b6103f1610575565b604051634496ad3760e11b815273__$417d3a69c503e50f80ca354fced566350c$__9063892d5a6e9061042c90879087908790600401610acf565b60a06040518083038186803b15801561044457600080fd5b505af4158015610458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047c9190610908565b90505b9392505050565b60008073__$417d3a69c503e50f80ca354fced566350c$__63d3a5c2858686866040518463ffffffff1660e01b81526004016104c493929190610aa1565b604080518083038186803b1580156104db57600080fd5b505af41580156104ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610513919061095f565b91509150935093915050565b806001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561055a57600080fd5b505af115801561056e573d6000803e3d6000fd5b5050505050565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b803580151581146105bd57600080fd5b92915050565b60006101008083850312156105d6578182fd5b6105df81610b8e565b91505081356105ed81610be1565b81526105fc83602084016105ad565b602082015261060e83604084016105ad565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013561063f81610be1565b8060c08301525060e082013560e082015292915050565b600060a08284031215610667578081fd5b61067160a0610b8e565b9050813561067e81610be1565b8152602082013561068e81610bf9565b602082015260408201356106a181610bf9565b60408201526060828101359082015260808201356106be81610be1565b608082015292915050565b6000806000606084860312156106dd578283fd5b83516106e881610be1565b60208501516040860151919450925067ffffffffffffffff8082111561070c578283fd5b81860187601f82011261071d578384fd5b805192508183111561072d578384fd5b610740601f8401601f1916602001610b8e565b9150828252876020848301011115610756578384fd5b610767836020840160208401610bb5565b5080925050509250925092565b6000806101208385031215610787578182fd5b823561079281610be1565b91506107a184602085016105c3565b90509250929050565b60008060c083850312156107bc578182fd5b82356107c781610be1565b91506107a18460208501610656565b6000602082840312156107e7578081fd5b813561047f81610be1565b60008060006101408486031215610807578283fd5b833561081281610be1565b9250602084013561082281610be1565b915061083185604086016105c3565b90509250925092565b600080600060e0848603121561084e578081fd5b833561085981610be1565b9250602084013561086981610be1565b91506108318560408601610656565b6000806000806080858703121561088d578182fd5b843561089881610be1565b935060208501356108a881610be1565b925060408501356108b881610be1565b9396929550929360600135925050565b6000806000606084860312156108dc578081fd5b83356108e781610be1565b925060208401356108f781610be1565b929592945050506040919091013590565b600060a08284031215610919578081fd5b61092360a0610b8e565b82518152602083015160208201526040830151604082015260608301516060820152608083015161095381610be1565b60808201529392505050565b60008060408385031215610971578182fd5b505080516020909101519092909150565b60018060a01b03808251168352602082015115156020840152604082015115156040840152606082015160608401526080820151608084015260a082015160a08401528060c08301511660c08401525060e081015160e08301525050565b80516001600160a01b0390811683526020808301511515908401526040808301511515908401526060808301519084015260809182015116910152565b600060018060a01b0385168252836020830152606060408301528251806060840152610a50816080850160208701610bb5565b601f01601f191691909101608001949350505050565b6001600160a01b0383168152610120810161047f6020830184610982565b6001600160a01b038316815260c0810161047f60208301846109e0565b6001600160a01b038481168252831660208201526101408101610ac76040830184610982565b949350505050565b6001600160a01b0384811682528316602082015260e08101610ac760408301846109e0565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715610bad57600080fd5b604052919050565b60005b83811015610bd0578181015183820152602001610bb8565b838111156102895750506000910152565b6001600160a01b0381168114610bf657600080fd5b50565b8015158114610bf657600080fdfea2646970667358221220c0fda4f416befd59540315335cfd57a799a0d40e6e544229b62e419e82254e3764736f6c634300060a0033",
  "linkReferences": {
    "contracts/protocol/integration/lib/PerpV2.sol": {
      "PerpV2": [
        {
          "length": 20,
          "start": 415
        },
        {
          "length": 20,
          "start": 586
        },
        {
          "length": 20,
          "start": 702
        },
        {
          "length": 20,
          "start": 755
        },
        {
          "length": 20,
          "start": 819
        },
        {
          "length": 20,
          "start": 978
        },
        {
          "length": 20,
          "start": 1056
        },
        {
          "length": 20,
          "start": 1195
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/protocol/integration/lib/PerpV2.sol": {
      "PerpV2": [
        {
          "length": 20,
          "start": 383
        },
        {
          "length": 20,
          "start": 554
        },
        {
          "length": 20,
          "start": 670
        },
        {
          "length": 20,
          "start": 723
        },
        {
          "length": 20,
          "start": 787
        },
        {
          "length": 20,
          "start": 946
        },
        {
          "length": 20,
          "start": 1024
        },
        {
          "length": 20,
          "start": 1163
        }
      ]
    }
  }
}
