Mints That Work Without Review
Pool mints can keep a freeze authority. Reward mints set up by a pool creator cannot, unless they have a badge (see Liquidity Mining).
Creating a pool or a reward slot with a mint that needs a badge fails with
UnsupportedMint if no badge is passed.
How Each Extension Is Treated
When you pass a badge, the program checks only that it is for that mint, and then accepts the mint without looking at its extensions or its freeze authority. Passing a badge for a mint that did not need one is fine. SOL (
So11111111111111111111111111111111111111112) and USDC (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v) skip the extension and freeze authority checks.
Badge Rules by Path
An
OnlyY pool adds one rule to every path: token Y must be SOL, USDC or have a badge for that exact mint, or creation fails with InvalidTokenBadge.
Token Badges
A token badge is an account in Meteora’s access registry program (regUFehW9oycnaV2auYyfqyYjKG1W1uLNT7rtUeemQr), derived from the seeds "token_badge" and the mint. Meteora creates badges after reviewing a token. Pass the badge account when creating a pool or reward slot with that mint; a badge for a different mint fails with InvalidTokenBadge.
To request a badge, complete the Token 2022 Whitelist Request Form with the mint address, the extensions you need and that the pool is on DLMM Pro, then open a ticket in the Meteora Discord.
Fee Token Rule
A pool with theOnlyY collect fee mode earns every fee in token Y, so token Y must be SOL, USDC, or a mint with a token badge. This applies even to dynamic configs that skip the other mint checks.
Transfer Fees
When a mint charges a transfer fee, the amount that leaves a wallet and the amount that arrives differ. DLMM Pro instructions are consistent about which side each amount is on:- Caps on what you pay (deposit maximums, the limit order
max_amount, the reward fundingmax_amount) include the transfer fee. Per-tick order amounts are what the pool receives. - Minimums on what you receive (swap output, withdrawals, claims) are measured after the transfer fee.
calculateTransferFeeIncludedAmount and calculateTransferFeeExcludedAmount do the same.
Examples with a mint that charges 1% (100 bps):
The pool pays the full amount out of its reserve in every payout, so fees on swap output, host fees, partner fee claims, maker payouts and reward claims all come off the receiver’s side. LP liquidity and fee accounting always use the amount the pool received, never the amount sent.
Transfer Hooks
For a mint with a badged transfer hook, every transfer runs the hook program, which needs extra accounts. These go first in the instruction’s remaining accounts, ahead of any tick arrays, as one slice per token role (token X, token Y, referral, reward). Pass a slice only for a mint that has a hook program. See Remaining Accounts. The TypeScript SDK resolves them for you when you leave them out. It resolves them as if the transfer amount were zero, so a hook whose accounts depend on the amount needs them passed explicitly. The remaining accounts start with the hook account slices, in the order given byremaining_accounts_info, followed by tick arrays. Each slice has an account type and a length of up to 255. The types are token X, token Y, referral and reward, and each can appear once. The type names the token, not the direction, so in a swap that sells X the input hook is the token X slice. The referral slice is for the token the host fee is paid in. Which types an instruction accepts:
A slice type the instruction does not accept fails with
InvalidRemainingAccountSlice. Fewer accounts than the slice lengths add up to fails with InsufficientRemainingAccounts. A repeated type fails with DuplicatedRemainingAccountTypes. A mint with a hook program and no slice fails with MissingRemainingAccountForTransferHook, and a slice for a mint without a hook program fails with NoTransferHookProgram.
Each slice holds everything a Token 2022 transfer of that mint needs after its source, mint, destination and authority: the extra accounts listed in the hook’s validation account, the hook program and the validation account. The SDK’s getExtraAccountMetasForTransferHook returns that list. The program adds the source, mint, destination and authority of the transfer itself. A swap with a referral that has a hook on the fee token fails if the referral slice is wrong, and you can leave the referral out to avoid it.
Memos
When the program sends tokens to an account that requires memos on incoming transfers, it adds the memo itself. Swaps, withdrawals, fee and reward claims, limit order cancels and partner fee claims all do this. The memo is added only when the destination token account is a Token 2022 account with required incoming memos switched on. It is added before the transfer and comes from the memo program, which payout instructions take as an account. Every payout to a user, referral or partner can carry one: the swap output, the host fee, withdrawals, fee claims, reward claims, ineligible reward withdrawals, cancels and partner fee claims. The protocol fee claim adds none. Deposits and funding come from you and carry none.Position and Order NFTs
Positions and limit orders are Token 2022 NFTs regardless of the pool’s mints. The NFT lives in its owner’s associated token account under the Token 2022 program. The NFT mint has 0 decimals and a supply of 1. It carries theMetadataPointer, TokenMetadata and MintCloseAuthority extensions. The token metadata name is Meteora Pool: followed by the pool address, and the symbol is MP for positions and ML for limit orders. The pool authority holds the mint authority and the close authority, so the program can close the mint when the position or order closes. The pool account is the freeze authority, which makes every NFT of a pool easy to find. The NFT can be transferred or delegated like any token, and wallets need Token 2022 support to show it. The payer covers the mint and token account rent, and closing the position or order refunds it to the rent receiver.
Related
Pool Creation and Activation
Where badges are passed when creating a pool.
TypeScript SDK Reference
Transfer fee helpers and transfer hook resolution.

