auctionflow-sdk 2.1.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/constants/protocol.ts","../src/builders/auction-builder.ts","../src/constants/addresses.ts","../src/abis/token-auction.ts","../src/utils/bonding-curve.ts","../src/utils/chains.ts","../src/types/index.ts"],"sourcesContent":["import {\n createPublicClient,\n http,\n PublicClient,\n WalletClient,\n Chain,\n Address,\n Hash,\n zeroAddress,\n ContractFunctionArgs,\n WriteContractParameters,\n} from \"viem\";\nimport { AuctionBuilder } from \"./builders/auction-builder\";\nimport { AuctionConfig, AuctionData, BuyQuote, MigrationInfo, SellQuote, SupportedChainId } from \"./types\";\nimport { AUCTION_ADDRESSES } from \"./constants/addresses\";\nimport { DEFAULT_LIQUIDITY_BPS } from \"./constants/protocol\";\nimport { tokenAuctionAbi } from \"./abis/token-auction\";\nimport {\n applySellSlippage,\n applySlippage,\n calculateSellProceeds,\n DEFAULT_SLIPPAGE_BPS,\n fillPurchase,\n spotPrice,\n} from \"./utils/bonding-curve\";\nimport { CHAINS } from \"./utils/chains\";\n\n/** Shape of the nested tuple returned by the on-chain `auctions(id)` getter. */\ninterface RawAuction {\n config: {\n token: Address;\n paymentToken: Address;\n basePrice: bigint;\n slope: bigint;\n maxRaise: bigint;\n creator: Address;\n protocolFeeBps: bigint;\n liquidityBps: bigint;\n lpFeeShareBps: bigint;\n };\n state: number;\n totalRaised: bigint;\n totalSold: bigint;\n}\n\nexport class AuctionFlowSDK {\n public readonly publicClient: PublicClient;\n public readonly walletClient?: WalletClient;\n public readonly auctionAddress: Address;\n public readonly chainId: SupportedChainId;\n private readonly chain: Chain;\n\n constructor(params: {\n chainId: SupportedChainId;\n rpcUrl: string;\n walletClient?: WalletClient;\n auctionAddress?: Address;\n }) {\n this.chainId = params.chainId;\n this.chain = CHAINS[params.chainId];\n this.auctionAddress = params.auctionAddress ?? AUCTION_ADDRESSES[params.chainId];\n\n if (params.auctionAddress === zeroAddress) {\n throw new Error(\n \"auctionAddress must not be the zero address.\"\n );\n }\n\n if (this.auctionAddress === zeroAddress) {\n throw new Error(\n `AuctionFlow has no canonical deployment on chain ${params.chainId}. ` +\n `Chains with a built-in deployment: ${Object.entries(AUCTION_ADDRESSES)\n .filter(([, addr]) => addr !== zeroAddress)\n .map(([id]) => id)\n .join(\", \")}. ` +\n `Pass \\`auctionAddress\\` to use your own deployment.`\n );\n }\n\n this.publicClient = createPublicClient({\n chain: this.chain,\n transport: http(params.rpcUrl),\n });\n\n this.walletClient = params.walletClient;\n }\n\n // Builder\n buildAuction(): AuctionBuilder {\n return new AuctionBuilder();\n }\n\n async createAuction(config: AuctionConfig): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"createAuction\",\n args: [\n {\n name: config.name,\n symbol: config.symbol,\n metadataURI: config.metadataURI ?? \"\",\n maxSupply: config.maxSupply,\n paymentToken: config.paymentToken,\n basePrice: config.basePrice,\n slope: config.slope,\n maxRaise: config.maxRaise,\n liquidityBps: config.liquidityBps ?? BigInt(DEFAULT_LIQUIDITY_BPS),\n },\n ],\n });\n\n return hash;\n }\n\n /**\n * One-click launch: a token with the protocol's standard curve, threshold\n * and liquidity share. Trading starts immediately.\n */\n async launch(name: string, symbol: string, metadataURI = \"\"): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"launch\",\n args: [name, symbol, metadataURI],\n });\n }\n\n /**\n * Sell `amount` tokens (in token wei) back to the curve before graduation.\n * The contract reverts if the price fell below the bound before the\n * transaction landed: pass `minProceeds` to set it exactly, or `slippageBps`\n * to derive it from a fresh quote (default 100 = 1% below it).\n */\n async sellTokens(\n auctionId: bigint,\n amount: bigint,\n options: { minProceeds?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const minProceeds =\n options.minProceeds ??\n applySellSlippage(\n (await this.getSellQuote(auctionId, amount)).netProceeds,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"sellTokens\",\n args: [auctionId, amount, minProceeds],\n });\n }\n\n /** What selling `amount` tokens back to the curve would pay right now. */\n async getSellQuote(auctionId: bigint, amount: bigint): Promise<SellQuote> {\n const auction = await this.getAuction(auctionId);\n const proceeds = calculateSellProceeds(auction.totalSold, amount, auction.basePrice, auction.slope);\n const fee = (proceeds * auction.protocolFeeBps) / 10_000n;\n return {\n proceeds,\n fee,\n netProceeds: proceeds - fee,\n spotPriceAfter: spotPrice(auction.totalSold - amount, auction.basePrice, auction.slope),\n };\n }\n\n /**\n * Buy `amount` tokens (in token wei). The price rises with every purchase, so\n * the contract takes a maximum total cost and reverts if the price moved past\n * it before the transaction landed.\n *\n * Pass `maxCost` to set that bound exactly, or `slippageBps` to derive it\n * from a fresh quote (default 100 = 1% above the quoted total).\n */\n async buyTokens(\n auctionId: bigint,\n amount: bigint,\n options: { maxCost?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const maxCost =\n options.maxCost ??\n applySlippage(\n (await this.getQuote(auctionId, amount)).totalCost,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"buyTokens\",\n args: [auctionId, amount, maxCost],\n });\n\n return hash;\n }\n\n /**\n * Pay a completed auction's creator their share of the raise: everything\n * not reserved for Uniswap liquidity. Creator only, once, before or after\n * migration.\n */\n async withdrawProceeds(auctionId: bigint): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"withdrawProceeds\",\n args: [auctionId],\n });\n\n return hash;\n }\n\n /**\n * Move a completed auction's liquidity into a Uniswap v3 pool at the\n * auction's final price, lock it, and unlock the token for trading. Anyone\n * may call it.\n */\n async migrate(auctionId: bigint): Promise<Hash> {\n return this.write(\"migrate\", [auctionId]);\n }\n\n /**\n * Collect the migrated pool's trading fees. The protocol's share accrues to\n * the protocol and the rest is credited to the creator, who withdraws it\n * with `claim`. Anyone may call it.\n */\n async collectFees(auctionId: bigint): Promise<Hash> {\n return this.write(\"collectFees\", [auctionId]);\n }\n\n /**\n * Withdraw everything credited to the connected account in `token`: a\n * creator's share of pool fees, and any reserve migration couldn't place.\n */\n async claim(token: Address): Promise<Hash> {\n return this.write(\"claim\", [token]);\n }\n\n /** Send the protocol's unclaimed fees in `token` to the fee recipient. Anyone may call it. */\n async claimProtocolFees(token: Address): Promise<Hash> {\n return this.write(\"claimProtocolFees\", [token]);\n }\n\n /** The Uniswap pool and position for a migrated auction. */\n async getMigration(auctionId: bigint): Promise<MigrationInfo> {\n const [pool, positionId] = await Promise.all([\n this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"poolOf\",\n args: [auctionId],\n }),\n this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"positionId\",\n args: [auctionId],\n }),\n ]);\n return {\n pool: pool === zeroAddress ? null : pool,\n positionId: positionId === 0n ? null : positionId,\n };\n }\n\n private async write<F extends \"migrate\" | \"collectFees\" | \"claim\" | \"claimProtocolFees\">(\n functionName: F,\n args: ContractFunctionArgs<typeof tokenAuctionAbi, \"nonpayable\", F>\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName,\n args,\n } as WriteContractParameters<typeof tokenAuctionAbi, F>);\n }\n\n // Read: Has an auction's creator already withdrawn its proceeds?\n async hasWithdrawnProceeds(auctionId: bigint): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"proceedsWithdrawn\",\n args: [auctionId],\n }) as Promise<boolean>;\n }\n\n // Read: Is the protocol paused? While paused, launches and curve buys\n // revert; selling back, migration, withdrawals, fee collection and claims\n // still work.\n async isPaused(): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"paused\",\n }) as Promise<boolean>;\n }\n\n // Read: How much of `token` is credited to `account`, waiting for `claim`?\n async getClaimable(token: Address, account: Address): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"claimable\",\n args: [token, account],\n }) as Promise<bigint>;\n }\n\n // Read: Protocol fees in `token` earned and not yet claimed.\n async getProtocolFees(token: Address): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"protocolFees\",\n args: [token],\n }) as Promise<bigint>;\n }\n\n // Read: May new auctions be priced in `token`?\n async isPaymentTokenAllowed(token: Address): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"paymentTokenAllowed\",\n args: [token],\n }) as Promise<boolean>;\n }\n\n // Read: Get auction data\n async getAuction(auctionId: bigint): Promise<AuctionData> {\n const result = await this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"auctions\",\n args: [auctionId],\n });\n\n // Parse the tuple returned by the contract\n return this.parseAuctionResult(auctionId, result as unknown as RawAuction);\n }\n\n // Read: Get buy quote (off-chain calculation)\n async getQuote(auctionId: bigint, amount: bigint): Promise<BuyQuote> {\n const auction = await this.getAuction(auctionId);\n const fill = fillPurchase(\n auction.totalSold,\n amount,\n auction.basePrice,\n auction.slope,\n auction.totalRaised,\n auction.maxRaise\n );\n const fee = (fill.cost * auction.protocolFeeBps) / 10_000n;\n\n return {\n amount: fill.amount,\n cost: fill.cost,\n fee,\n totalCost: fill.cost + fee,\n spotPriceAfter: spotPrice(auction.totalSold + fill.amount, auction.basePrice, auction.slope),\n fillsAuction: fill.fillsAuction,\n };\n }\n\n // Read: Get spot price\n async getSpotPrice(auctionId: bigint): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"getSpotPrice\",\n args: [auctionId],\n }) as Promise<bigint>;\n }\n\n private parseAuctionResult(id: bigint, raw: RawAuction): AuctionData {\n // Mirrors the AuctionData struct returned by the public `auctions` getter.\n return {\n id,\n token: raw.config.token,\n paymentToken: raw.config.paymentToken,\n creator: raw.config.creator,\n basePrice: raw.config.basePrice,\n slope: raw.config.slope,\n maxRaise: raw.config.maxRaise,\n state: raw.state,\n totalRaised: raw.totalRaised,\n totalSold: raw.totalSold,\n protocolFeeBps: raw.config.protocolFeeBps,\n liquidityBps: raw.config.liquidityBps,\n lpFeeShareBps: raw.config.lpFeeShareBps,\n };\n }\n}\n","/** Smallest share of the raise an auction may commit to Uniswap liquidity (20%). Mirrors TokenAuction.MIN_LIQUIDITY_BPS. */\nexport const MIN_LIQUIDITY_BPS = 2_000;\n\n/** Liquidity share the builder uses when none is given (50%). */\nexport const DEFAULT_LIQUIDITY_BPS = 5_000;\n","import { Address } from \"viem\";\nimport { AuctionConfig } from \"../types\";\nimport { DEFAULT_LIQUIDITY_BPS, MIN_LIQUIDITY_BPS } from \"../constants/protocol\";\n\nexport class AuctionBuilder {\n private config: Partial<AuctionConfig> = {};\n\n withToken(name: string, symbol: string, maxSupply: bigint): this {\n this.config.name = name;\n this.config.symbol = symbol;\n this.config.maxSupply = maxSupply;\n return this;\n }\n\n withPaymentToken(address: Address): this {\n this.config.paymentToken = address;\n return this;\n }\n\n withBondingCurve(basePrice: bigint, slope: bigint): this {\n this.config.basePrice = basePrice;\n this.config.slope = slope;\n return this;\n }\n\n /** Graduation threshold: once this much is raised, trading moves to Uniswap. */\n withMaxRaise(maxRaise: bigint): this {\n this.config.maxRaise = maxRaise;\n return this;\n }\n\n /**\n * Share of the raise, in basis points, seeded into a Uniswap pool when the\n * auction migrates (5000 = 50%). The rest goes to the creator. Defaults to\n * 50%; must be between 20% and 100%.\n */\n withLiquidity(liquidityBps: number): this {\n if (!Number.isInteger(liquidityBps)) throw new Error(\"liquidityBps must be an integer\");\n this.config.liquidityBps = BigInt(liquidityBps);\n return this;\n }\n\n /** Off-chain metadata for the token, such as its image (e.g. an IPFS URI). */\n withMetadata(metadataURI: string): this {\n this.config.metadataURI = metadataURI;\n return this;\n }\n\n build(): AuctionConfig {\n const required: (keyof AuctionConfig)[] = [\n \"name\", \"symbol\", \"maxSupply\", \"paymentToken\",\n \"basePrice\", \"slope\", \"maxRaise\",\n ];\n\n for (const key of required) {\n if (this.config[key] === undefined) {\n throw new Error(`Missing required field: ${key}`);\n }\n }\n\n const config = { liquidityBps: BigInt(DEFAULT_LIQUIDITY_BPS), ...this.config } as AuctionConfig;\n\n if (config.maxSupply <= 0n) throw new Error(\"maxSupply must be greater than 0\");\n if (config.basePrice <= 0n) throw new Error(\"basePrice must be greater than 0\");\n if (config.slope < 0n) throw new Error(\"slope must not be negative\");\n if (config.maxRaise <= 0n) throw new Error(\"maxRaise must be greater than 0\");\n const liquidityBps = config.liquidityBps!;\n if (liquidityBps < BigInt(MIN_LIQUIDITY_BPS) || liquidityBps > 10_000n) {\n throw new Error(`liquidityBps must be between ${MIN_LIQUIDITY_BPS} and 10000`);\n }\n\n return config;\n }\n}\n","import { Address } from \"viem\";\nimport { SupportedChainId } from \"../types\";\n\nexport const AUCTION_ADDRESSES: Record<SupportedChainId, Address> = {\n 84532: \"0xe57fe62e31666a9b749e89086a8a5487a530153b\",\n 8453: \"0x0000000000000000000000000000000000000000\", // not yet deployed\n};\n\nexport const USDC_ADDRESSES: Record<SupportedChainId, Address> = {\n 84532: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n 8453: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n};\n","export const tokenAuctionAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"feeRecipient_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"defaultFeeBps_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"positionManager_\",\n \"type\": \"address\",\n \"internalType\": \"contract INonfungiblePositionManager\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_LP_FEE_SHARE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_LIQUIDITY_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"POOL_FEE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"auctionCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"auctions\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"config\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.AuctionConfig\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract AuctionToken\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocolFeeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"lpFeeShareBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TokenAuction.AuctionState\"\n },\n {\n \"name\": \"totalRaised\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalSold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buyTokens\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCost\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimProtocolFees\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimable\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"collectFees\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"tokenFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createAuction\",\n \"inputs\": [\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.AuctionParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"custodied\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"defaultFeeBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"defaultLpFeeShareBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getBuyCost\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"cost\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getSpotPrice\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"launch\",\n \"inputs\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"launchPreset\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"migrate\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paymentTokenAllowed\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolOf\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionId\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract INonfungiblePositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"proceedsWithdrawn\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeeRecipient\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFees\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sellTokens\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minProceeds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDefaultFeeBps\",\n \"inputs\": [\n {\n \"name\": \"feeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDefaultLpFeeShareBps\",\n \"inputs\": [\n {\n \"name\": \"shareBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setLaunchPreset\",\n \"inputs\": [\n {\n \"name\": \"preset\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.LaunchPreset\",\n \"components\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPaymentTokenAllowed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeRecipient\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sweep\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uniswapV3SwapCallback\",\n \"inputs\": [\n {\n \"name\": \"amount0Delta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"amount1Delta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userPurchases\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawProceeds\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionCompleted\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionCreated\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionMigrated\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"positionId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokenLiquidity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentLiquidity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Claimed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultFeeBpsUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"current\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultLpFeeShareBpsUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"current\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"LaunchPresetUpdated\",\n \"inputs\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"LpFeesCollected\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creatorTokenFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creatorPaymentFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolTokenFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolPaymentFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PaymentTokenAllowedUpdated\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProceedsWithdrawn\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeRecipientUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"current\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeesClaimed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Swept\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensPurchased\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"buyer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"cost\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensSold\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"seller\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"proceeds\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const;\n","import { formatUnits, parseUnits } from \"viem\";\n\n/**\n * Off-chain bonding curve calculations (mirrors BondingCurve.sol).\n *\n * Units: supplies and amounts are in token wei (18 decimals). `basePrice`,\n * `slope` and spot prices are payment-token units per whole token as\n * fixed-point numbers with 18 extra decimals (WAD), so a curve can rise by far\n * less than one payment unit per token. Costs and proceeds come back in plain\n * payment-token units. Use `parseCurvePrice` / `formatCurvePrice` to convert.\n */\nconst TOKEN_SCALE = 10n ** 18n;\n\n/** Fixed-point scale of `basePrice`, `slope` and spot prices. */\nexport const PRICE_SCALE = 10n ** 18n;\n\nconst SCALE = TOKEN_SCALE * PRICE_SCALE;\n\n/**\n * A human-readable price per whole token, in curve units.\n * `parseCurvePrice(\"0.01\", 6)` is 0.01 USDC per token.\n */\nexport function parseCurvePrice(price: string, paymentDecimals: number): bigint {\n return parseUnits(price, paymentDecimals + 18);\n}\n\n/** A curve price (e.g. from `getSpotPrice`) as a human-readable price per whole token. */\nexport function formatCurvePrice(price: bigint, paymentDecimals: number): string {\n return formatUnits(price, paymentDecimals + 18);\n}\n\nconst ceilDiv = (a: bigint, b: bigint): bigint => (a + b - 1n) / b;\n\nexport function calculateBuyCost(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n // Rounds up, like the contract, so a purchase always pays at least the exact price.\n const linearCost = ceilDiv(basePrice * amount, SCALE);\n const curveCost = ceilDiv(\n slope * amount * (2n * currentSupply + amount),\n 2n * SCALE * TOKEN_SCALE\n );\n return linearCost + curveCost;\n}\n\n/**\n * Proceeds from selling `amount` tokens back to the curve when `currentSupply`\n * are outstanding. Mirrors BondingCurve.calculateSellProceeds: the same\n * integral as a purchase, but rounded down, so a round trip never profits.\n */\nexport function calculateSellProceeds(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n if (amount > currentSupply) throw new Error(\"Cannot sell more than is outstanding\");\n const from = currentSupply - amount;\n const linear = (basePrice * amount) / SCALE;\n const curve = (slope * amount * (2n * from + amount)) / (2n * SCALE * TOKEN_SCALE);\n return linear + curve;\n}\n\n/** Price of the next whole token, in curve units (payment units × 1e18). */\nexport function spotPrice(\n currentSupply: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n return basePrice + (slope * currentSupply) / TOKEN_SCALE;\n}\n\nexport function calculateBuyQuote(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint,\n feeBps: bigint\n): { cost: bigint; fee: bigint; total: bigint; spotPriceAfter: bigint } {\n const cost = calculateBuyCost(currentSupply, amount, basePrice, slope);\n const fee = (cost * feeBps) / 10000n;\n return {\n cost,\n fee,\n total: cost + fee,\n spotPriceAfter: spotPrice(currentSupply + amount, basePrice, slope),\n };\n}\n\n/** Default slippage tolerance for `buyTokens` and `sellTokens`, in basis points (100 = 1%). */\nexport const DEFAULT_SLIPPAGE_BPS = 100;\n\n/**\n * Upper bound a buyer will accept for a quoted total, given a tolerance in\n * basis points. Rounds up so a tolerance never comes out tighter than asked.\n */\nexport function applySlippage(total: bigint, slippageBps: number): bigint {\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > 10_000) {\n throw new Error(\"slippageBps must be an integer between 0 and 10000\");\n }\n return (total * BigInt(10_000 + slippageBps) + 9_999n) / 10_000n;\n}\n\n/**\n * Largest amount (token wei) buyable from `currentSupply` for at most `budget`,\n * capped at `upperBound`. Mirrors BondingCurve.maxBuyable (binary search).\n */\nexport function maxBuyable(\n currentSupply: bigint,\n budget: bigint,\n basePrice: bigint,\n slope: bigint,\n upperBound: bigint\n): bigint {\n let hi = (budget * SCALE) / basePrice + 1n;\n if (hi > upperBound) hi = upperBound;\n let lo = 0n;\n while (lo < hi) {\n const mid = (lo + hi + 1n) / 2n;\n if (calculateBuyCost(currentSupply, mid, basePrice, slope) <= budget) lo = mid;\n else hi = mid - 1n;\n }\n return lo;\n}\n\n/**\n * What a purchase of `requested` tokens actually fills, given how much the\n * auction has left to raise. Mirrors TokenAuction._fill: a purchase that would\n * overshoot the cap delivers what the remaining budget buys and closes the\n * auction.\n */\nexport function fillPurchase(\n currentSupply: bigint,\n requested: bigint,\n basePrice: bigint,\n slope: bigint,\n totalRaised: bigint,\n maxRaise: bigint\n): { amount: bigint; cost: bigint; fillsAuction: boolean } {\n const remaining = maxRaise - totalRaised;\n const cost = calculateBuyCost(currentSupply, requested, basePrice, slope);\n if (cost < remaining) return { amount: requested, cost, fillsAuction: false };\n if (cost === remaining) return { amount: requested, cost, fillsAuction: true };\n\n const amount = maxBuyable(currentSupply, remaining, basePrice, slope, requested);\n if (amount === 0n) throw new Error(\"Auction is sold out\");\n return {\n amount,\n cost: calculateBuyCost(currentSupply, amount, basePrice, slope),\n fillsAuction: true,\n };\n}\n\n/**\n * Least a seller will accept for a quoted amount, given a tolerance in basis\n * points. Rounds down so a tolerance never comes out tighter than asked.\n */\nexport function applySellSlippage(netProceeds: bigint, slippageBps: number): bigint {\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > 10_000) {\n throw new Error(\"slippageBps must be an integer between 0 and 10000\");\n }\n return (netProceeds * BigInt(10_000 - slippageBps)) / 10_000n;\n}\n","import { Chain } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\nimport { SupportedChainId } from \"../types\";\n\nexport const CHAINS: Record<SupportedChainId, Chain> = {\n 84532: baseSepolia,\n 8453: base,\n};\n\nexport function getChain(chainId: SupportedChainId): Chain {\n return CHAINS[chainId];\n}\n","import { Address, Hash } from \"viem\";\n\nexport enum AuctionState {\n PENDING = 0,\n ACTIVE = 1,\n COMPLETED = 2,\n MIGRATED = 3,\n}\n\nexport interface AuctionConfig {\n name: string;\n symbol: string;\n maxSupply: bigint;\n paymentToken: Address;\n basePrice: bigint;\n slope: bigint;\n /** Graduation threshold: once this much is raised, trading moves to Uniswap. */\n maxRaise: bigint;\n /** Off-chain metadata for the token, such as its image (e.g. an IPFS URI). */\n metadataURI?: string;\n /**\n * Share of the raise seeded into Uniswap at migration, in basis points\n * (2000..10000). Defaults to 5000 (50%).\n */\n liquidityBps?: bigint;\n}\n\nexport interface AuctionData {\n id: bigint;\n token: Address;\n paymentToken: Address;\n creator: Address;\n basePrice: bigint;\n slope: bigint;\n maxRaise: bigint;\n state: AuctionState;\n totalRaised: bigint;\n totalSold: bigint;\n protocolFeeBps: bigint;\n liquidityBps: bigint;\n /** Protocol's share of the Uniswap pool's trading fees, in basis points. */\n lpFeeShareBps: bigint;\n}\n\nexport interface SellQuote {\n /** Curve value of the tokens being sold, before the protocol fee. */\n proceeds: bigint;\n fee: bigint;\n /** What the seller receives: proceeds minus fee. */\n netProceeds: bigint;\n spotPriceAfter: bigint;\n}\n\nexport interface MigrationInfo {\n /** The Uniswap v3 pool, or null if the auction unlocked without one. */\n pool: Address | null;\n /** The Uniswap position NFT, held by the auction contract forever. */\n positionId: bigint | null;\n}\n\nexport interface BuyQuote {\n /** Tokens the purchase would actually deliver: less than requested if it fills the auction. */\n amount: bigint;\n cost: bigint;\n fee: bigint;\n totalCost: bigint;\n spotPriceAfter: bigint;\n /** True if this purchase reaches the cap and closes the auction. */\n fillsAuction: boolean;\n}\n\nexport interface TransactionResult {\n hash: Hash;\n}\n\nexport type SupportedChainId = 8453 | 84532; // Base, Base Sepolia\n"],"mappings":"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","names":["AuctionState"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/constants/protocol.ts","../src/builders/auction-builder.ts","../src/constants/addresses.ts","../src/abis/token-auction.ts","../src/utils/bonding-curve.ts","../src/utils/chains.ts","../src/types/index.ts"],"sourcesContent":["import {\n createPublicClient,\n http,\n PublicClient,\n WalletClient,\n Chain,\n Address,\n Hash,\n zeroAddress,\n ContractFunctionArgs,\n WriteContractParameters,\n} from \"viem\";\nimport { AuctionBuilder } from \"./builders/auction-builder\";\nimport { AuctionConfig, AuctionData, BuyQuote, LaunchPreset, MigrationInfo, SellQuote, SupportedChainId } from \"./types\";\nimport { AUCTION_ADDRESSES, WETH_ADDRESSES } from \"./constants/addresses\";\nimport { DEFAULT_LIQUIDITY_BPS } from \"./constants/protocol\";\nimport { tokenAuctionAbi } from \"./abis/token-auction\";\nimport {\n applySellSlippage,\n applySlippage,\n calculateSellProceeds,\n DEFAULT_SLIPPAGE_BPS,\n fillPurchase,\n spotPrice,\n} from \"./utils/bonding-curve\";\nimport { CHAINS } from \"./utils/chains\";\n\n/** Shape of the nested tuple returned by the on-chain `auctions(id)` getter. */\nexport class AuctionFlowSDK {\n public readonly publicClient: PublicClient;\n public readonly walletClient?: WalletClient;\n public readonly auctionAddress: Address;\n public readonly chainId: SupportedChainId;\n private readonly chain: Chain;\n\n constructor(params: {\n chainId: SupportedChainId;\n rpcUrl: string;\n walletClient?: WalletClient;\n auctionAddress?: Address;\n }) {\n this.chainId = params.chainId;\n this.chain = CHAINS[params.chainId];\n this.auctionAddress = params.auctionAddress ?? AUCTION_ADDRESSES[params.chainId];\n\n if (params.auctionAddress === zeroAddress) {\n throw new Error(\n \"auctionAddress must not be the zero address.\"\n );\n }\n\n if (this.auctionAddress === zeroAddress) {\n throw new Error(\n `AuctionFlow has no canonical deployment on chain ${params.chainId}. ` +\n `Chains with a built-in deployment: ${Object.entries(AUCTION_ADDRESSES)\n .filter(([, addr]) => addr !== zeroAddress)\n .map(([id]) => id)\n .join(\", \")}. ` +\n `Pass \\`auctionAddress\\` to use your own deployment.`\n );\n }\n\n this.publicClient = createPublicClient({\n chain: this.chain,\n transport: http(params.rpcUrl),\n });\n\n this.walletClient = params.walletClient;\n }\n\n // Builder\n buildAuction(): AuctionBuilder {\n return new AuctionBuilder();\n }\n\n async createAuction(config: AuctionConfig): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"createAuction\",\n args: [\n {\n name: config.name,\n symbol: config.symbol,\n metadataURI: config.metadataURI ?? \"\",\n maxSupply: config.maxSupply,\n paymentToken: config.paymentToken,\n basePrice: config.basePrice,\n slope: config.slope,\n maxRaise: config.maxRaise,\n liquidityBps: config.liquidityBps ?? BigInt(DEFAULT_LIQUIDITY_BPS),\n },\n ],\n });\n\n return hash;\n }\n\n /**\n * One-click launch: a token with the protocol's standard curve, threshold\n * and liquidity share for `paymentToken`. Trading starts immediately.\n * Defaults to WETH, so the token trades in plain ETH (see `buyTokensWithETH`).\n */\n async launch(\n name: string,\n symbol: string,\n metadataURI = \"\",\n paymentToken: Address = WETH_ADDRESSES[this.chainId]\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"launch\",\n args: [name, symbol, metadataURI, paymentToken],\n });\n }\n\n /** The standard launch for `paymentToken`, or null if none is configured. */\n async getLaunchPreset(paymentToken: Address): Promise<LaunchPreset | null> {\n const [token, maxSupply, basePrice, slope, maxRaise, liquidityBps] = await this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"launchPresets\",\n args: [paymentToken],\n });\n if (token === zeroAddress) return null;\n return { paymentToken: token, maxSupply, basePrice, slope, maxRaise, liquidityBps };\n }\n\n /**\n * Sell `amount` tokens (in token wei) back to the curve before graduation.\n * The contract reverts if the price fell below the bound before the\n * transaction landed: pass `minProceeds` to set it exactly, or `slippageBps`\n * to derive it from a fresh quote (default 100 = 1% below it).\n */\n async sellTokens(\n auctionId: bigint,\n amount: bigint,\n options: { minProceeds?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const minProceeds =\n options.minProceeds ??\n applySellSlippage(\n (await this.getSellQuote(auctionId, amount)).netProceeds,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"sellTokens\",\n args: [auctionId, amount, minProceeds],\n });\n }\n\n /**\n * `sellTokens` for an auction priced in WETH, paid out in plain ETH. Takes\n * the same `minProceeds` / `slippageBps` options.\n */\n async sellTokensForETH(\n auctionId: bigint,\n amount: bigint,\n options: { minProceeds?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const minProceeds =\n options.minProceeds ??\n applySellSlippage(\n (await this.getSellQuote(auctionId, amount)).netProceeds,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"sellTokensForETH\",\n args: [auctionId, amount, minProceeds],\n });\n }\n\n /** What selling `amount` tokens back to the curve would pay right now. */\n async getSellQuote(auctionId: bigint, amount: bigint): Promise<SellQuote> {\n const auction = await this.getAuction(auctionId);\n const proceeds = calculateSellProceeds(auction.totalSold, amount, auction.basePrice, auction.slope);\n const fee = (proceeds * auction.protocolFeeBps) / 10_000n;\n return {\n proceeds,\n fee,\n netProceeds: proceeds - fee,\n spotPriceAfter: spotPrice(auction.totalSold - amount, auction.basePrice, auction.slope),\n };\n }\n\n /**\n * Buy `amount` tokens (in token wei). The price rises with every purchase, so\n * the contract takes a maximum total cost and reverts if the price moved past\n * it before the transaction landed.\n *\n * Pass `maxCost` to set that bound exactly, or `slippageBps` to derive it\n * from a fresh quote (default 100 = 1% above the quoted total).\n */\n async buyTokens(\n auctionId: bigint,\n amount: bigint,\n options: { maxCost?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const maxCost =\n options.maxCost ??\n applySlippage(\n (await this.getQuote(auctionId, amount)).totalCost,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"buyTokens\",\n args: [auctionId, amount, maxCost],\n });\n\n return hash;\n }\n\n /**\n * `buyTokens` for an auction priced in WETH, paid in plain ETH, with no\n * token approval. The ETH sent is the most the purchase may cost (`maxCost`,\n * or a fresh quote plus `slippageBps`); whatever it doesn't use is refunded\n * in the same transaction.\n */\n async buyTokensWithETH(\n auctionId: bigint,\n amount: bigint,\n options: { maxCost?: bigint; slippageBps?: number } = {}\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const maxCost =\n options.maxCost ??\n applySlippage(\n (await this.getQuote(auctionId, amount)).totalCost,\n options.slippageBps ?? DEFAULT_SLIPPAGE_BPS\n );\n\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"buyTokensWithETH\",\n args: [auctionId, amount],\n value: maxCost,\n });\n }\n\n /** Is this auction priced in WETH, so it can be bought and sold with plain ETH? */\n async isPricedInETH(auctionId: bigint): Promise<boolean> {\n const auction = await this.getAuction(auctionId);\n return auction.paymentToken.toLowerCase() === WETH_ADDRESSES[this.chainId].toLowerCase();\n }\n\n /**\n * Pay a completed auction's creator their share of the raise: everything\n * not reserved for Uniswap liquidity. Creator only, once, before or after\n * migration.\n */\n async withdrawProceeds(auctionId: bigint): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n\n const hash = await this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"withdrawProceeds\",\n args: [auctionId],\n });\n\n return hash;\n }\n\n /**\n * Move a completed auction's liquidity into a Uniswap v3 pool at the\n * auction's final price, lock it, and unlock the token for trading. Anyone\n * may call it.\n */\n async migrate(auctionId: bigint): Promise<Hash> {\n return this.write(\"migrate\", [auctionId]);\n }\n\n /**\n * Collect the migrated pool's trading fees. The protocol's share accrues to\n * the protocol and the rest is credited to the creator, who withdraws it\n * with `claim`. Anyone may call it.\n */\n async collectFees(auctionId: bigint): Promise<Hash> {\n return this.write(\"collectFees\", [auctionId]);\n }\n\n /**\n * Withdraw everything credited to the connected account in `token`: a\n * creator's share of pool fees, and any reserve migration couldn't place.\n */\n async claim(token: Address): Promise<Hash> {\n return this.write(\"claim\", [token]);\n }\n\n /** Send the protocol's unclaimed fees in `token` to the fee recipient. Anyone may call it. */\n async claimProtocolFees(token: Address): Promise<Hash> {\n return this.write(\"claimProtocolFees\", [token]);\n }\n\n /** The Uniswap pool and position for a migrated auction. */\n async getMigration(auctionId: bigint): Promise<MigrationInfo> {\n const [pool, positionId] = await Promise.all([\n this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"poolOf\",\n args: [auctionId],\n }),\n this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"positionId\",\n args: [auctionId],\n }),\n ]);\n return {\n pool: pool === zeroAddress ? null : pool,\n positionId: positionId === 0n ? null : positionId,\n };\n }\n\n private async write<F extends \"migrate\" | \"collectFees\" | \"claim\" | \"claimProtocolFees\">(\n functionName: F,\n args: ContractFunctionArgs<typeof tokenAuctionAbi, \"nonpayable\", F>\n ): Promise<Hash> {\n if (!this.walletClient) throw new Error(\"Wallet client required\");\n return this.walletClient.writeContract({\n chain: this.chain,\n account: this.walletClient.account!,\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName,\n args,\n } as WriteContractParameters<typeof tokenAuctionAbi, F>);\n }\n\n // Read: Has an auction's creator already withdrawn its proceeds?\n async hasWithdrawnProceeds(auctionId: bigint): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"proceedsWithdrawn\",\n args: [auctionId],\n }) as Promise<boolean>;\n }\n\n // Read: Is the protocol paused? While paused, launches and curve buys\n // revert; selling back, migration, withdrawals, fee collection and claims\n // still work.\n async isPaused(): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"paused\",\n }) as Promise<boolean>;\n }\n\n // Read: How much of `token` is credited to `account`, waiting for `claim`?\n async getClaimable(token: Address, account: Address): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"claimable\",\n args: [token, account],\n }) as Promise<bigint>;\n }\n\n // Read: Protocol fees in `token` earned and not yet claimed.\n async getProtocolFees(token: Address): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"protocolFees\",\n args: [token],\n }) as Promise<bigint>;\n }\n\n // Read: May new auctions be priced in `token`?\n async isPaymentTokenAllowed(token: Address): Promise<boolean> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"paymentTokenAllowed\",\n args: [token],\n }) as Promise<boolean>;\n }\n\n // Read: Get auction data\n async getAuction(auctionId: bigint): Promise<AuctionData> {\n // A getter with several return values comes back as an array, in order:\n // [config, state, totalRaised, totalSold].\n const [config, state, totalRaised, totalSold] = await this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"auctions\",\n args: [auctionId],\n });\n\n return {\n id: auctionId,\n token: config.token,\n paymentToken: config.paymentToken,\n creator: config.creator,\n basePrice: config.basePrice,\n slope: config.slope,\n maxRaise: config.maxRaise,\n state,\n totalRaised,\n totalSold,\n protocolFeeBps: config.protocolFeeBps,\n liquidityBps: config.liquidityBps,\n lpFeeShareBps: config.lpFeeShareBps,\n };\n }\n\n // Read: Get buy quote (off-chain calculation)\n async getQuote(auctionId: bigint, amount: bigint): Promise<BuyQuote> {\n const auction = await this.getAuction(auctionId);\n const fill = fillPurchase(\n auction.totalSold,\n amount,\n auction.basePrice,\n auction.slope,\n auction.totalRaised,\n auction.maxRaise\n );\n const fee = (fill.cost * auction.protocolFeeBps) / 10_000n;\n\n return {\n amount: fill.amount,\n cost: fill.cost,\n fee,\n totalCost: fill.cost + fee,\n spotPriceAfter: spotPrice(auction.totalSold + fill.amount, auction.basePrice, auction.slope),\n fillsAuction: fill.fillsAuction,\n };\n }\n\n // Read: Get spot price\n async getSpotPrice(auctionId: bigint): Promise<bigint> {\n return this.publicClient.readContract({\n address: this.auctionAddress,\n abi: tokenAuctionAbi,\n functionName: \"getSpotPrice\",\n args: [auctionId],\n }) as Promise<bigint>;\n }\n\n}\n","/** Smallest share of the raise an auction may commit to Uniswap liquidity (20%). Mirrors TokenAuction.MIN_LIQUIDITY_BPS. */\nexport const MIN_LIQUIDITY_BPS = 2_000;\n\n/** Liquidity share the builder uses when none is given (50%). */\nexport const DEFAULT_LIQUIDITY_BPS = 5_000;\n","import { Address } from \"viem\";\nimport { AuctionConfig } from \"../types\";\nimport { DEFAULT_LIQUIDITY_BPS, MIN_LIQUIDITY_BPS } from \"../constants/protocol\";\n\nexport class AuctionBuilder {\n private config: Partial<AuctionConfig> = {};\n\n withToken(name: string, symbol: string, maxSupply: bigint): this {\n this.config.name = name;\n this.config.symbol = symbol;\n this.config.maxSupply = maxSupply;\n return this;\n }\n\n withPaymentToken(address: Address): this {\n this.config.paymentToken = address;\n return this;\n }\n\n withBondingCurve(basePrice: bigint, slope: bigint): this {\n this.config.basePrice = basePrice;\n this.config.slope = slope;\n return this;\n }\n\n /** Graduation threshold: once this much is raised, trading moves to Uniswap. */\n withMaxRaise(maxRaise: bigint): this {\n this.config.maxRaise = maxRaise;\n return this;\n }\n\n /**\n * Share of the raise, in basis points, seeded into a Uniswap pool when the\n * auction migrates (5000 = 50%). The rest goes to the creator. Defaults to\n * 50%; must be between 20% and 100%.\n */\n withLiquidity(liquidityBps: number): this {\n if (!Number.isInteger(liquidityBps)) throw new Error(\"liquidityBps must be an integer\");\n this.config.liquidityBps = BigInt(liquidityBps);\n return this;\n }\n\n /** Off-chain metadata for the token, such as its image (e.g. an IPFS URI). */\n withMetadata(metadataURI: string): this {\n this.config.metadataURI = metadataURI;\n return this;\n }\n\n build(): AuctionConfig {\n const required: (keyof AuctionConfig)[] = [\n \"name\", \"symbol\", \"maxSupply\", \"paymentToken\",\n \"basePrice\", \"slope\", \"maxRaise\",\n ];\n\n for (const key of required) {\n if (this.config[key] === undefined) {\n throw new Error(`Missing required field: ${key}`);\n }\n }\n\n const config = { liquidityBps: BigInt(DEFAULT_LIQUIDITY_BPS), ...this.config } as AuctionConfig;\n\n if (config.maxSupply <= 0n) throw new Error(\"maxSupply must be greater than 0\");\n if (config.basePrice <= 0n) throw new Error(\"basePrice must be greater than 0\");\n if (config.slope < 0n) throw new Error(\"slope must not be negative\");\n if (config.maxRaise <= 0n) throw new Error(\"maxRaise must be greater than 0\");\n const liquidityBps = config.liquidityBps!;\n if (liquidityBps < BigInt(MIN_LIQUIDITY_BPS) || liquidityBps > 10_000n) {\n throw new Error(`liquidityBps must be between ${MIN_LIQUIDITY_BPS} and 10000`);\n }\n\n return config;\n }\n}\n","import { Address } from \"viem\";\nimport { SupportedChainId } from \"../types\";\n\nexport const AUCTION_ADDRESSES: Record<SupportedChainId, Address> = {\n 84532: \"0x424fdc89af63f3585716370901f7e7de3b11c3e8\",\n 8453: \"0x0000000000000000000000000000000000000000\", // not yet deployed\n};\n\nexport const USDC_ADDRESSES: Record<SupportedChainId, Address> = {\n 84532: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n 8453: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n};\n\n/** Wrapped ether: the same predeploy on Base and Base Sepolia. Auctions priced in it trade in plain ETH. */\nexport const WETH_ADDRESSES: Record<SupportedChainId, Address> = {\n 84532: \"0x4200000000000000000000000000000000000006\",\n 8453: \"0x4200000000000000000000000000000000000006\",\n};\n","export const tokenAuctionAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"feeRecipient_\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"defaultFeeBps_\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"positionManager_\",\n \"type\": \"address\",\n \"internalType\": \"contract INonfungiblePositionManager\"\n },\n {\n \"name\": \"weth_\",\n \"type\": \"address\",\n \"internalType\": \"contract IWETH9\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_LP_FEE_SHARE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MIN_LIQUIDITY_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"POOL_FEE\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint24\",\n \"internalType\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"auctionCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"auctions\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"config\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.AuctionConfig\",\n \"components\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract AuctionToken\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocolFeeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"lpFeeShareBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TokenAuction.AuctionState\"\n },\n {\n \"name\": \"totalRaised\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalSold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buyTokens\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCost\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"buyTokensWithETH\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimProtocolFees\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimable\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"collectFees\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"tokenFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentFees\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createAuction\",\n \"inputs\": [\n {\n \"name\": \"p\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.AuctionParams\",\n \"components\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"custodied\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"defaultFeeBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"defaultLpFeeShareBps\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getBuyCost\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"cost\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getSpotPrice\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"launch\",\n \"inputs\": [\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"launchPresets\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"migrate\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paymentTokenAllowed\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"poolOf\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionId\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"positionManager\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract INonfungiblePositionManager\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"proceedsWithdrawn\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFeeRecipient\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"protocolFees\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sellTokens\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minProceeds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sellTokensForETH\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minProceeds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDefaultFeeBps\",\n \"inputs\": [\n {\n \"name\": \"feeBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setDefaultLpFeeShareBps\",\n \"inputs\": [\n {\n \"name\": \"shareBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setLaunchPreset\",\n \"inputs\": [\n {\n \"name\": \"preset\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TokenAuction.LaunchPreset\",\n \"components\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setPaymentTokenAllowed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setProtocolFeeRecipient\",\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"sweep\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC20\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uniswapV3SwapCallback\",\n \"inputs\": [\n {\n \"name\": \"amount0Delta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"amount1Delta\",\n \"type\": \"int256\",\n \"internalType\": \"int256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"userPurchases\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"weth\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IWETH9\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdrawProceeds\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionCompleted\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"totalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionCreated\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"metadataURI\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"AuctionMigrated\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"positionId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokenLiquidity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"paymentLiquidity\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Claimed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultFeeBpsUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"current\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultLpFeeShareBpsUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"current\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"LaunchPresetUpdated\",\n \"inputs\": [\n {\n \"name\": \"paymentToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxSupply\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"basePrice\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"slope\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRaise\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"liquidityBps\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"LpFeesCollected\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creatorTokenFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creatorPaymentFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolTokenFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolPaymentFees\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PaymentTokenAllowedUpdated\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"allowed\",\n \"type\": \"bool\",\n \"indexed\": false,\n \"internalType\": \"bool\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProceedsWithdrawn\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeeRecipientUpdated\",\n \"inputs\": [\n {\n \"name\": \"previous\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"current\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolFeesClaimed\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"recipient\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Swept\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensPurchased\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"buyer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"cost\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"TokensSold\",\n \"inputs\": [\n {\n \"name\": \"auctionId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"seller\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"proceeds\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalRaised\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newTotalSold\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const;\n","import { formatUnits, parseUnits } from \"viem\";\n\n/**\n * Off-chain bonding curve calculations (mirrors BondingCurve.sol).\n *\n * Units: supplies and amounts are in token wei (18 decimals). `basePrice`,\n * `slope` and spot prices are payment-token units per whole token as\n * fixed-point numbers with 18 extra decimals (WAD), so a curve can rise by far\n * less than one payment unit per token. Costs and proceeds come back in plain\n * payment-token units. Use `parseCurvePrice` / `formatCurvePrice` to convert.\n */\nconst TOKEN_SCALE = 10n ** 18n;\n\n/** Fixed-point scale of `basePrice`, `slope` and spot prices. */\nexport const PRICE_SCALE = 10n ** 18n;\n\nconst SCALE = TOKEN_SCALE * PRICE_SCALE;\n\n/**\n * A human-readable price per whole token, in curve units.\n * `parseCurvePrice(\"0.01\", 6)` is 0.01 USDC per token.\n */\nexport function parseCurvePrice(price: string, paymentDecimals: number): bigint {\n return parseUnits(price, paymentDecimals + 18);\n}\n\n/** A curve price (e.g. from `getSpotPrice`) as a human-readable price per whole token. */\nexport function formatCurvePrice(price: bigint, paymentDecimals: number): string {\n return formatUnits(price, paymentDecimals + 18);\n}\n\nconst ceilDiv = (a: bigint, b: bigint): bigint => (a + b - 1n) / b;\n\nexport function calculateBuyCost(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n // Rounds up, like the contract, so a purchase always pays at least the exact price.\n const linearCost = ceilDiv(basePrice * amount, SCALE);\n const curveCost = ceilDiv(\n slope * amount * (2n * currentSupply + amount),\n 2n * SCALE * TOKEN_SCALE\n );\n return linearCost + curveCost;\n}\n\n/**\n * Proceeds from selling `amount` tokens back to the curve when `currentSupply`\n * are outstanding. Mirrors BondingCurve.calculateSellProceeds: the same\n * integral as a purchase, but rounded down, so a round trip never profits.\n */\nexport function calculateSellProceeds(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n if (amount > currentSupply) throw new Error(\"Cannot sell more than is outstanding\");\n const from = currentSupply - amount;\n const linear = (basePrice * amount) / SCALE;\n const curve = (slope * amount * (2n * from + amount)) / (2n * SCALE * TOKEN_SCALE);\n return linear + curve;\n}\n\n/** Price of the next whole token, in curve units (payment units × 1e18). */\nexport function spotPrice(\n currentSupply: bigint,\n basePrice: bigint,\n slope: bigint\n): bigint {\n return basePrice + (slope * currentSupply) / TOKEN_SCALE;\n}\n\nexport function calculateBuyQuote(\n currentSupply: bigint,\n amount: bigint,\n basePrice: bigint,\n slope: bigint,\n feeBps: bigint\n): { cost: bigint; fee: bigint; total: bigint; spotPriceAfter: bigint } {\n const cost = calculateBuyCost(currentSupply, amount, basePrice, slope);\n const fee = (cost * feeBps) / 10000n;\n return {\n cost,\n fee,\n total: cost + fee,\n spotPriceAfter: spotPrice(currentSupply + amount, basePrice, slope),\n };\n}\n\n/** Default slippage tolerance for `buyTokens` and `sellTokens`, in basis points (100 = 1%). */\nexport const DEFAULT_SLIPPAGE_BPS = 100;\n\n/**\n * Upper bound a buyer will accept for a quoted total, given a tolerance in\n * basis points. Rounds up so a tolerance never comes out tighter than asked.\n */\nexport function applySlippage(total: bigint, slippageBps: number): bigint {\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > 10_000) {\n throw new Error(\"slippageBps must be an integer between 0 and 10000\");\n }\n return (total * BigInt(10_000 + slippageBps) + 9_999n) / 10_000n;\n}\n\n/**\n * Largest amount (token wei) buyable from `currentSupply` for at most `budget`,\n * capped at `upperBound`. Mirrors BondingCurve.maxBuyable (binary search).\n */\nexport function maxBuyable(\n currentSupply: bigint,\n budget: bigint,\n basePrice: bigint,\n slope: bigint,\n upperBound: bigint\n): bigint {\n let hi = (budget * SCALE) / basePrice + 1n;\n if (hi > upperBound) hi = upperBound;\n let lo = 0n;\n while (lo < hi) {\n const mid = (lo + hi + 1n) / 2n;\n if (calculateBuyCost(currentSupply, mid, basePrice, slope) <= budget) lo = mid;\n else hi = mid - 1n;\n }\n return lo;\n}\n\n/**\n * What a purchase of `requested` tokens actually fills, given how much the\n * auction has left to raise. Mirrors TokenAuction._fill: a purchase that would\n * overshoot the cap delivers what the remaining budget buys and closes the\n * auction.\n */\nexport function fillPurchase(\n currentSupply: bigint,\n requested: bigint,\n basePrice: bigint,\n slope: bigint,\n totalRaised: bigint,\n maxRaise: bigint\n): { amount: bigint; cost: bigint; fillsAuction: boolean } {\n const remaining = maxRaise - totalRaised;\n const cost = calculateBuyCost(currentSupply, requested, basePrice, slope);\n if (cost < remaining) return { amount: requested, cost, fillsAuction: false };\n if (cost === remaining) return { amount: requested, cost, fillsAuction: true };\n\n const amount = maxBuyable(currentSupply, remaining, basePrice, slope, requested);\n // What's left can't buy even one token wei: the contract graduates the\n // auction without a purchase rather than revert.\n if (amount === 0n) return { amount: 0n, cost: 0n, fillsAuction: true };\n return {\n amount,\n cost: calculateBuyCost(currentSupply, amount, basePrice, slope),\n fillsAuction: true,\n };\n}\n\n/**\n * Least a seller will accept for a quoted amount, given a tolerance in basis\n * points. Rounds down so a tolerance never comes out tighter than asked.\n */\nexport function applySellSlippage(netProceeds: bigint, slippageBps: number): bigint {\n if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > 10_000) {\n throw new Error(\"slippageBps must be an integer between 0 and 10000\");\n }\n return (netProceeds * BigInt(10_000 - slippageBps)) / 10_000n;\n}\n","import { Chain } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\nimport { SupportedChainId } from \"../types\";\n\nexport const CHAINS: Record<SupportedChainId, Chain> = {\n 84532: baseSepolia,\n 8453: base,\n};\n\nexport function getChain(chainId: SupportedChainId): Chain {\n return CHAINS[chainId];\n}\n","import { Address, Hash } from \"viem\";\n\nexport enum AuctionState {\n PENDING = 0,\n ACTIVE = 1,\n COMPLETED = 2,\n MIGRATED = 3,\n}\n\nexport interface AuctionConfig {\n name: string;\n symbol: string;\n maxSupply: bigint;\n paymentToken: Address;\n basePrice: bigint;\n slope: bigint;\n /** Graduation threshold: once this much is raised, trading moves to Uniswap. */\n maxRaise: bigint;\n /** Off-chain metadata for the token, such as its image (e.g. an IPFS URI). */\n metadataURI?: string;\n /**\n * Share of the raise seeded into Uniswap at migration, in basis points\n * (2000..10000). Defaults to 5000 (50%).\n */\n liquidityBps?: bigint;\n}\n\nexport interface AuctionData {\n id: bigint;\n token: Address;\n paymentToken: Address;\n creator: Address;\n basePrice: bigint;\n slope: bigint;\n maxRaise: bigint;\n state: AuctionState;\n totalRaised: bigint;\n totalSold: bigint;\n protocolFeeBps: bigint;\n liquidityBps: bigint;\n /** Protocol's share of the Uniswap pool's trading fees, in basis points. */\n lpFeeShareBps: bigint;\n}\n\nexport interface SellQuote {\n /** Curve value of the tokens being sold, before the protocol fee. */\n proceeds: bigint;\n fee: bigint;\n /** What the seller receives: proceeds minus fee. */\n netProceeds: bigint;\n spotPriceAfter: bigint;\n}\n\n/** The protocol's standard launch for one payment token, as `launch` uses it. */\nexport interface LaunchPreset {\n paymentToken: Address;\n maxSupply: bigint;\n basePrice: bigint;\n slope: bigint;\n /** Graduation threshold, in payment-token units. */\n maxRaise: bigint;\n liquidityBps: bigint;\n}\n\nexport interface MigrationInfo {\n /** The Uniswap v3 pool, or null if the auction unlocked without one. */\n pool: Address | null;\n /** The Uniswap position NFT, held by the auction contract forever. */\n positionId: bigint | null;\n}\n\nexport interface BuyQuote {\n /** Tokens the purchase would actually deliver: less than requested if it fills the auction. */\n amount: bigint;\n cost: bigint;\n fee: bigint;\n totalCost: bigint;\n spotPriceAfter: bigint;\n /** True if this purchase reaches the cap and closes the auction. */\n fillsAuction: boolean;\n}\n\nexport interface TransactionResult {\n hash: Hash;\n}\n\nexport type SupportedChainId = 8453 | 84532; // Base, Base Sepolia\n"],"mappings":"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","names":["AuctionState"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auctionflow-sdk",
3
- "version": "2.1.0",
3
+ "version": "3.0.1",
4
4
  "description": "Type-safe TypeScript SDK for the AuctionFlow bonding-curve token auction protocol, built on viem.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",