Fee splits

A launcher can keep part of the creator fees - but at least half must go to the handle, and once the split is set nobody can change it.

That second half of the sentence is the interesting one.

Why it can be believed

Splits are not something Handle implements and asks you to trust. They are pump.fun's own fee sharing: up to ten shareholders, shares in basis points totalling exactly 10,000, stored in a SharingConfig account.

The config carries adminRevoked, and pump.fun sets it after a single update. Any later change is refused on-chain:

6009  sharingConfigAdminRevoked
      "Sharing config authority has been revoked -
       sharing config can only be updated once"

Verified by trying it: with a 50/50 split in place, cutting the handle's share to 1% is rejected by the chain. See scripts/src/split-verify.ts.

What the dashboard shows

usehandle.xyz/tokens shows three states, kept deliberately distinct:

Badge Means
Locked forever The split is set and frozen. Nobody can change it.
Still changeable Shares exist but the config is not frozen yet. Treat it as provisional.
Not locked No sharing config at all. All fees go to the handle's vault - but the launcher can still change the token's creator.

The middle state matters most, because it looks like a promise and is not one yet.

Locked is read from the chain on every refresh, never from anything recorded at launch. A cached lock is a claim about the past; the whole point of the word is that it is true now. If the split cannot be read, the page says so rather than showing it as locked.

How the money moves

Fees accrue to the sharing config, not to per-creator vaults. distributeCreatorFees pushes them out to the shareholders, and it is permissionless - anyone can call it, and the destinations are fixed in the frozen config, so the caller cannot send anything anywhere else.

Measured on devnet: 14,047 distributable lamports, 7,023 to the vault. Exactly half.

Why not do this in our own program

We could have. It would have meant a cross-program call, a second account to pay rent on, and asking you to trust our arithmetic instead of pump.fun's. The native path means the program that collects the fees is the one that divides them, with nothing of ours in between.