[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "factory_",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "factory",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IBigShortFactoryQuoteSource"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteBuyExactNative",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "grossBudget",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "tokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "curveNetNative",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "protocolFee",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalUsed",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteBuyExactTokens",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "requestedTokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "tokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "curveNetNative",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "protocolFee",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalCost",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteExecutableShortCapacity",
    "inputs": [
      {
        "name": "tokenAddress",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "capacity",
        "type": "tuple",
        "internalType": "struct BigShortQuoterV1.ExecutableShortCapacity",
        "components": [
          {
            "name": "riskCapacityNative",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "lendingCapacityNative",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "executableSoldNative",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "executableNotionalNative",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "availableLendingTokens",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteRiskCapacityPreview",
    "inputs": [
      {
        "name": "tokenAddress",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "riskPreview",
        "type": "tuple",
        "internalType": "struct BigShortQuoterV1.RiskCapacityPreview",
        "components": [
          {
            "name": "confirmed",
            "type": "tuple",
            "internalType": "struct BigShortRiskCapacityStateV1",
            "components": [
              {
                "name": "pair",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "tokenIsToken0",
                "type": "bool",
                "internalType": "bool"
              },
              {
                "name": "initialized",
                "type": "bool",
                "internalType": "bool"
              },
              {
                "name": "observationTimestamp",
                "type": "uint32",
                "internalType": "uint32"
              },
              {
                "name": "observationCumulative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "lastTwapPriceX112",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "lastTwapMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "twapCeilingMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "twapCeilingMaxShortNative",
                "type": "uint256",
                "internalType": "uint256"
              }
            ]
          },
          {
            "name": "preview",
            "type": "tuple",
            "internalType": "struct BigShortRiskCapacityPreviewV1",
            "components": [
              {
                "name": "currentTimestamp",
                "type": "uint32",
                "internalType": "uint32"
              },
              {
                "name": "currentCumulative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "elapsed",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "twapPriceX112",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "twapMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "confirmedTwapCeilingMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "previewTwapCeilingMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "confirmedTwapCeilingMaxShortNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "previewTwapCeilingMaxShortNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "spotPriceX112",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "liveMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "confirmedEffectiveMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "confirmedEffectiveMaxShortNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "previewEffectiveMarketCapNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "previewEffectiveMaxShortNative",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "wouldIncrease",
                "type": "bool",
                "internalType": "bool"
              },
              {
                "name": "minimumWindowSeconds",
                "type": "uint32",
                "internalType": "uint32"
              },
              {
                "name": "secondsRemaining",
                "type": "uint32",
                "internalType": "uint32"
              },
              {
                "name": "windowReady",
                "type": "bool",
                "internalType": "bool"
              }
            ]
          },
          {
            "name": "previewRemainingShortNative",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteSell",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "grossNative",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "protocolFee",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "netNative",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "error",
    "name": "InsufficientCurveLiquidity",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidAmount",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidEngineConfiguration",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidPhase",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidReserve",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LendingVaultInsolvent",
    "inputs": []
  }
]
