Skip to content
Solana

Docs · Revenue tokens

What you can tokenize

Coming

The fee rights the reel program pays today, who holds each one, and the instructions that move it: the ones a revenue token can lock, and the ones it can't.

Not live yet: this runs in a reel-vaults module that is built and tested but not in the deployed build. The page describes it so integrators can see where it fits; details can change before it ships.

Fee rights in the reel program

A fee right is anything that earns from a pool on its own, with a holder the program checks. The reel program has four. reel-vaults' tokenizer (coming) takes the first two as rights; the royalty and the payee are fixed in the pool.

Fee rightHeld byWhat it earnsHow it moves
Launch ownershipLaunch.owner, or the beneficiary while launch-lockedThe launch positions' LP fees (FeesCollect), and the OWNER bucket (BucketCollect, kind 2)LaunchTransfer + LaunchAccept; LaunchLock; LaunchUnlock
An LP positionPosition.ownerIts share of fee growth, collected without touching principalPositionTransfer + PositionAccept; PositionSplit; PositionLock
Creator royaltyroyalty_to, frozen at PoolInitThe ROYALTY bucket, credited to its ClaimLedgerNever moves; name the right address at launch
PayeePool.payee, frozen at PoolInitThe PAYEE bucket (Swap Cut or Exit Clock routed to 4) and REWARD_CREATOR (Swap Reward Mint's remainder)Never moves; name the right address at launch

Launch ownership

The launch position of each pool belongs to the Launch PDA (kind LAUNCH), and the launch's owner acts for it. The owner collects the launch positions' LP fees and is paid the OWNER bucket, which fills from any block routed to destination 1: Swap Cut, Exit Clock, Storm Fee and Sandwich Guard. One launch can hold up to 8 pools, so one launch ownership can carry the income of all of them.

While a launch is locked with LaunchLock, the beneficiary collects instead, and the liquidity can't be withdrawn. LaunchTransfer is refused while the launch is locked. Read Launch lock.

LP positions

A Position earns by fee growth: owed += shares·Δgrowth >> 64, settled before every share change and on collect. Collecting never touches principal, and a locked position keeps earning, so a position locked for a term is a clean fee right. PositionSplit can carve out part of a position (the new one inherits the lock); the launch position can't be split or transferred on its own, only through the launch.

Royalty and payee

royalty_to and payee are written into the pool at PoolInit and can never change. A revenue token can receive them only if its address, or a split that pays it, was named when the pool opened. That is why the Revenue Router (live) is a split PDA whose address is known before it exists: name it as royalty_to at launch, and a payee can be a tokenizer later. The tokenizer books income by its income account's balance, so whatever reaches that account counts.

The royalty is credited to the recipient's ClaimLedger for the pool's quote mint, and the recipient withdraws it with Claim. A program-owned recipient claims through its own program.

What reel can't hold

  • The protocol share and its splits. reel's cut, the integrator's part and the referrer's part are not fee rights a creator owns.
  • Other LPs' fees. Only positions the tokenizer holds would pay it.
  • Fee rights on other venues. hookr takes Uniswap positions, fee NFTs and other launchpads' fee rights through "doors". reel's tokenizer takes only reel positions and reel launches.
  • More than 8 rights. One revenue token holds up to 8 fee rights, paying in up to 4 quote mints.