Anti-Sniper Fee Suite for a Token Launch
Maximize Yields & Deter Snipers with Meteora's Fee Suite
Fee Suite: Key Features
A) Built with Launches in mind
Dynamic Fees for DLMM Launch Pools: Maximize fees during launch volatility with Dynamic Fees
Fee Schedule for Dynamic AMM v1 and v2 Pools: Configurable fee schedule to mitigate against sniper bots by making them incur high fees at launch
(Bonus) Anti-Sniper Alpha Vault: To complement our fee suite, creators can use our Alpha Vault, which is an anti-bot tool to guard against sniper bots and allow genuine supporters to be the first to deposit and buy tokens at launch. Read more about how the Alpha Vault works here.
B) Collect/Distribute Fees from Locked Liquidity
Creators can permanently lock liquidity yet still claim and distribute fees from the permanently locked liquidity to LPs. Creators can also use Stake2Earn to incentivize top stakers.
C) Collect Fees in USDC or SOL (Coming Soon)
Much requested feature from partners. Collect Fees only in quote token (USDC or SOL).
1. Dynamic Fees
1.1 DLMM Launch Pools
DLMM Launch Pools have dynamic fees that increase or decrease depending on how volatile the market is, which in turn help offset losses that LPs may experience in volatile markets and enhance LP profitability. By default, Dynamic Fees are on enabled on all DLMM Launch Pools.
DLMM implements dynamic fees with surge pricing based on market fluctuations and volatility.
LPs earn a swap fee from traders when they perform a swap. The total swap fee will have two components: a base fee and a variable fee . Total swap fee
The variable fee is a function of real-time price volatility. The fee rate will be applied to the swap amount in each liquidity bin and distributed proportionally to the LPs in that bin.
LPs can claim these fees whenever they are available.
Learn more about how DLMM's Dynamic Fees work here.
1.2 DAMM v2 Launch Pools
LPs earn a swap fee from traders when they perform a swap. The total swap fee will have two components: a base fee and a variable fee . Total swap fee
Dynamic Fee Calculation
dynamic_fee_numerator = ((volatilityAccumulator*binStep)^2 * variableFeeControl + 99_999_999_999) / 100_000_000_000
dynamic_fee_percent = (dynamic_fee_numerator / 1_000_000_000) * 100
By default
binStep = 1
variableFeeControl
: This value will be set in dynamic fee params when a creator creates a pool. It is a constant value stored inside poolState.volatilityAccumulator
: This value is inside the program and stored in the poolState. For more info, read this section here.
Max Dynamic Fee on DAMM v2
Currently, the max Dynamic Fee is ~20% of the Base Fee. It will always be <= Base Fee
Example:
Base Fee = 0.25%
Dynamic Fee = 0.0499%
Total LP Fee = 0.2999%
2. Fee Scheduler
2.1 DAMM v2 Launch Pools
DAMM v2 uses an on-chain fee scheduler.
For a DAMM v2 pool using the fee scheduler, the default fee schedule config used on the Meteora frontend is based on an Exponential curve, 50% when pool trading starts, and dropping every second for 120 min, ending at 0.25%. DAMM v2 also offers creators and integrators the option of a Linear curve if required.
Read about how Pump.Science uses DAMM v2's Fee Scheduler for its token launchpad.
Fee Schedule (Exponential) Example

Just as an example, here's a look at the % fee at different time intervals:
50% - when pool trading starts
32.15% - 10 min after pool trading starts (10 min after 50% starts)
20.67% - 20 min after pool trading starts (10 min after 32.15% starts)
13.29% - 30 min after pool trading starts (10 min after 20.67% starts)
8.55% - 40 min after pool trading starts (10 min after 13.29% starts)
5.50% - 50 min after pool trading starts (10 min after 8.55% starts)
3.53% - 60 min after pool trading starts (10 min after 5.50% starts)
2.27% - 70 min after pool trading starts (10 min after 3.53% starts)
1.46% - 80 min after pool trading starts (10 min after 2.27% starts)
0.94% - 90 min after pool trading starts (10 min after 1.46% starts)
0.60% - 100 min after pool trading starts (10 min after 0.94% starts)
0.39% - 110 min after pool trading starts (10 min after 0.60% starts)
0.25% - 120 min after pool trading starts (10 min after 0.39% starts)
Fee Schedule (Linear ) Example

Notes on DAMM v2 Fee Scheduler
By default, LP Fees drop over time per second. But partners using the pool creation setup script have the following options:
Time based: Fees change per second
Slot based: Fees change per slot (1 slot = 1 block = 0.4 secs)
For more information on DAMM v2 pool and fee configuration, visit here.
DAMM v2 Fee Scheduler Calculation
when in linear feeSchedulerMode:
fee = cliff_fee_numerator - (period * reduction_factor)
when in exponential feeSchedulerMode:
fee = cliff_fee_numerator * (1 - reduction_factor/10_000)^period
baseFee: {
cliffFeeNumerator: BN // Initial fee numerator (base fee)
numberOfPeriod: number // The number of reduction periods
reductionFactor: BN // How much fee reduces in each period
periodFrequency: BN // How often fees change
feeSchedulerMode: number // 0: Linear, 1: Exponential
2.2 Fee Schedule for Dynamic AMM v1 Pools
Fee Scheduler: For Dynamic AMM Memecoin Pools v1, there is a fee scheduler where the % fee charged per swap changes over time. This fee is configurable and can be changed based on market conditions.
Protocol Fee: Protocol Fee represents the amount of fees charged per swap that goes to the protocol or integrations that drive volume to the pool. Protocol Fee is a % of the dynamic Fee Schedule.
The default global Fee Config for Memecoin Pools v1 on Meteora is currently:
15% - when pool trading starts
7% - 10 min after pool trading starts (10 min after 15% starts)
5% - 130 min after pool trading starts (120 min after 7% starts)
2% - 250 min after pool trading starts (120 min after 5% starts)
1% - 370 min after pool trading starts (120 min after 2% starts)
0.5% - 490 min after pool trading starts (120 min after 1% starts)
0.25% - 24 hours after pool trading starts (950 min after 0.5% starts)
This fee schedule may change over time.
How to choose a suitable Pool & Fee Config or create a new one?
What fee parameters to choose depends on your project's needs. You will need to look at the pool config list and choose a suitable pool_config_key
with your preferred fee parameters.
If you want to create an Alpha Vault along with your new pool, you also need to find a pool_config_key
that is mapped to a vault_config_key
that meets your requirements.
Public Pool Config List
Pool config list: https://amm-v2.meteora.ag/swagger-ui/#/pools/get_all_pool_configs
Devnet API: https://devnet-amm-v2.meteora.ag/pool-configs You can also get the list of config keys from devnet API
API endpoint to return the associated fee curve for each existing config: https://amm-v2.meteora.ag/swagger-ui/#/fee_config/get_config_associated_fee_configs
Using this endpoint, integrators can input the config pubkey, and it will return an array of fee update timings for the config, if there's any.
Integrators may choose a
pool_config_key
with a fee curve that suits your integration.
If there is no existing config in the list that fits your project's requirement, a new config needs to be created.
Only the Meteora team can create a new config to add it to the preset pool config list.
Default Pool Config used by Meteora Frontend
By default, Meteora's frontend is currently using this pool config key for Memecoin Pool v1 creation:
FiENCCbPi3rFh5pW2AJ59HC53yM32eLaCjMKxRqanKFJ
For the
FiENCCbPi3rFh5pW2AJ59HC53yM32eLaCjMKxRqanKFJ
pool config, it doesn't allow creation of any Alpha Vault, therefore it's fieldvault_config_key
is1111111...
New Custom Pool Config and Fee Curve for Integrators / Launchpads
Custom Pool Config Key: Integrators such as launchpads or other partners may need to use their own unique custom pool config key, if they want custom pool_creator_authority
to prevent front-running of the token launch pool.
NOTE:
New dedicated config keys can only be created by Meteora. Please reach out to us if this is required.
The
pool_creator_authority
doesn't work with program address. It's not a program whitelist, it needs to be a PDA (program derived address) or normal account.
Custom Fee Curve: If you are an integrator, Meteora can also apply a custom fee curve/schedule for your pools, but we will need to create a dedicated config key for your team, where pool_creator_authority
is linked to your signer wallet for pool creation. You would need to send us your signer wallet that would be used to deploy the pools.
NOTE:
Even with a dedicated config key for your team, Meteora would need to customize the fee curve/schedule for you. You can't do it on your own.
Custom Pool Config and Fee Curve is used by integrators such as Moonshot by DEX Screener.
Custom Fee Curve for a Specific Pool
If required, Meteora can set a custom fee curve for a single, specific pool. This would override the fee curve used by the pool's config key, doesn't matter which config key is used.
API to track associated Fee Curve for each Config
Meteora has an API endpoint to return the associated fee curve for each existing config: https://amm-v2.meteora.ag/swagger-ui/#/fee_config/get_config_associated_fee_configs
Using this endpoint, integrators can input the config pubkey, and it will return an array of fee update timings for the config, if there's any. Integrators may then choose a config with a fee curve that suits their integration.
Steps:
Press "Execute" and find and select the config you want to view
Check https://amm-v2.meteora.ag/swagger-ui/#/fee_config/get_config_associated_fee_configs for any Dynamic Fee curve for that specific config
Example: Moonshot Integration - Custom Config Key and Fee Curve
After 14400 seconds since pool start trading, the fee rate will be 2.5%
After 86400 seconds since pool start trading, the fee rate will be 1%
How do you view the starting fee for the config?
You can check the content of the config account itself, or input you config key account address in https://amm-v2.meteora.ag/swagger-ui/#/pools/get_all_pool_configs
Example: Moonshot Integration - Fee Curve starting fee
Pool Dynamic Fee starts at 500 bps (5%), and protocol fee is 20%
Combining the above two example parameters, the Moonshot Fee Curve is:
Pool Dynamic Fee starts at 5%
After 14400 seconds from start of pool trading, the fee rate will be 2.5%
After 86400 seconds from start of pool trading, the fee rate will be 1%
What does each field in the Fee Config mean?
config_address = the pool config key
trade_fee_bps = pool trading fee
protocol_fee_bps = protocol fee charged from pool trading fee
activation_duration = used to determine when exactly the pool will start trading.
start trade time = current_time + activation_duration Or current_slot + activation_duration, depends on the activation_type
vault_config_key = alpha vault config key. If it is
11111111111111111111111111111111
, means no alpha vault. If not, the pool can create an alpha vault. Note: This is NOT the same as the vault address.pool_creator_authority = address which can use the pool config key to create a pool. If it is
11111111111111111111111111111111
, it's public and available for everyone to useactivation_type = pool activation type. 0 = slot, 1 = time
Pool Config Example
Sample fields:
{ "config_address": "FiENCCbPi3rFh5pW2AJ59HC53yM32eLaCjMKxRqanKFJ", "trade_fee_bps": 1500, "protocol_fee_bps": 2000, "activation_duration": 0, "vault_config_key": "11111111111111111111111111111111", "pool_creator_authority": "11111111111111111111111111111111", "activation_type": 0 },
User Flow Example
A pool config may or may not have an associated vault config. There's no vault config associated when the vault_config_key
is 11111111111111111111111111111111
When the pool config has a vault config, user can create the pool + Alpha Vault that is binded (auto-whitelisted) by the pool. The Alpha Vault created will inherit the parameters (Pro Rata / FCFS + buying_cap, vesting duration, etc.) from the vault config.
Let's say a user wants to create the pool ABC/SOL with an Alpha Vault, the user will need to:
Check for pool config that have
vault_config_key
not =1111...
, andpool_creator_authority
is the user or1111...
(accessible by the public)Based on the vault requirement the user wants, the user will need to:
a) Check all the pool configs from step 1, which are each mapped to a
vault_config_key
, as well asb) Check for vault config and look for one that fits the requirement
If the user finds a requirement that suits their needs, they can use that
pool_config_key
to create the pool, then use the pool config-mappedvault_config_key
to create the vault. As long asvault_config_key
is used, the vault is automatically whitelisted upon pool creation.
All the settings are already predefined by pool_config
+ its mapped vault_config_key
The permutations for pool config + Alpha vault are created by the Meteora team.
Pool Config Example
{
"config_address": "8aPHoLN8ke6PhWeYA7ELi19fppptVYUCQvqKWR5yP1sn",
"trade_fee_bps": 150,
"protocol_fee_bps": 2000,
"activation_duration": 1512000,
"vault_config_key": "7ixojP8Zuu4csfTycHi8ywQymHm9zxAhu1TjnFuJaq2R",
"pool_creator_authority": "5unTfT2kssBuNvHPY6LbJfJpLqEcdMxGYLWHwShaeTLi",
"activation_type": 0
},
Alpha Vault Config Example
{
"address": "7ixojP8Zuu4csfTycHi8ywQymHm9zxAhu1TjnFuJaq2R",
"max_depositing_cap": 10,
"start_vesting_duration": 1,
"end_vesting_duration": 24107,
"depositing_duration_until_last_join_point": 24107,
"individual_depositing_cap": 1,
"escrow_fee": 0,
"activation_type": 0
},
In this example above, only the pool_creator_authority
(5unTfT2kssBuNvHPY6LbJfJpLqEcdMxGYLWHwShaeTLi)
can use the pool config 8aPHoLN8ke6PhWeYA7ELi19fppptVYUCQvqKWR5yP1sn
to create a pool with the below settings:
1.5% fee
20% protocol fee
pool start trade after 1512000 slot upon creation
slot based activation
and can create a binded Alpha Vault with FCFS config as shown below:
max deposit cap = 10 token
vested over 24106 slot after pool activate
deposit opens at 24107 slot before vault crank
every escrow maximum can only deposit 1 token
Full Pool and Alpha Vault Config List
Pool config list: https://amm-v2.meteora.ag/swagger-ui/#/pools/get_all_pool_configs
Alpha Vault config list: https://amm-v2.meteora.ag/swagger-ui/#/alpha_vault_config/get_all
If your preferred configs are not available in the pre-defined config lists above, please contact the Meteora team. You will need your own unique config key specific to your integration.
Important Notes
Only the Meteora team is able to change the default Dynamic Fee and Protocol Fee; projects have no backend access.
New config keys can only be created by Meteora. Highest fee % is 15% at the moment for Memecoin Pool v1.
Integrators such as launchpads or other partners may need to use their own unique custom pool config key, if they want custom
pool_creator_authority
to prevent front-running of the token launch pool. New dedicated config keys can only be created by Meteora - Please reach out to the team if this is required.The
pool_creator_authority
doesn't work with program address. It's not a program whitelist, it needs to be a PDA (program derived address) or normal account.All newly created config will not have a dynamic fee schedule applied to it, unless Meteora manually specifies it.
Last updated