Docs
How the sea works
Every coin launched here is a normal pump.fun coin with a Harpoon Vault next to it. Holders stake in the vault and are paid two ways: the coin's creator fees in SOL, and the exit tax of everyone who leaves, in tokens. Leaving costs 1% to 30%, more for big exits and more in a busy hour.
Overview
- Stake your tokens in the coin's vault (or buy + stake in one transaction).
- Earn 60% of the coin's pump.fun creator fees in SOL, split by stake, plus 80% of every exit tax, in tokens.
- Leave whenever you want. The exit tax depends on how much you took out in the last 24 hours, how much everyone took out, and how rough the last hour was.
- The dev gets 25% of the creator fees and none of the exit tax. The pad gets 15% of the creator fees and none of the tax.
What is enforced, exactly. pump.fun coins have no transfer hook and no transfer tax. The tax applies to tokens leaving the Harpoon Vault, not to a sell on pump.fun or any other venue. Tokens outside the vault trade freely and earn nothing: the tax is the price of the dividends. Splitting one dump over many wallets does not help, because the hour pressure and the crowd term are shared by everyone.
The exit tax
The program computes the tax with integer math at the moment your exit lands. The site's calculator (the throw) runs the same formula in your browser.
x = your exits in the last 24 h INCLUDING this one, in bps of supply
G = everyone's exits from this vault in the last 24 h, incl. this one
P = everyone's exits in the last 60 min, incl. this one
base(y) = 100 if y <= 50 (0.5% of supply)
= 3000 if y >= 500 (5% of supply)
= 100 + 2900 * ((y - 50) / 450)^2 between
wallet = base(x)
crowd = base(G / 2)
mult = 1 + min(P, 300) / 300 (1.00x .. 2.00x)
tax = min(3000, max(wallet, crowd) * mult) bps, rounded up in tokens
Worked example
You hold 2% of supply in the vault and leave with all of it on a quiet day. x = 200 bps, so base = 100 + 2900 * (150/450)^2 = 422 bps. Your own exit is the only one in the hour, so P = 200 bps and mult = 1 + 200/300 = 1.67x. Nobody else left today: G = 200, crowd = base(100) = 135 bps. Tax = 422 * 1.67 = 703 bps = 7.03%. Of it, 80% (5.62% of your exit) goes to the holders who stay, 20% (1.41%) is burned.
Leave the same 2% in four 0.5% slices in four quiet hours and you pay 1.16%, 1.57%, 2.83%, 4.92% (the 24 h total grows with each slice). Leave it after a 30% dump by someone else and the crowd term and the pressure push you toward the 30% cap.
Hour pressure
The vault keeps twelve 5-minute buckets of everyone's exits. P is their sum over the current bucket and the 11 before it. It raises the tax for everyone: the sea on the home page is drawn from it (sea state = round(2 + 7 × (mult − 1)), 2 to 9; 1.50x and up is a gale). The tide table shows each hour of the last 24 from the vault's 1-hour ring as tomorrow's expectation. It is a record, not a promise.
This preview runs the localnet build: one "hour" is 12 seconds, the 24 h window is 288 seconds.
Where the money goes
| Money | Holders who stay | Dev | Pad | Burned |
|---|---|---|---|---|
| pump.fun creator fees (SOL) | 60% | 25% | 15% | - |
| Exit tax (tokens) | 80% | 0% | 0% | 20% |
| Exit tax when less than 1 token of other stake is left | - | 0% | 0% | 100% |
| Launch fee (SOL) | - | - | 0.02 SOL + 2.5% of the dev buy | - |
Creator fees are hauled in by collect, which anyone can send (the keeper does it every few seconds). If nobody is staked, the holders' share waits in the vault and drips to the first stakers over 6 hours. The exiting wallet never shares in its own tax.
Warm-up
New stake joins a warming lot and starts earning after 1 hour. Whatever the warming lot would have earned before then goes back to the vault for the others. A flash stake around a fee haul or around someone's dump earns exactly 0. Vault dividends you restake skip the warm-up.
Lifecycle
| Stage | What happens | Who |
|---|---|---|
| Launch | launch creates the pump.fun coin (creator = the coin's Fees PDA), its vault and your position; optional first buy, straight into the vault | the dev |
| On the curve | buy_and_stake buys on the pump curve and stakes every token; sell_from_vault leaves and sells on the curve | anyone |
| Fees | collect pulls pump creator fees into the Fees PDA and books them 60/25/15 | anyone (keeper) |
| Migration | when the curve completes, pump migrates the coin to PumpSwap; the router and collect switch to PumpSwap | pump |
| Forever | exits and claims always work, even when the pad is paused | holders |
Transactions
- Launch. Your picture and name are uploaded to IPFS through the site, then one transaction: the pad's launch instruction alone (compute budget aside). Fee: 0.02 SOL + 2.5% of your first buy.
- Buy + stake. One transaction, slippage limit 5% of the quote. The tokens land in your warming lot.
- Stake from wallet. Moves tokens you hold into the vault.
- Leave. Tokens back to your wallet (
unstake) or straight to SOL (sell_from_vault). The site sends the rate you were shown asmax_tax_bpsand the quote minus 5% asmin_sol_out: if someone leaves right before you and the rate climbs, the program refuses and nothing is spent. - Haul in.
claimpays SOL and token dividends; "tokens back to the vault" restakes the token part.
Every transaction is simulated first; a failing one never reaches your wallet. The same signed bytes are resent every 2 seconds until they land or expire.
Parameters
Copied into each coin at launch; they never change for that coin. The admin can change them for future coins, inside hard bounds.
| Parameter | Value | Bound |
|---|---|---|
| Launch fee | 0.02 SOL + 2.5% of the dev buy | <= 0.5 SOL, <= 5% |
| Creator fee split | 60 / 25 / 15 (holders / dev / pad) | holders >= 40%, dev <= 50%, pad <= 20% |
| Warm-up | 1 h | 10 min .. 7 d |
| Unassigned drip | 6 h | 1 h .. 30 d |
| Minimum stake | 1 token | <= 1M tokens |
| Exit tax | 1% .. 30% | min 0.1% .. 10%, max <= 30% (hard cap) |
| Curve knees | 0.5% and 5% of supply | 1 bps .. 50% |
| Full pressure | 3% of supply in 60 min | 0.1% .. 50% |
| Crowd divisor | 2 | 0 (off) .. 20 |
| Burned part of the tax | 20% | 10% .. 100% |
Program
Program id Hrpz6owrGy1VMhuF56XuwDs21aN9a8hVZUuThdu2Euqt. Anchor 0.31. No attestor, no oracle, no off-chain service: everything is on chain.
| Account | Seeds | Holds |
|---|---|---|
| Config | ["config"] | admin, treasury, paused, coin counter, params for new coins |
| Coin | ["coin", mint] | params copy, totals, dividend accumulators, 12 x 5-min pressure ring, 24 x 1-h day ring |
| Position | ["pos", mint, owner] | warm + warming lots, reward debts, owed, claimed, the wallet's 24 x 1-h exit ring |
| Fees | ["fees", mint] | the coin's pump creator; holds the coin's SOL; owns the vault |
| Vault | ATA(Fees, mint) | staked tokens + token dividends owed |
| Instruction | Who can call | What |
|---|---|---|
launch | anyone (the dev) | pump create_v2 + vault + dev position; optional dev buy |
stake | the owner | wallet → vault (warming lot) |
buy_and_stake | the owner | pump curve or PumpSwap buy, every token into the vault |
unstake | the owner | leave with tax, tokens to the wallet (max_tax_bps guard) |
sell_from_vault | the owner | leave with tax + sell the rest, SOL to the wallet |
claim | the owner | SOL + token dividends, optional restake |
poke | anyone | matures a due warming lot |
collect | anyone | hauls in and books creator fees |
claim_dev / collect_treasury | anyone | pays the dev share to coin.dev / the pad share to the treasury, nowhere else |
transfer_dev | the dev | moves the dev role |
close_position | the owner | empty position, no exit inside the 24 h window; rent back |
quote_exit | anyone (simulate) | returns the tax an exit would pay now |
init_config / update_config / set_treasury / set_paused / propose_admin / accept_admin | admin | see Admin powers |
Errors
Read from the program's IDL. The site shows these messages when the program refuses a transaction.
| Code | Name | Message |
|---|---|---|
| Reading the IDL. | ||
Verify on chain
- The coin's pump.fun creator is its Fees PDA
["fees", mint], not a person: open the bonding curve account and compare. - The vault is the Fees PDA's token account: tokens can leave it only to a position owner or be burned.
- Coin account:
paramsnever change after launch;tax_to_stakers_total + burned_total = taxed_total. fees_total = holders_total + dev (paid + pending) + treasury (paid + pending).- Mint supply = 1,000,000,000 tokens −
burned_total. - Simulate
quote_exit(owner, amount)and compare with the site: same tax, to the bps.
Admin powers
| The admin can | The admin cannot |
|---|---|
| pause new launches and new deposits | block exits or claims (they always work) |
| change params for future coins, inside the bounds above | change any existing coin's tax, split or warm-up |
| set the pad treasury (a funded wallet) | move any coin's SOL or tokens, ever |
| hand the admin role over (two steps) | take any part of the exit tax |
Closing the pad (sunset) means pausing launches and deposits. Every vault stays open for exits and claims, and the site keeps a banner saying so.
Risks
- Tokens outside the vault are not taxed and earn nothing. The vault is opt-in.
- Honest holders leaving on a day of heavy exits pay the crowd rate too. The site shows the live rate before every exit.
- Splitting your own exits over time inside 24 h lowers the average: each slice pays the rate at the running total.
- A due warming lot earns nothing until it is activated (keeper, or any action of yours). The keeper runs every few seconds.
- Router trades must be top-level instructions: aggregators cannot route through the vault.
- Wallet apps show staked tokens as gone from the wallet. The position is on this site and on chain.
FAQ
Can I just sell on pump.fun?
Yes, tokens in your wallet trade anywhere with no tax. They also earn nothing. The tax is only for leaving the vault.
Does the dev get the tax?
No. 80% of it goes to the holders who stay and 20% is burned. There is no instruction that sends it anywhere else.
Why did my tax go up between the quote and the click?
Someone left in between: the hour pressure and the crowd term rose. The program never charges more than the rate you were shown: it refuses and nothing is spent. Look at the new rate and try again.
What if I am the last one in the vault?
Then there is nobody to pay: if less than 1 token of other stake is in the vault, the whole tax is burned.