Skip to content

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.

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 10000
address 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 token0

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.

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 locker records the fee recipient per position. locks is public:

// tokenId here is the positionId from TokenLaunched
struct Lock { address creator; bool exists; }
mapping(uint256 tokenId => Lock) public locks; // locks(positionId)
mapping(uint256 tokenId => address) public pendingCreator; // in-flight handover
  • locks(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.

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.

To check whether a creator fee stream is for sale, read the market’s listing by position id:

// FeeStreamMarket
listings(positionId) // → seller, price, active