holder keeps the current balance of every address that holds a launch token. It is maintained from LaunchToken.Transfer events, and rows are deleted when a balance drops to zero, so the row count per launch is the holder count.
Fields
Indexes: the primary key
(launch, address), (launch, balance) for “largest holders”, and address for “one wallet across launches”.
Protocol-owned balances are not holders: the bonding curve (which holds the unsold supply and the LP reserve until graduation), the Uniswap v4 PoolManager (which holds the pool’s tokens after graduation) and the burn address 0x…dead are excluded, as is the zero address.
Examples
Largest holders of a launch:totalCount here equals launch.holderCount.
One wallet’s holdings across launches, with enough launch data to value them:
balance * lastPriceQuote / 1e36; in USD use lastPriceUsd.
Does this wallet hold this token:
null means no position.
Holders above a threshold (the value is a string in 18 decimals; this is 1,000,000 tokens):
1e27:
curl:
Notes
- Addresses are lowercase in both the rows and the filters. Lowercase a wallet address before querying by it.
- Balances come from
Transferevents only, so they are exact for the launch tokens. The table does not track Windrose currency (wINR and friends) or dollar balances; read those from the ERC-20 contracts. - Because rows are deleted at zero, a wallet that sold out disappears from the table rather than showing
0. - A launch’s
holderCountis adjusted in the same handler that writes theholderrow, so the two never drift.