Docs

Relay is a fee router. A token names a fomo.family user's wallet as its pump.fun creator, and a keeper triggers the permissionless claim so the fees land in that wallet as SOL. Nobody has to sign up to be paid.

1. Overview

  1. A launcher picks a fomo user and launches a coin on pump.fun through Relay.
  2. 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.
  3. 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.
  4. The SOL goes from the vault to the fomo user's wallet. The keeper pays only the transaction fee.
  5. 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:

ResolverEnv varNotes
fomoapi.ioFOMO_API_KEYFree tier. Handles, wallets, leaderboard and search.
fomoscan.shFOMOSCAN_API_KEYProof-verified handle → wallet links.
getfomoapi.funFOMO_OPEN_API_KEYOpen source. Handles and leaderboard.
Manual/adminPaste 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:

  1. transfer_creator_fees_to_pump (PumpSwap, permissionless) unwraps the AMM vault into the pump creator vault.
  2. 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 exist

The 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 feeThe part of every pump.fun trade that the program pays to a coin's creator.
Creator vaultThe PDA where pump holds a creator's unclaimed fees. One per wallet.
ClaimA permissionless transaction that moves a vault's balance to its creator.
RecipientThe fomo.family user whose wallet a coin names as creator.
KeeperThe process that sends claims and pays their gas.
GraduationThe moment a bonding curve fills and liquidity moves to PumpSwap.