Slice
Money

Per-token vaults

pump.fun keeps creator fees in a vault per creator address, not per token. So we give every token a creator address of its own, and with it a vault that holds that token’s fees and nobody else’s. Anyone can read it on Solscan.

Why one address per token

pump.fun derives a creator’s fee vault from the creator address alone. If one address were the creator of every token launched here, every token’s fees would pour into the same vault, and working out which token earned what would mean indexing every trade of every token and trusting whoever did the indexing.

With one creator address per token there is nothing to work out. The vault of a token contains exactly that token’s unswept fees, and each sweep transaction touches one token’s vault. How much a token has produced is a question the chain answers.

How the addresses are made

Every creator key is derived from one 32-byte master seed and a number, the creator index. Each launch takes the next index from a database sequence at the moment it is prepared, and an index is never reused, even when the launch is abandoned. Two tokens can therefore never share a creator address.

Derivation
seed(index)    = first 32 bytes of HMAC-SHA512(master seed, label + index)
creator(index) = ed25519 keypair from seed(index)

Deriving rather than generating means there is one secret to back up instead of one per token. It also means that secret is the most important one we hold: without it, fees already in the vaults could not be swept. See Security model.

The creator key does not sign the launch. pump.fun’s create_v2 takes the creator as a plain argument, so the only signers are the deployer’s wallet and the new mint. The creator key signs one kind of transaction in its life: the sweep.

The vault accounts

WhereAccountHolds
Bonding curvePDA of ["creator-vault", creator] under the pump.fun programCreator fees from curve trades, as SOL
PumpSwapThe wrapped SOL token account of the PDA ["creator_vault", creator] under the PumpSwap programCreator fees from pool trades after migration, as wrapped SOL

The program addresses are on Addresses. Each token’s page links to its creator address and its bonding-curve vault on Solscan, and the token API returns both as creator and creatorVault.

Reading a vault yourself

  1. Open the token’s page, or call GET /api/tokens/<mint>, and take the creator address.
  2. Open the creator address on Solscan. Its history is the token’s sweeps: each one collects from the vault and passes the SOL on to the treasury in the same transaction. Collecting is open to anyone, so you may also see a collect somebody else ran; those fees wait in the creator address and are credited by the next sweep.
  3. Open the bonding-curve vault. Its balance is the curve fees that have not been swept yet, and its incoming transfers are the trades that paid them.

The figure the site shows as “in the vault” is our last reading of both vaults together, refreshed by the sweep job and whenever a token page is opened with a reading older than a minute. Between readings it can lag the chain, never lead it.

Compared with a shared creator

QuestionOne creator for every tokenOne creator per token
How much has this token produced?Only by indexing every trade and trusting the indexerIts sweeps plus its vault, straight from the chain
Can one token’s fees be credited to another?Nothing on chain would show itEvery sweep names one creator, so it would show
What does a bad sweep affect?Every token at onceOne token, swept again after a short wait
The per-token address makes fees traceable, not untouchable. Sweeping is what moves them to the treasury, and from there the custody described on Proof of reserves applies.