Earn SOL
RewardsCreator fees are paid out to holders in SOL.
- SOL already credited but not yet claimed is set aside first; it belongs to holders and is never spent again.
- The rest is credited pro rata to eligible holders. Nothing is swapped.
Documentation
Router launches a coin on Pump.fun and plugs its creator fees into one module. This page explains every step, from the transactions you sign to the exact rule each module follows every hour.
A normal Pump.fun coin, with one change: its creator fees have a job.
Every trade on Pump.fun pays a small creator fee. Normally it goes to whoever launched the coin. On Router, you choose a module at launch and the fee goes to that module instead. The module then does the same thing every hour — pay holders, burn supply, buy an NFT floor, fund a treasury — and every action is an on-chain transaction listed on the coin's page.
The coin itself trades on Pump.fun exactly like any other: same bonding curve, same graduation. Only where the creator fee ends up is different.
You approve once in your wallet. Up to three transactions land in order.
module wallet is derived from that mint. Then the transactions are built.POST /api/launch/prepare
{
"name": "Modded",
"symbol": "MOD",
"description": "Every trade buys BTC for holders.",
"launcher": "<YOUR_WALLET>",
"module": "earn_btc",
"config": { "minHold": 100000 },
"buySol": 0.5,
"imageType": "image/png",
"imageBase64": "<base64>"
}Routing is done by Pump.fun itself, not by a promise from us.
Pump.fun has a native fee-sharing config: a per-coin account that decides who receives the creator fee. At launch, the config is created and the only shareholder is set, so Pump.fun sends the fees there on every distribution.
Every module except split
100% → module wallet
One wallet per coin. The engine collects into it and runs the module from there.
Creator Fee Split
Up to 10 wallets, straight from Pump.fun
Recipients are written into the config itself. No module wallet ever holds these fees.
At five past every hour, each live coin runs one cycle.
| Schedule | Hourly, at :05 |
|---|---|
| Minimum collect | 0.005 SOL |
| Reserve kept | 0.008 SOL Pays transaction fees and token-account rent. |
| Minimum to act | 0.02 SOL |
| Swaps | Jupiter Buy & Burn allows up to 5% slippage. |
What each module does, and the exact rule the engine applies.
Creator fees are paid out to holders in SOL.
Creator fees are swapped to cbBTC and paid out to holders.
Creator fees are swapped to ZEC and paid out to holders.
Creator fees are swapped to USDC and paid out to holders.
Creator fees buy the token back and burn it.
Creator fees accumulate and buy the floor of an NFT collection.
Every cycle, fees are swapped into one asset and sent to a wallet.
Fees build a pot. One holder wins it, weighted by balance.
Fees are split between up to 10 wallets, enforced by Pump.fun itself.
Fees are collected into a treasury, part held in SOL and part in USDC.
Creator fees are swapped to ETH and paid out to holders.
Creator fees are swapped to JUP and paid out to holders.
Creator fees are swapped to BONK and paid out to holders.
Creator fees are swapped to WIF and paid out to holders.
Only the biggest holders get paid — the top N wallets share the fees in SOL.
Fees build a pot, then several holders win an equal slice of it.
Every cycle, all fees are streamed in SOL to one wallet — a charity, a DAO, a dev fund.
One cycle, two outcomes: part of the fees burns supply, part pays holders in SOL.
How the Earn modules decide who gets what. Drag the sliders.
Each cycle, the module reads every wallet holding the token. It skips the bonding curve, the module wallet, and anyone below the coin's minimum holding. The spendable amount is then split in proportion to balance.
Credits are recorded in a ledger rather than sent one by one — sending to thousands of wallets every hour would burn the rewards on network fees. Credits add up across cycles until you claim.
| Wallet | Holding | Share | Credited |
|---|---|---|---|
| Bonding curve | 612,000,000 | skipped · curve | — |
| 7xKp…a91Q | 38,000,000 | 57.45% | 0.689342 SOL |
| Hn2c…Rt4v | 21,500,000 | 32.50% | 0.390023 SOL |
| Module wallet | 9,000,000 | skipped · module wallet | — |
| 4bWe…p0Lm | 6,200,000 | 9.37% | 0.112472 SOL |
| Qz8u…Ke3s | 450,000 | 0.68% | 0.008163 SOL |
| Dd1r…Yy7n | 80,000 | skipped · below minimum | — |
Example wallets. 4 of 7 addresses qualify; payouts are rounded down to the smallest unit, so the module never credits more than it holds.
Prove you own the wallet with a signed message. The module pays the network fee.
| Minimum SOL | 0.001 SOL |
|---|---|
| Minimum cbBTC | 0.00001 cbBTC |
| Minimum ETH | 0.00001 ETH |
| Minimum ZEC | 0.001 ZEC |
| Minimum USDC | 0.1 USDC |
| Minimum JUP | 0.1 JUP |
| Minimum BONK | 100 BONK |
| Minimum WIF | 0.1 WIF |
import bs58 from 'bs58'
const time = new Date().toISOString()
const message = [
'Router claim',
`mint: ${mint}`,
`wallet: ${wallet}`,
`asset: ${asset}`, // SOL | BTC | ZEC | USDC
`time: ${time}`,
].join('\n')
const { signature } = await window.phantom.solana.signMessage(
new TextEncoder().encode(message),
'utf8',
)
const res = await fetch('https://www.routedpad.app/api/claim', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ mint, wallet, asset, time, signature: bs58.encode(signature) }),
})
console.log(await res.json())The draw is seeded by the chain, not by us.
When a draw is due, the module snapshots eligible holders (the launch wallet is excluded) and takes a recent finalized blockhash. It hashes blockhash:mint with SHA-256 and picks the wallet where that number lands on the stacked balances. Bigger holding, bigger slice — one ticket per token.
The blockhash, winner and entrant count are logged with the payout, so anyone can re-run the draw.
import { createHash } from 'node:crypto'
// The lottery event records the seed blockhash, the winner and the entrant count.
// Rebuild the eligible holders (wallet + raw token amount) at the draw's slot,
// in the same order, and the same seed must land on the same winner.
function pick(holders: { owner: string; amount: bigint }[], blockhash: string, mint: string) {
const supply = holders.reduce((s, h) => s + h.amount, 0n)
const digest = createHash('sha256').update(`${blockhash}:${mint}`).digest('hex')
const r = BigInt('0x' + digest) % supply
let acc = 0n
for (const h of holders) {
acc += h.amount
if (r < acc) return h.owner
}
}What is enforced by Pump.fun, and what runs on our servers.
Enforced on chain
Run by Router
Public, keyless JSON endpoints. Amounts are strings in base units.
| GET /api/claim?wallet= | Balances Credited and available per token and asset. Add &mint= for one token. |
|---|---|
| POST /api/claim | Claim Body: mint, wallet, asset, time, signature (base58). |
| POST /api/launch/prepare | Build launch Returns unsigned transactions for your wallet to sign. |
| POST /api/launch/confirm | Send launch Verifies the signed transactions and sends them in order. |
| GET /api/tokens/[mint]/candles | Price candles |
| GET /api/tokens/[mint]/trades | Recent trades |
curl "https://www.routedpad.app/api/claim?wallet=<YOUR_WALLET>"The numbers that shape every launch and payout.
| Ticker | 2–10 letters or numbers |
|---|---|
| Image | PNG, JPG, GIF or WebP, under 4 MB |
| Initial buy | 0 – 10 SOL |
| Module fuel | 0.01 SOL Paid by the launcher, used by the module for network fees. |
| Split recipients | 1 – 10 wallets, shares total 100% |
| Lottery interval | 1 – 168 hours |
| Rate limits | Prepare 8/min · Claim 10/min · Balances 60/min Per IP. |