1. Overview
- A launcher picks a fomo user and launches a coin on pump.fun through Relay.
- The coin is created with the fomo user's own Solana wallet as its
creator. pump.fun pays every trade's creator fee into a vault that belongs to that key. - The keeper watches each recipient's vault. When more than dust has accrued it sends
collect_creator_fee, which is permissionless: the creator is a writable account, never a signer. - The SOL goes from the vault to the fomo user's wallet. The keeper pays only the transaction fee.
- Every claim is written to a public ledger keyed on its transaction signature.
- Venue
- pump.fun (Solana), bonding curve and PumpSwap
- Custody
- None. Relay never holds fees or keys for recipients.
- Recipient share
- 100% of the creator fee
2. Directing fees
On pump.fun the creator fee goes to the key named as creator in create_v2. That key is fixed at mint and cannot be reassigned by anyone, which is what makes the routing trustworthy: there is no admin, no config account and no authority to revoke.
- When
- At creation, in the same transaction as the optional first buy
- What we set
creator= the fomo user's Solana wallet- Made permanent by
- The pump program. The bonding curve stores the creator and never changes it.
Coins launched elsewhere cannot be redirected after the fact. If you want a coin to pay a fomo user, launch it here with that user selected, or on pump.fun with their wallet as the creator and then ask an admin to list it.
When the wallet is not known yet
A launch does not wait on the resolvers. If no wallet is known for the handle, the coin names a vault as creator instead: a keypair derived from the keeper secret and a random salt stored on the token row, never written down. The keeper claims the coin's fees into that vault exactly as it would into a wallet, and the moment the user's fomo wallet resolves it signs a plain transfer of the whole vault balance to them. Until then the SOL sits in the vault, visible on chain and on the token page as “held”.
- Derivation
sha256(keeperSecret ‖ "fomopad-vault" ‖ salt)as an ed25519 seed- Who can move it
- Only the keeper, and only to the resolved fomo wallet
- Ends when
- Never needs to: the vault keeps forwarding for the life of the coin
3. Finding the recipient's wallet
fomo.family gives every account an embedded Solana wallet but does not show it on profiles. Relay resolves a handle to that wallet through independent indexers, in this order, and remembers the answer:
| Resolver | Env var | Notes |
|---|---|---|
| fomoapi.io | FOMO_API_KEY | Free tier. Handles, wallets, leaderboard and search. |
| fomoscan.sh | FOMOSCAN_API_KEY | Proof-verified handle → wallet links. |
| getfomoapi.fun | FOMO_OPEN_API_KEY | Open source. Handles and leaderboard. |
| Manual | /admin | Paste the address from the Deposit screen in the fomo app. Wins over every resolver. |
The launch form shows the resolved address in full. Compare it with the fomo app before launching: the creator is permanent, and third-party mappings can be stale.
4. How claims work
Fees are claimed on a schedule, not per trade. Claiming per trade would spend more in transaction fees than it collected on a quiet token. The keeper looks at each recipient wallet about once a minute and claims when the vault holds at least 0.003 SOL.
collect_creator_fee
0 creator writable the fomo user's wallet (receives the SOL)
1 creator_vault writable PDA ["creator-vault", creator]
2 system_program
3 event_authority
4 program
signers: fee payer only (the keeper)Each successful claim becomes one row in fomopad_payouts, keyed on the transaction signature. A failed claim creates no row and is retried three minutes later; the fees stay in the vault.
5. After graduation
When a curve fills, liquidity migrates to PumpSwap and the coin's creator fee starts accruing in the PumpSwap coin-creator vault as wrapped SOL instead. The keeper handles that in the same transaction:
transfer_creator_fees_to_pump(PumpSwap, permissionless) unwraps the AMM vault into the pump creator vault.collect_creator_fee(pump) pays the whole vault out as SOL.
So the recipient always receives native SOL in their wallet, on the curve and after it, with nothing to unwrap.
6. The split
There is none. pump.fun's creator fee on every trade goes to the recipient in full. Relay takes nothing, because the fee never passes through fomopad: the program pays the creator directly. The keeper wallet spends a few thousand lamports per claim on gas.
- Creator fee
- Set by pump.fun's fee schedule (30 bps of every curve trade at the time of writing)
- To recipient
- 100%
- To Relay
- 0%
7. Attribution
A creator vault belongs to a wallet, not to a coin. If three coins name the same fomo user, their fees pool in one vault and one claim pays all three. Payouts are therefore exact per recipient and approximate per coin: each claim is credited to the coins sharing that vault in proportion to their 24-hour volume, or equally when volume is unknown.
8. Running the keeper
pnpm keeper:init # prints a fresh KEEPER_SECRET_KEY; fund its public key
pnpm keeper # runs forever: claims, market sync, hourly leaderboard
pnpm keeper:once # one pass, then exit (for a cron)
pnpm fomo:sync # pull the fomo leaderboard into fomopad_recipients
pnpm check-db # confirm the fomopad_ tables existThe keeper holds no recipient keys. Its wallet only pays gas, so if the secret leaks the worst case is a drained gas balance. Run it anywhere with the same .env.local as the site; the site can be deployed while the keeper runs on a laptop.
9. If a token is not paying
- Nothing has accrued. Claims wait for 0.003 SOL. A quiet coin can take a while.
- The keeper is not running. Check the log on Payments.
- The keeper is out of gas. It holds below 0.01 SOL. The log says so.
- The recipient had no wallet at launch. The launch form refuses this; a coin listed by hand may lack one.
10. Glossary
| Creator fee | The part of every pump.fun trade that the program pays to a coin's creator. |
| Creator vault | The PDA where pump holds a creator's unclaimed fees. One per wallet. |
| Claim | A permissionless transaction that moves a vault's balance to its creator. |
| Recipient | The fomo.family user whose wallet a coin names as creator. |
| Keeper | The process that sends claims and pays their gas. |
| Graduation | The moment a bonding curve fills and liquidity moves to PumpSwap. |