Where the money goes

Buyback and burn

This is the page people misread. Nothing is ever paid to a holder's wallet. The holders' share buys the token on the open market and destroys what it buys, and holders benefit only through a smaller supply.

There are no payments#

No airdrops, no claims, no snapshot

Search the program for an instruction that transfers a policy's funds to an address the caller names. There is not one. The holders' share of profit lands in a program-owned account called holder_rewards, and the only instruction that can spend that account is buyback_and_burn, which swaps it for the launched token and burns the token in the same call.

Holders are compensated by supply reduction, not by receiving anything. If you hold the token, your balance does not change when a buyback happens. The total supply falls.

This design choice has a concrete benefit: a burn needs no holder snapshot, no Merkle tree and no claim flow, so there is nothing for anybody to be excluded from and no distribution list to trust. It also has a real cost, which is that the benefit is diffuse and is not visible in any wallet. Both are stated plainly rather than one of them being buried.

Profit above the high water mark splits three ways. The LP share is transferred to the compound authority's staging account and compounded into the liquidity position. The holders share is transferred to the holder rewards account, where it buys the token back and burns it, so the supply falls and no wallet is ever credited. The bankroll share is never transferred at all: it is whatever is left, and it stays in the vault. A fourth box, a holder's wallet, is drawn unreachable because no arrow in the program ever ends there.Profit above the markthree shares, summing to 10000 bpsLP shareprofit_to_lp_bpsDeeper liquiditycompounded into the positionHolders' shareprofit_to_holders_bpsBuy back, then burnsupply fallsno wallet is creditedBankroll shareprofit_to_bankroll_bpsStays in the vaultnever transferred at alland one box nothing reachesA holder's walletno instruction ends here

Holders benefit through a smaller supply, never through a payment. There is no instruction that credits a wallet.

Two sources, one burn#

Tokens get burned from two entirely different places, and conflating them is the usual source of confusion.

SourceWhat it isNeeds a swap?Conditional on profit?
The base fee legWhatever sits in base_escrow in the launched token itselfNo, it is already the tokenNo. It burns whenever there is any.
The profit buybackQuote staged in holder_rewards by sweep_profitYes, through the AMMYes. Only profit above the high water mark reaches it.
base_escrow      ──────────────────────────────┐
                                               ├──▶ burn_checked ──▶ supply falls
holder_rewards ──▶ swap via the AMM ──▶ base ──┘

Both land in base_escrow before a single burn call, which is why a buyback on a launch that has never made a profit still burns the fee leg.

The first source is empty in practice

LaunchLab's creator claim moves the quote mint only, and StonkFun's forwarding is quote only as well, observed on five real launches. So nothing fills base_escrow pre-migration. The burn instructions are implemented and work; the fee-leg source of tokens to burn does not exist. See what is not built yet.

What buyback_and_burn does#

Permissionless. In order:

  1. Read holder_rewards's balance. If it is non-zero, forward the caller's swap instruction to the pinned AMM program, signing as holder_auth and nothing else. If it is zero, skip the swap entirely.
  2. Reload both accounts. spent is the measured fall in holder_rewards; total_base is the whole balance of base_escrow afterwards.
  3. Require total_base > 0, otherwise revert with NothingToDo.
  4. Burn total_base from base_escrow with burn_checked, the policy PDA signing as authority.
  5. Add spent to paid_to_holders and total_base to tokens_burned.

The burn is immediate and in the same instruction

Nothing ever rests in a bought-back balance waiting to be withdrawn, because the whole point is that it cannot be. The swap output and the burn are one transaction, and the burn takes the entire base escrow balance rather than only the part the swap delivered.

The CPI target is checked against Config.amm_program before the call, so the signing seeds can never reach an arbitrary program. The amount credited is the measured delta, so a swap that moves nothing counts as nothing.

This instruction is the pattern the others were fixed to match

holder_auth owns exactly one account, holder_rewards, so that one account is everything a forwarded AMM instruction can debit. The swap's output lands in base_escrow, and a destination never has to sign. Handing the policy's signature over as well would have let the AMM spend both escrows, which no swap needs.

compound_lp was signing with the policy seeds until 2026-09-23 and was changed to do exactly this, with its own lp_auth over its own staged balance. The full account is on the safety model.

Why burn_base_leg exists separately#

buyback_and_burn does two unrelated jobs in one instruction. The swap can fail for a dozen ordinary reasons: no pool yet, thin liquidity, a bad route, a venue outage. The burn of the fee leg is our own token and cannot fail. Coupled, a swap that cannot be built takes the burn down with it, and the fee leg just accumulates.

That was observed on a real devnet run, and the fix is a second instruction: burn_base_leg burns whatever sits in base_escrow with no AMM program, no holder_rewards account and no remaining accounts at all. It is deliberately the smallest possible surface, so there is nothing in it that can fail except the burn itself.

buyback_and_burnburn_base_leg
PermissionlessYesYes
Touches the AMMYes, when holder_rewards is non-emptyNo
Spends holder_rewardsYesNo
Burns base_escrowYes, the whole balanceYes, the whole balance
Increments paid_to_holdersYes, by the measured quote spentNo, it is always 0 on this path
Increments tokens_burnedYesYes
Can be blocked by a broken swap routeYesNo

Both emit the same BuybackBurned event; burn_base_leg emits it with spent: 0.

Burning is safe to leave permissionless

Reducing supply can only benefit holders. There is no destination to choose and nothing to steal, so anybody may call either instruction, and if the keeper stops, anybody else can keep the burns running.

What the counters mean#

CounterUnitCounts
paid_to_holdersquote base unitsquote actually spent buying the token back. Money landing in holder_rewards is staged, not paid, and does not move this counter.
tokens_burnedbase token unitsevery token destroyed, lifetime, from both sources combined. The two are not separable from this counter alone.
a policy with staged but unspent holder rewards, from GET /coins/:mint
"counters": {
  "profitSwept":   { "value": "399000000" },
  "paidToHolders": { "value": "0"         },
  "tokensBurned":  { "value": "250000000" }
},
"pdaBalances": [
  { "kind": "holder_rewards", "balance": { "value": "249375000" }, "decimals": 8 }
]

Read that as: 249,375,000 base units of quote are waiting to buy the token back and have not been spent yet, while 250,000,000 base units of the token have already been burned from the fee leg. The name paid_to_holders is the on-chain field name and is kept verbatim here, but nothing was paid to anybody: it counts quote spent on a buyback.

Not the same as StonkFun's reward mode#

StonkFun offers its own "reward" launch mode, where the mint carries a 100 or 300 bps transfer tax collected by StonkFun's own withhold authority and distributed to holders on their reward cycle. That is a real distribution to wallets, and it is theirs, not ours. Stags cannot take that stream and does not interact with it.

StonkFun reward modeStags
Funded byA transfer tax on every transfer of the mintTrading profit from the bankroll, above the high water mark
Collected byStonkFun's withhold authorityThe policy PDA
Reaches holders asA distribution to walletsA smaller supply. Nothing reaches a wallet.
Can both run on one launch?YesYes

A launch can carry both, which is exactly why this documentation never calls them the same thing. "Holder rewards" would otherwise mean two different mechanisms on the same token.

The open question#

Burn versus distribute is still open in the specification

The specification lists "whether buyback_and_burn should burn or distribute" as an unresolved question. Burning needs no snapshot and is trustless; distribution needs a Merkle snapshot and a claim flow, and something has to decide who was holding and when. What is built today is the burn, and this documentation describes the burn. If that ever changes it will change here first.