Skip to main content
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:
Value of each position in the launch currency is 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):
Share of supply for the top holders, computed client side against the fixed supply of 1e27:
Nested from the launch:
With curl:

Notes

  • Addresses are lowercase in both the rows and the filters. Lowercase a wallet address before querying by it.
  • Balances come from Transfer events 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 holderCount is adjusted in the same handler that writes the holder row, so the two never drift.