Documentation

Holder rewards

Holding a market token pays you a share of that market's trading fees every block. The fees accrue to your balance inside the token itself, and they are yours the moment you claim. By default you are paid in the market's pair coin, so a market quoted in INT pays you in INT. You can change that to dollars, to DIEM, or to one of the AI stocks, and the conversion happens inside your claim, before the payout reaches your wallet. Nobody sends it for you.

How accrual works

Every launch token carries its own accumulator. Two numbers on the token, accCoinPerShare and accTokenPerShare, record how much pair coin and how much token has been credited per unit of eligible supply since launch, at 1e36 precision. When fees are credited, both numbers go up by the amount divided by eligibleSupply. Your share is your balance times the change in those numbers since you were last settled.

Settlement happens on every transfer. The token's _update settles the sender and the receiver before moving the balance, so a balance is paid for exactly the blocks it was held: buy in block 100, sell in block 250, and you earn everything credited across those 150 blocks and nothing outside them. Sending tokens to another wallet moves the future accrual with the tokens and leaves what you have already earned with you.

Some accounts hold tokens without being holders, and they never accrue: the launchpad, the v4 PoolManager, the Distributor, the LaunchRouter and the Treasury. They are excluded at creation and their balances are left out of eligibleSupply, so the 800M tokens still in the curve do not dilute anyone. The launchpad's owner can exclude a protocol contract added later with setExcluded; holders are never excluded.

Fees credited while no eligible wallet holds any tokens — before the first buy settles, for instance — are carried in unallocatedCoin and unallocatedToken and folded into the next credit.

Collect, then claim

Fees reach the accumulator in one step, Launchpad.collectFees(token), which anyone may call. It realizes the fees on the market's two positions, sends the holders' 50% of the coin and all of the token to the Distributor, and the Distributor calls notifyFees on the token. Until someone collects, the fees sit in the pool and are not yet in anyone's accrued balance. See Fees.

Distributor.claim(token, minOut) settles you and pays you. It calls harvest on the token, which moves your accrued coin and token into the call, pays the token side to you as tokens, and pays the coin side as your preference: the pair coin directly, or converted through LaunchRouter.swapCoinForAsset in the same transaction. minOut is your floor on the converted amount; it is ignored when you take the coin. claimMany(tokens[], minOuts[]) claims several markets in one transaction.

The rewards page does both: it calls collectFees and then claim in one flow, so what you see accrued is what you receive. Claiming without collecting first is fine; you receive what was credited up to the last collection, and the rest stays in the pool until the next one.

Choosing what you are paid in

setPayoutPreference(kind, asset) on the Distributor is a single transaction from your own wallet, and it applies to every market you hold and every claim you make afterwards.

Preference What arrives How
The coin the market's pair coin the default; no conversion
Dollars USDC coin → USDC, through the vault at the index when it can pay, otherwise the peg bid or Aerodrome
DIEM DIEM coin → DIEM, from the vault's inventory when it can pay, otherwise coin → USDC → Aerodrome
A stock NVDAc, GOOGLc, METAc, MSFTc, AMZNc or SNDKc coin → USDC → Aerodrome

A token quoted in INT can pay one holder in INT, another in DIEM and a third in NVIDIA, out of the same fee stream, in the same block. The stocks you can choose are an owner allowlist, payoutAssetAllowed(asset). If a stock is removed from the list after you chose it, your claims fall back to the pair coin rather than reverting; set a new preference when you like.

Token-side fees are always paid as the market token, whatever your preference.

Dust and gas

There are no thresholds. Every wallet that holds a token accrues from its first block, and every amount, however small, is claimable. Whether a claim is worth its gas is your decision: the rewards page shows the accrued amount next to the estimated cost, and you can wait. Nothing you leave unclaimed is lost or reassigned; it stays yours on the token until you claim it, and transfers do not disturb it.

Held amounts

Some assets can refuse a transfer. A B20 stock reverts for a sanctioned address, and reverts for everyone while the issuer has it paused. Rather than failing your claim, the Distributor parks the refused amount in heldOf(asset, wallet) and emits PayoutHeld. The money is yours and it is sitting in the Distributor.

Call claimHeld(asset) once the block clears or the pause lifts and the whole held balance transfers to you. The rewards page shows held balances with a claim button.

What the rewards page shows

Your accrued amounts per market, read live from Distributor.pendingOf(token, wallet), and your claim history from Claimed events. Each amount appears twice: in the asset, and in work — model tokens, agent-hours, or dollars per day of Venice capacity, translated at current prices. The page also shows your current preference and any held amounts, and offers Claim and Collect then claim.