Contract reference
What each contract is for and the calls worth knowing.
Three contracts: ProwlPoolLauncher deploys tokens and opens their pools, ProwlPoolToken is the token itself, and ProwlFeeLocker holds the liquidity afterwards and splits its fees.
ProwlPoolLauncher
Deploys tokens, opens their pools, and keeps the registry of backing assets. It holds an entire supply between the two calls and nothing between launches; it has no withdrawal function.
createToken(name, symbol, quoteAsset, metadataURI)→token. The caller becomes its creator. The token exists and cannot be traded until the next call.launch(token)→positionId. Opens the pool, mints the whole supply as one single-sided position, burns the mint dust, and sends the position to the locker. Permissionless, and it can only run once.isProwlToken(address) → bool— the only thing that vouches for a token. ProwlPoolToken has a public constructor, so anybody can deploy one and share a link to it.positionOf(token),poolFee(),rangeTicks()— where a launch went and how it was shaped.getQuoteAssets()→ addresses and(enabled, decimals, openingCap).openingCapis what a launch opens at, in the asset's own units.allTokensLength(),tokensByCreator,tokensByQuote— enumeration.
It reverts with PoolAlreadyPriced rather than minting into a pool that is not at exactly its opening price. There is no shove: a launch has nothing to spend on correcting one but its own supply, and spending that means selling the token to whoever squatted it.
ProwlPoolToken
A plain ERC-20 and nothing more. No curve, no mint after construction, no owner, no pause, no blacklist, no transfer hook.
TOTAL_SUPPLY— one billion, minted once, to the launcher.quote(),creator(),metadataURI()— written at construction. The last has no setter.burn(amount)— destroys the caller's own tokens. Open to any holder, because a burn that only one address may perform is a permission and this is not one. Used by the launcher for the mint remainder.proposeNewCreator,acceptCreatorTransfer,factoryProposalReadyAt— see Community take-over.
ProwlFeeLocker
Holds positions forever and splits their fees. harvest(token) and claim(account, asset), both permissionless, both paying only the party owed. No withdrawal, no burn, no transfer out.
Integrating
- Check
isProwlTokenon the launcher before rendering or trading anything.ProwlPoolTokenhas a public constructor, so anybody can deploy one and share a link to it. - Trade through Project X's router like any other pool. The pool is
getPool(token, quote, poolFee()). - Quote a trade by simulating the swap against the current block. There is no preview function on the token, because the token is not the market — the pool is.
- Never send a slippage floor of zero. That is a trade that will fill at any price.
- There is no protected launch block. A token is buyable the instant its pool opens, with no restriction to handle.
Every token links to its own contract and its pool on the explorer from its page. For the threat model behind all of this, see Security.