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.
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
| Where | Account | Holds |
|---|---|---|
| Bonding curve | PDA of ["creator-vault", creator] under the pump.fun program | Creator fees from curve trades, as SOL |
| PumpSwap | The wrapped SOL token account of the PDA ["creator_vault", creator] under the PumpSwap program | Creator 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
- Open the token’s page, or call
GET /api/tokens/<mint>, and take the creator address. - 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.
- 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
| Question | One creator for every token | One creator per token |
|---|---|---|
| How much has this token produced? | Only by indexing every trade and trusting the indexer | Its sweeps plus its vault, straight from the chain |
| Can one token’s fees be credited to another? | Nothing on chain would show it | Every sweep names one creator, so it would show |
| What does a bad sweep affect? | Every token at once | One token, swept again after a short wait |