Launch parameters
What the creator chooses and what the owner's launch configuration sets. The configuration never changes for a token once it launches.
Model V2 — what the creator sets
name, symbolRequired; an empty string in either reverts with
InvalidTokenParams. Fixed in the token's constructor.logo, description, socialsMetadata stored on chain in the token.
socials holds five strings: twitter, telegram, discord, website, farcaster.creatorFeeRecipientWhere creator fees go; the zero address means the launching account. The recipient can hand it on later with
transferCreatorFeeRecipient.creatorTaxBpsAn optional tax on every buy and sell, on top of the 1% base fee, paid 100% to the creator fee recipient: 0 to 2% here (
maxCreatorTaxBps = 200), fixed at launch.expectedEconomicsOptional. If set, the launch reverts with
LaunchEconomicsMismatch unless it equals previewLaunchEconomics(launchConfigId, pairToken) at execution, so an owner change to the curve, the pool or the fee policy cannot land under a launch in flight. Zero skips the check.saltCREATE2 salt for the curve and token, per launching account.
AgiV2LaunchDeployer.predictLaunchAddresses returns the addresses beforehand.launchConfigIdThe owner-defined configuration to launch against.
pairTokenThe quote asset for the curve and the graduated pool. The zero address means native ETH; anything else must be approved.
snipeTaxExemptionsUp to 32 addresses (
MAX_SNIPE_TAX_EXEMPTIONS) exempt from the snipe tax, for a team's opening buys. The list is public in the launch transaction. The launcher and their fee recipient are always exempt.Model V2 — what the owner's LaunchConfig sets
| Field | Meaning | Validation in _validateLaunchConfig |
|---|---|---|
supply | Total token supply, minted to the curve | ≥ 1e18, and ≤ int128 max so V4 can settle the seed |
curveFeeBps | Base trade fee on the curve | ≤ 1,000 bps (10%) |
phantomQuote | Virtual quote reserve that sets the opening price | Non-zero, and large enough that a probe buy of one millionth of it still returns tokens |
graduationThreshold | Real quote reserve at which the curve closes | Non-zero; together with the supply it must imply a seed Uniswap V4 would actually mint |
poolFee | The V4 pool's own LP fee | Must be zero (CoreLpFeeMustBeZero). The hook charges the fee instead. |
tickSpacing | Tick spacing of the graduated pool | > 0 and ≤ 32,767 |
enabled | Whether new launches can select it | — |
The configuration in use (getLaunchConfig(0)): a supply of 1,000,000,000 tokens, a 1% curve fee,
a 1.68 ETH phantom reserve, graduation at 4.2 ETH and a tick spacing of 60. For a launch against an approved
ERC-20, phantomQuote and graduationThreshold come from that asset's
PairTokenEconomics, in its own decimals, scaled so the curve keeps the same shape.
Model V1 — what the creator sets
name, symbol, logo, description, socialsThe same metadata, fixed in the token's constructor.
feeWalletReceives the creator's share of LP fees and the opening buy; empty means the launching account. The deployer can redirect it later with
AgiLaunchLocker.setFeeRedirect.launchConfigId, dexIdThe launch configuration (supply, opening tick, restrictions, quote asset) and the Uniswap V3 deployment to use.
saltCREATE2 salt for the token address.
ETH sent
msg.value must be at least launchFee(). Everything above the fee becomes an opening buy in the same transaction, delivered to the fee wallet; it is the only way a V1 creator receives supply. Nothing bounds it: the token's limits skip the opening buy, so a creator can hold most of the supply from the launch block. The wizard shows the resulting share before you sign and flags it above 5%.Model V1 — what the owner's LaunchConfig sets
| Field | Meaning |
|---|---|
pairToken | Quote asset of the pool, fixed per configuration. |
supply | Total supply, all of it minted into the position (≥ 1e18). |
initialTick | Opening price. Non-zero and within ±887,272. |
maxWalletBps, maxTxBps | Launch limits on the token. The factory requires maxTxBps = maxWalletBps × 110 / 100, capped at 10,000. |
restrictionBlocks | How many blocks those limits last. After that the token is a plain ERC-20. |
graduationThreshold | Informational: graduationStatus() compares the paired principal in the locked position against it. Nothing happens when it is crossed. |
reservedFee, routerRequiresDeadline, enabled | Router compatibility and availability flags. |
Where the launch fee goes
Both models charge 0.0005 ETH, paid to the protocol fee recipient inside the launch
transaction. The owner can change it with setLaunchFee.