What to index, in lifecycle order
Eight events cover the whole life of a token: launch, every trade and its fee, the creator claiming, graduation, the pool, and the lock. Each row has the exact signature and a copyable topic0 for your log filter.
Launch
One event on the factory. Everything else keys off the curve address it gives you.
- 01
TokenLaunchedFactoryA new token and its bonding curve are deployed. token, curve and creator are indexed.
TokenLaunched(address token, address curve, address creator, address quoteAsset, string name, string symbol, string metadataURI, string subjectHandle)topic00x1bfe686d55245af5e3e3e2eba4841252eae92b2135761fa063c34661cf0d3985
Trade
Per curve. Index by the address set you learned from TokenLaunched.
- 02
BuyCurveEvery curve buy. quoteIn is gross, fee is the slice the FeeCollector took.
Buy(address buyer, uint256 quoteIn, uint256 tokensOut, uint256 fee)topic00xbeae048c6d270d9469f86cf6e8fedda3c60ad770f16c24c9fc131c8e9a09101d - 03
SellCurveEvery curve sell. quoteOut is net of fee.
Sell(address seller, uint256 tokensIn, uint256 quoteOut, uint256 fee)topic00x846c37eef631e0943682d87352ec117c20008eb7f425c9b85ac011a6d4774cc0 - 04
FeeCollectedFeeCollectorEmitted alongside each Buy and Sell. asset is the zero address for the native coin.
FeeCollected(address curve, address creator, address asset, uint256 platformFee, uint256 creatorFee)topic00xf51d4f85b9c67a6999073394e680d7eaba2ae56553370c00088941bf662f6b52
Claim
The creator wallet pulls. Nothing is pushed.
- 05
CreatorFeeClaimedFeeCollectorA creator, or the agent holding the creator wallet, pulled accrued fees.
CreatorFeeClaimed(address creator, address asset, uint256 amount)topic00x2b9a4b971a1b7ec880d82d754dfc29969048892f65278be59641f7f7161cf714
Graduate
Three events, three contracts, one block. Curve trading stops, the pool takes over.
- 06
GraduatedCurveThe curve hit its threshold and handed reserves to the migrator. Curve trading stops here.
Graduated(address token, uint256 quoteMigrated, uint256 tokensMigrated)topic00x1c858049e704460ab9455025be4078f9e746e3fd426a56040d06389edb8197db - 07
PoolCreatedMigratorThe Uniswap V3 pool exists. Route post-graduation trades here.
PoolCreated(address token, address pool, uint256 quoteLiquidity, uint256 tokenLiquidity)topic00xd569a23a8cff45c641c5d5e4fb55b5e15e918f9acf0fc42b4909adc31f5f806c - 08
PositionLockedLP LockerThe LP position NFT is inside the locker. The locker has no withdrawal function.
PositionLocked(address token, uint256 tokenId)topic00x2cabb2a2973327d5863ceb4707e9441851243897e86d587ee35943599752eb54
Buy and Sell are emitted by each curve, so index them by address set: every curve address you learned from TokenLaunched. FeeCollected on the FeeCollector carries the curve address indexed, which gives you per-token fee totals without touching the curves.
topic0 is keccak256(signature). Recompute with viem's toEventSelector() if you want to check a value before trusting it. The three graduation events land in the same block; after Graduated the curve rejects trades and the pool from PoolCreated takes over, covered on the next page.