ABI

[
  {
    "type": "constructor",
    "inputs": [
      { "name": "uniV2Router_", "type": "address", "internalType": "address" },
      { "name": "gteRouter_", "type": "address", "internalType": "address" },
      { "name": "clobFactory_", "type": "address", "internalType": "address" }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "ABI_VERSION",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "BONDING_SUPPLY",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "TOTAL_SUPPLY",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "__unallocated_slot_0",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "__unallocated_slot_1",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "bondingCurve",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract ISimpleBondingCurve"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "buy",
    "inputs": [
      { "name": "account", "type": "address", "internalType": "address" },
      { "name": "token", "type": "address", "internalType": "address" },
      { "name": "recipient", "type": "address", "internalType": "address" },
      { "name": "amountOutBase", "type": "uint256", "internalType": "uint256" },
      {
        "name": "maxAmountInQuote",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "amountOutBaseActual",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountInQuoteActual",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelOwnershipHandover",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "completeOwnershipHandover",
    "inputs": [
      { "name": "pendingOwner", "type": "address", "internalType": "address" }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "eventNonce",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "gteRouter",
    "inputs": [],
    "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "initialize",
    "inputs": [
      { "name": "owner_", "type": "address", "internalType": "address" },
      { "name": "quoteAsset_", "type": "address", "internalType": "address" },
      { "name": "bondingCurve_", "type": "address", "internalType": "address" },
      { "name": "virtualBase_", "type": "uint256", "internalType": "uint256" },
      { "name": "virtualQuote_", "type": "uint256", "internalType": "uint256" }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "launch",
    "inputs": [
      { "name": "name", "type": "string", "internalType": "string" },
      { "name": "symbol", "type": "string", "internalType": "string" },
      { "name": "mediaURI", "type": "string", "internalType": "string" }
    ],
    "outputs": [
      { "name": "token", "type": "address", "internalType": "address" }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "launchFee",
    "inputs": [],
    "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "launches",
    "inputs": [
      { "name": "launchToken", "type": "address", "internalType": "address" }
    ],
    "outputs": [
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct SimpleLaunchpad.LaunchData",
        "components": [
          { "name": "active", "type": "bool", "internalType": "bool" },
          {
            "name": "bondingCurve",
            "type": "address",
            "internalType": "contract ISimpleBondingCurve"
          },
          { "name": "quote", "type": "address", "internalType": "address" },
          {
            "name": "__unallocated_field_0",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "__unallocated_field_1",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "baseSoldFromCurve",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "quoteBoughtByCurve",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      { "name": "result", "type": "address", "internalType": "address" }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "ownershipHandoverExpiresAt",
    "inputs": [
      { "name": "pendingOwner", "type": "address", "internalType": "address" }
    ],
    "outputs": [
      { "name": "result", "type": "uint256", "internalType": "uint256" }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "pullFees",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "quoteAsset",
    "inputs": [],
    "outputs": [
      { "name": "", "type": "address", "internalType": "contract LaunchToken" }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteBaseForQuote",
    "inputs": [
      { "name": "token", "type": "address", "internalType": "address" },
      { "name": "quoteAmount", "type": "uint256", "internalType": "uint256" },
      { "name": "isBuy", "type": "bool", "internalType": "bool" }
    ],
    "outputs": [
      { "name": "baseAmount", "type": "uint256", "internalType": "uint256" }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "quoteQuoteForBase",
    "inputs": [
      { "name": "token", "type": "address", "internalType": "address" },
      { "name": "baseAmount", "type": "uint256", "internalType": "uint256" },
      { "name": "isBuy", "type": "bool", "internalType": "bool" }
    ],
    "outputs": [
      { "name": "quoteAmount", "type": "uint256", "internalType": "uint256" }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "renounceOwnership",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "requestOwnershipHandover",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sell",
    "inputs": [
      { "name": "account", "type": "address", "internalType": "address" },
      { "name": "token", "type": "address", "internalType": "address" },
      { "name": "recipient", "type": "address", "internalType": "address" },
      { "name": "amountInBase", "type": "uint256", "internalType": "uint256" },
      {
        "name": "minAmountOutQuote",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "amountInBaseActual",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountOutQuoteActual",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setVirtualReserves",
    "inputs": [
      { "name": "virtualBase", "type": "uint256", "internalType": "uint256" },
      { "name": "virtualQuote", "type": "uint256", "internalType": "uint256" }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferOwnership",
    "inputs": [
      { "name": "newOwner", "type": "address", "internalType": "address" }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "uniV2Router",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IUniswapV2RouterMinimal"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "updateBondingCurve",
    "inputs": [
      {
        "name": "newBondingCurve",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "updateInitCodeHash",
    "inputs": [{ "name": "newHash", "type": "bytes", "internalType": "bytes" }],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "updateLaunchFee",
    "inputs": [
      { "name": "newLaunchFee", "type": "uint256", "internalType": "uint256" }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "updateQuoteAsset",
    "inputs": [
      { "name": "newQuoteAsset", "type": "address", "internalType": "address" }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "event",
    "name": "BondingCurveUpdated",
    "inputs": [
      {
        "name": "oldCurve",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newCurve",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "BondingLocked",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pairAddress",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Initialized",
    "inputs": [
      {
        "name": "version",
        "type": "uint64",
        "indexed": false,
        "internalType": "uint64"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LaunchpadDeployed",
    "inputs": [
      {
        "name": "quoteAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "router",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipHandoverCanceled",
    "inputs": [
      {
        "name": "pendingOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipHandoverRequested",
    "inputs": [
      {
        "name": "pendingOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferred",
    "inputs": [
      {
        "name": "oldOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "QuoteAssetUpdated",
    "inputs": [
      {
        "name": "oldQuoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newQuoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newQuoteTokenDecimals",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Swap",
    "inputs": [
      {
        "name": "buyer",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "baseDelta",
        "type": "int256",
        "indexed": false,
        "internalType": "int256"
      },
      {
        "name": "quoteDelta",
        "type": "int256",
        "indexed": false,
        "internalType": "int256"
      },
      {
        "name": "nextAmountSold",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "newPrice",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenLaunched",
    "inputs": [
      {
        "name": "dev",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "quoteAsset",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "bondingCurve",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "quoteScaling",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "eventNonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  { "type": "error", "name": "AlreadyInitialized", "inputs": [] },
  { "type": "error", "name": "BadLaunchFee", "inputs": [] },
  { "type": "error", "name": "BondingInactive", "inputs": [] },
  { "type": "error", "name": "DustAttackInvalid", "inputs": [] },
  { "type": "error", "name": "ETHTransferFailed", "inputs": [] },
  { "type": "error", "name": "InsufficientBaseSold", "inputs": [] },
  { "type": "error", "name": "InvalidCurve", "inputs": [] },
  { "type": "error", "name": "InvalidInitialization", "inputs": [] },
  { "type": "error", "name": "InvalidQuoteAsset", "inputs": [] },
  { "type": "error", "name": "InvalidQuoteScaling", "inputs": [] },
  { "type": "error", "name": "InvalidRecipient", "inputs": [] },
  { "type": "error", "name": "MissingCredits", "inputs": [] },
  { "type": "error", "name": "NewOwnerIsZeroAddress", "inputs": [] },
  { "type": "error", "name": "NoHandoverRequest", "inputs": [] },
  { "type": "error", "name": "NotInitializing", "inputs": [] },
  { "type": "error", "name": "OperatorDoesNotHaveRole", "inputs": [] },
  { "type": "error", "name": "Reentrancy", "inputs": [] },
  { "type": "error", "name": "SlippageToleranceExceeded", "inputs": [] },
  { "type": "error", "name": "Unauthorized", "inputs": [] },
  { "type": "error", "name": "UninitializedCurve", "inputs": [] },
  { "type": "error", "name": "UninitializedQuote", "inputs": [] }
]