auctionflow-sdk 2.0.1 → 3.0.0
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.
- package/README.md +48 -11
- package/dist/index.d.mts +1288 -6
- package/dist/index.d.ts +1288 -6
- package/dist/index.js +505 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +502 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -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} 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 takes its share and\n * the creator receives the rest. Anyone may call it.\n */\n async collectFees(auctionId: bigint): Promise<Hash> {\n return this.write(\"collectFees\", [auctionId]);\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(functionName: \"migrate\" | \"collectFees\", args: readonly [bigint]): 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 });\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: 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: \"0x24a702f10f17a522b9b5511ec2970ee029195ee4\",\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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"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: \"0x990a04ffe0d49356321271629889fa0413ad1bdc\",\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