Muup.fun
Open the app

Trade tax and holder rewards

Two things a creator may switch on when they launch, both permanent, and both independent of each other. One charges traders more and pays the creator. The other gives the creator's own fees away to the people holding the coin.

Both are written once, at launch, and can never be changed

Not lowered, not raised, not added later. A rate somebody could change after people bought is not a disclosure, and an entitlement a creator could take back is not a reward. Neither of these has an owner path — not the creator's, not ours.

The creator trade tax

On top of the pool's 1%, a creator may add a tax of up to 10% and keep all of it. Almost every coin sets none, which is what traders expect.

It is charged on the quote leg of every swap — the network's own currency, or whichever asset the pool is priced in — so it reaches the creator in something liquid, in both directions, and never as their own coin. A buy and a sell of the same size pay the same tax.

What a trader paysGoes to
1% — the standard feesplit 90% creator / 10% platform
plus the creator's tax, 0 to 10%100% creator. The platform never takes a share of it

The coin's page shows the total a trade costs, not the pool fee alone — a coin with a 10% tax bills 11% per trade, and quoting the 1% by itself would understate what a buyer pays.

Weigh a high one honestly

A tax is money out of every buyer's pocket, and it is the first thing anyone comparing charts notices. It is disclosed on the coin's page for exactly that reason.

Holder fee sharing

A creator can hand their entire share of trading fees to the people holding the coin, split in proportion to what each of them holds. Holders claim it themselves, whenever they like, from the coin's page.

  • Computed on chain, from the coin's own balances — not by us, and not from a snapshot somebody has to be trusted to have taken honestly.
  • You earn while you hold and stop when you sell. Buying just before a payout earns nothing, because there is no payout moment to be early for.
  • The pool's own liquidity is excluded. Most of a launch's supply sits in the pool; counting it would send nearly every fee to an address that never claims.
  • It cannot be undone. The entitlement is moved to a contract at launch, and the function that changes a creator's payout address is gated on being the current holder of it — which is now that contract. No key moves it back.

A wallet that sold everything stops earning from that moment but keeps whatever it had already accrued. Fees that arrive before anyone holds are held, not lost, and go to the first holders.

Running both at once

They are separate claims, and sharing does not give away the tax. A creator who turns on holder rewards keeps charging their tax and keeps receiving it, in their own wallet, while the fee side goes to holders. This is the one thing on this page worth reading twice, because the two features sound like one decision.

Take a 1,000 USDC buy on a coin with a 2% tax and sharing switched on:

AmountFromTo
20 USDCthe 2% taxthe creator's wallet
9 USDC90% of the 1% feethe holders, pro rata
1 USDC10% of the 1% feethe platform

Turn sharing off and the first two rows both go to the creator. Turn the tax off and the first row does not exist.

Where they work

Both need a pool with the quote-fee hook, and for the same underlying reason: the hook is what makes the whole fee land on one asset. A hookless pool accrues fees in both tokens, and there is no way to add a tax to a fee that is charged in two currencies or to divide the coin side among holders in one step.

Networks whose pools carry the hook today:

  • Arc — quoted in USDC
  • Robinhood Mainnet — quoted in ETH

A launch is refused rather than half-served when sharing is asked for on a pool that cannot support it. Half a promise here would mean a vault holding a coin side it can neither attribute nor pay out.

Reading it from chain

The app's own token endpoint carries creatorTaxBps and holderFeeVault, and both are readable straight from the contracts. The aggregator-facing /api/public/v1 feed carries them too, under a fees block whose tradeFeeBps is the total a trader pays — see Public API.

// the tax, in bps of the quote leg, from the hook that charges itQuoteFeeHookV2.taxBpsOf(bytes32 poolId) view returns (uint16)// the pool fee plus the tax — what a trader actually paysQuoteFeeHookV2.totalBpsOf(bytes32 poolId) view returns (uint256)// the vault, or the zero address on a coin that does not shareLaunchToken.holderFeeVault() view returns (address)// who each side is paid to. On a sharing coin these DIFFER://   creatorOf  = the vault      taxPayeeOf = the humanDirectLaunchFactoryV4.creatorOf(address token) view returns (address)DirectLaunchFactoryV4.taxPayeeOf(address token) view returns (address)// what a wallet can claim right now, and the claim itselfHolderFeeVault.pending(address holder) view returns (uint256)HolderFeeVault.claim()

creatorTaxBps and creatorFeeBps are different units

creatorTaxBps is bps of the quote leg of a swap. creatorFeeBps is bps of the fee. A 300 in the first means a 3% tax; a 300 in the second would mean 3% of the fee. Reading one as the other is a known way to be wrong by two orders of magnitude.

When the tax is paid out

Along with everything else, when collectFees is called on the coin — which anyone may do. The tax is paid best-effort: a creator whose wallet refuses incoming transfers cannot block the rest of the collection, and their tax simply stays owed until they point it somewhere that works.

A creator who shared their fees can still move their tax wallet, with setTaxWallet. The usual setCreatorWallet is out of reach for them by design — the vault holds that slot — so without a separate path their tax would be welded to the wallet that launched the coin.