Reading token state
Everything about a launch is readable on-chain. This page lists the view calls that matter, in the order you typically need them. For anything you rely on, prefer these reads over the convenience API.
Discover the pool and position
Section titled “Discover the pool and position”From a launch’s TokenLaunched event you already have token, pool, and
positionId. Without the event, resolve the pool from the Uniswap factory:
// 1% fee tier is always 10000address pool = IUniswapV3Factory(v3Factory).getPool(token, weth, 10000);To know which side of the pool the launch token is on (needed for pricing),
compare addresses (token0 < token1 by address) or read the API’s
tokenIsToken0 field:
tokenIsToken0 = token < weth // token sorts below WETH → it is token0ERC-20 metadata
Section titled “ERC-20 metadata”The launch token is a standard, inert ERC-20. These never change:
| Call | Returns |
|---|---|
name() |
token name |
symbol() |
token symbol |
decimals() |
always 18 |
totalSupply() |
fixed supply, constant forever |
balanceOf(addr) |
holder balance |
There is no owner, mint, pause, blacklist, or tax function to read. They do not exist.
Pool state
Section titled “Pool state”Standard Uniswap V3 pool reads:
| Call | Returns |
|---|---|
slot0() |
sqrtPriceX96, tick, and pool config (the current price) |
liquidity() |
in-range liquidity |
token0() / token1() |
the sorted pair (one is WETH) |
fee() |
10000 (1%) |
Derive price from slot0().sqrtPriceX96. See
Pricing calculations.
The locked position (LpLocker)
Section titled “The locked position (LpLocker)”The locker records the fee recipient per position. locks is public:
// tokenId here is the positionId from TokenLaunchedstruct Lock { address creator; bool exists; }mapping(uint256 tokenId => Lock) public locks; // locks(positionId)mapping(uint256 tokenId => address) public pendingCreator; // in-flight handoverlocks(positionId).creator: the address currently entitled to the creator fee share (this is what a community takeover of the fee stream changes).pendingCreator(positionId): a non-zero value means a two-step fee-stream handover (or a marketplace sale) is in flight.
The position NFT itself is owned by the locker and is never transferable out. That is invariant L1. There is no function that releases locked liquidity.
Claimable fees
Section titled “Claimable fees”Fees accrue in the V3 position and are claimed via the locker’s claimFees.
Historical splits are best read from the FeesClaimed
event; the indexer also
aggregates them at GET /coins/:address/fees.
Fee-stream marketplace
Section titled “Fee-stream marketplace”To check whether a creator fee stream is for sale, read the market’s listing by position id:
// FeeStreamMarketlistings(positionId) // → seller, price, activeRelated
Section titled “Related”- Onchain events: the events these reads pair with.
- Pricing calculations: turning
slot0into a price.

