[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "minimumWindowSeconds_",
        "type": "uint32",
        "internalType": "uint32"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "checkpoint",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "previewState",
        "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"
          }
        ]
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "confirmedRisk",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "liveMarketCap",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "capacityMarketCap",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "extremePriceDropBps",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "marginRatioBps",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "theoreticalNativeReserve",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "globalMaxShortNative",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "initialize",
    "inputs": [
      {
        "name": "pairAddress",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "state",
        "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"
          }
        ]
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "preview",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "previewState",
        "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"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "previewCurveAtMarketCap",
    "inputs": [
      {
        "name": "marketCap",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "effectiveMarketCap",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "capacityMarketCap",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "extremePriceDropBps",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "marginRatioBps",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "theoreticalNativeReserve",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "globalMaxShortNative",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "stateOf",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "state",
        "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"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "twapMinimumWindowSeconds",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint32",
        "internalType": "uint32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "RiskCapacityCheckpointed",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "observationTimestampAfter",
        "type": "uint32",
        "indexed": false,
        "internalType": "uint32"
      },
      {
        "name": "observationCumulativeAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "elapsed",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapPriceX112",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapMarketCapNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "spotPriceX112",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "liveMarketCap",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapCeilingMarketCapBefore",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapCeilingMaxShortBefore",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapCeilingMarketCapAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapCeilingMaxShortAfter",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "effectiveCapacityMarketCapNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "effectiveMaxShortNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "theoreticalNativeReserve",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "extremePriceDropBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "totalOpenShortNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "remainingShortNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "marginRatioBps",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "twapCeilingIncreased",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      },
      {
        "name": "spotLimited",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RiskOracleInitialized",
    "inputs": [
      {
        "name": "engine",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "tokenIsToken0",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      },
      {
        "name": "observationTimestamp",
        "type": "uint32",
        "indexed": false,
        "internalType": "uint32"
      },
      {
        "name": "observationCumulative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "minimumWindowSeconds",
        "type": "uint32",
        "indexed": false,
        "internalType": "uint32"
      },
      {
        "name": "twapCeilingMarketCapNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "twapCeilingMaxShortNative",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "AlreadyInitialized",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidPair",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidWindow",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotInitialized",
    "inputs": []
  }
]
