DLMM FAQ
Last updated
Last updated
When adding liquidity into DLMM, do users get an LP token or NFT that represents their position?
No, the user (owner) just creates a unique DLMM position / program account.
Why do I need to pay 0.05+ SOL when I open a DLMM position?
As described here, on Meteora, when a DLMM position is created, rent is required to open the program account and store data related to your liquidity position. This is refundable. You get it back when you withdraw your liquidity and close the position.
Can I check my price range in DLMM if I already added liquidity?
Yes you can look at your price range in the liquidity chart under "Your Positions".
I had provided liquidity in a DLMM pool, now that the price has gone out of range, is it possible to change the range of my liquidity without withdrawing my tokens and re-adding them?
No, you cannot change the price range on the inactive liquidity. Note that inactive liquidity doesn't earn any fees.
You can either:
Wait for the price to return within your range, especially if it is not too far out
Or if you want to continue earning fees immediately, rebalance by withdrawing your liquidity and opening a new position with a new price range / use additional funds to open a new position with a new price range
I deposited liquidity with two tokens. Why am I left with only one token and my position becomes inactive / out of range?
The tokens you deposit into the DLMM pool are used as liquidity for traders to swap and in return you earn fees. As swaps take place, the active price changes and the token amounts in your position would fluctuate. If the current active price moves outside of the price range you initially set, your position becomes inactive and you stop earning fees. Your position would be left with only one type of token in the pair, because 100% of the other token would have been sold in exchange for your remaining token. You cannot change your price range for your position once created.
You can either:
Wait for the price to return within your range, especially if it is not too far out
Or if you want to continue earning fees immediately, rebalance by withdrawing your liquidity and opening a new position with a new price range / use additional funds to open a new position with a new price range
When adding liquidity, why does the wallet simulation pop-up show a different token amount from the UI?
When you add liquidity to a DLMM pool, the function does a balanced deposit for the active bin, based on the token ratio in the active bin. There’s usually a tiny discrepancy between what is shown on the UI vs what is on the wallet simulation. We are making improvements so that they would show the exact amount as the simulation.
When adding liquidity, do the two token types in a pair need to be in a 50:50 deposit for the active bin?
No. When you deposit, if the price range covers the active bin, you will deposit according to the ratio of the 2 token types in the pool.
What determines the deposit amount for each token type in a pair on DLMM? For example, if depositing into a BONK-SOL pool, should the two tokens be of the same ratio and have the same value in USDT (50:50 autofill)?
Depends on your trading and volatility strategy. For example, whether you aim to sell more of a particular token e.g. BONK or SOL at certain bins and bin prices, within the range you set when using the Spot, Curve, or Bid Ask volatility strategy.
Why can’t I set a wider price range than what is immediately shown?
While DLMM is in beta, we have a max of 69 bins. You can open more positions if you need a wider price range or choose a pool with a larger bin step.
How are DLMM fees paid out? Do they auto-compound back into your liquidity position?
No, you’d have to claim fees manually.
Within the price range you set (across multiple bins), does only the active bin earn trading fees?
LPs get fees as long as successful swaps happen within their active price range in the pool. This could be swaps within the same active bin or swaps that resulted in closed bin(s) and a new active bin and price. Note that there can only be one active bin at any point in time. For more information, please refer to this section.
What does the height of the bin bar (y axis) on the liquidity chart represent?
The amount of tokens in terms of the quote (right side) token in the bin.
Y axis (height of the bin bar) = (Amount of base token x the bin price) + quote token = Total quote value.
Example: For this SOL-USDC pool, SOL = base token, USDC = quote token
What do the faded grey bins at the bottom represent when I am setting my price range?
The faded grey bins represent the liquidity positions of other users in the pool, which gives you a sense of the price range where most liquidity currently resides. When you adjust your price range the bins get highlighted a darker shade of grey. The height of the faded grey bins shows the relative amount of assets in that bin compared to the other bins.
How do DLMM bins quote ?
Let's say the current price active bin price is 64.80 USDC/SOL. And due to the bin width, the next bin price is 64.74 USDC. The DLMM will always quote whatever is the active bin, so if another DEX quotes 64.79 USDC, they will win the volume as the DLMM will continue to quote 64.80 USDC until it moves down to the next bin at 64.74 USDC.
The active bin will switch down to 64.74 USDC when it has exchanged all its USDC for SOL and must then move to the next bin that has USDC in order to fill any trade that is selling SOL for its USDC.
Is there a deposit cap for DLMM?
Deposit cap has been lifted. Previously, there was a cap of $1.5 Million while we did further optimizations on our beta.
The pool that I deposited funds into is now missing on the frontend. How do I see it again?
Sometimes there are test pools and we want to prevent LPs from depositing into those. You can use this link: https://app.meteora.ag/dlmm?internal=true which sets internal=true so that you can see hidden pools on the UI.
What is Volatility Strategy? What are some example use cases for Spot, Curve, Bid Ask?
Please refer to this section.
How often do you need to pay rent on DLMM? Whenever you open a new position, you will need to pay position rent (refundable) + binArray rent (if the binArray has never been initialized before - non-refundable).
Adding liquidity into the same position would not require additional rent.
I have withdrawn my liquidity, but I did not receive my rent back. Please close your liquidity position on the pool dashboard.
Why do I sometimes need to pay higher rent than 0.05+ SOL when I open a DLMM position? Why can't I receive this rent back?
If you happen to be the first to create the specific price bins in the pool, meaning no LPs have used those price bins before, you will need to pay the rent to create the binArray program account (that stores the bins) and this rent is unfortunately non-refundable. Meteora can't close that program account because other LPs may have liquidity in those bins. But once they are created no one else has to pay that rent again.
When I withdraw liquidity without closing my position, will fees be automatically claimed?
No, you have to claim fees separately. Alternatively, withdraw AND close position to claim the fees automatically.
When I withdraw liquidity and close my position, will fees be automatically claimed?
Yes. But you also have the option to only claim fees first and keep your liquidity position open.
For example, in a SOL-WIF pool, when traders swap their SOL for my WIF, what token do I receive as fee?
Traders swap their SOL for your WIF in the position, you receive SOL fee
Traders swap their WIF for your SOL in the position, you receive WIF fee
What do I do if the pool price is out of sync with market price?
For a few DLMM pools created with an inaccurate initial price or with low liquidity, the pool price may be out of sync with market price. LPs can first sync the pool price with market price before adding liquidity, to avoid the risk of loss due to arbitrage trades.
The "Sync with market price" feature is only available for out of sync DLMM pools:
a) With 0 liquidity between the active bin and the market price bin, or
b) With liquidity in a bin that's close enough to the market price bin.
If there's already liquidity in bins between the active price bin and market price bin, but those bins aren't close enough to the market price, "Sync with market price" won't be available.
How is liquidity distributed in the bins when using the Spot volatility strategy?
When using Spot volatility strategy for an A-B (base token-quote token) pool:
bid side = tokenB_balance should be ~equal between bins
ask side = tokenA_balance * tokenA_price_in_this_bin should be ~equal between bins
For example
In a SOL-USDC pool,
USDC is for the bid side (token B, quote token)
SOL is for the ask side (token A, base token)
Liquidity bin distribution using Spot strategy:
bid side = usdc_balance should be ~equal between bins
ask side = sol_balance * sol_price_in_this_bin should be ~equal between bins
Note: The "equal" here isn't exactly equal because there could be very minor precision loss when liquidity is added.
When adding liquidity into the active bin and it's an imbalanced deposit, can you add two tokens?
No. For an imbalanced deposit into the active bin, you can only deposit one token in the pair, not both.
How do I identify the price range set for a DLMM position by using a Solana explorer?
View the position address on https://explorer.solana.com/ and navigate to the Anchor Data tab to find the Lower Bin Id and Upper Bin Id, before using this formula:
min_price = (1 + bin_step/10000) ^ lower_bin_id
max_price = (1 + bin_step/10000) ^ upper_bin_id
How do I identify the bin step of a DLMM position by using a Solana explorer?
View the position address on https://explorer.solana.com/ and navigate to the Anchor Data tab. Click on the Lb Pair address then click the Anchor Data tab again and scroll down to find the bin step.
After adding liquidity single-sided with only one token in a new position, and the price goes in range, then out of range again, why is there a difference between my final withdrawal amount and my initial deposit amount for that same token?
There was likely an internal swap that happened because the active bin price moved in range while you added liquidity to your position.
Example scenario when you add USDC liquidity single-sided using Spot strategy:
If the active price moved into your range while you added liquidity, you are actually depositing some USDC tokens into the active bin.
There's an internal swap fee involved when depositing into the active bin, to get a balanced ratio between the 2 tokens in the active bin.
Internal swap fee = [USDC amount you have to swap to Token B to get a balanced ratio deposit of USDC and Token B in the active bin at that time] x [Pool Base Fee %]
To estimate the internal swap fee:
Go to your remove liquidity tx link on solscan -> Instruction Details -> #3 - Meteora DLMM Program: RemoveLiquidityByRange -> Input Args section -> expand txs -> find the difference between fromBinId and toBinId numbers + 1 (e.g. 1176 - 1170 + 1 = 7)
USDC amount in one bin = [USDC amount you deposited] / [difference between fromBinId and toBinId numbers + 1]
Estimated internal swap fee = < [USDC amount in one bin] x [Pool Base Fee %]
How are DLMM farming rewards paid out? Do they compound?
No, you’d have to claim farming rewards manually. We want to encourage more external projects to integrate DLMM and currently, setting up a compounding fee function may not be convenient for such integrations when accounting for fees to distribute to their own users.
Why doesn't my DLMM position earn any farming rewards?
DLMM farming rewards work differently from farms for Dynamic Pools. There are no LP tokens to stake into a farm. You start earning DLMM farming rewards once you deposit liquidity in a price range that covers the active bin.
Rewards are distributed to the liquidity position in the active bin. But if swaps cause the price to move to a different active bin, rewards are distributed equally between bins crossed.
The proportion of rewards you get is based on your share of the liquidity position in those bins. The greater your share, the more rewards you get.
Basically, only your liquidity that earns fees will earn farming rewards, so you won't get any rewards if your position is out of range and not active. No rewards will be distributed to the bin if it has 0 liquidity.
Is the rate of reward distribution linear? What happens if there is no active liquidity?
Yes, rewards are distributed at a fixed rate per second. For example, if there are 50,000 USDC in total farm rewards over 4 weeks (~28 days), rewards are distributed at 0.020667 USDC per second. This is distributed to positions in the active bin and in bins crossed when the active bin changes.
If there's no liquidity in the active bin, rewards will accumulate and not be distributed. Using the same example above (50,000 USDC in total rewards at 0.020667 USDC per second), if there's no active liquidity for 10 days, total undistributed farming rewards will be ~17,856.288 USDC.
Are LM/farming rewards claimed calculated and shown under "Fees Earned (Claimed)"?
No. "Fees Earned (Claimed)" only shows swap fees claimed.
For more details on DLMM Farming Rewards, click here.
How do I set up a farm?
Please open a ticket on discord. We need the following details:
Link to the pool you want to create a farm for
Token mint address for the reward token you want to give. You can specify up to two.
Duration the farm will run. We recommend 4 weeks. Whenever you add rewards it resets the farm duration. So for a 4 week farm, if you upload rewards at week 2, it will reset and distribute whatever rewards in the farm for 4 more weeks.
A wallet address to whitelist that will load the farming rewards.
When adding farming rewards to a new DLMM pool, can I use a token that is not part of the pair as the reward? How many token types can I give as rewards?
Yes you can use any token, up to 2 types of token.
Can I close or change my farm duration?
Farms are not designed to be changed or closed once created. If required, we can create a new farm with a shorter/longer duration for you.
Who can create DLMM pools at the moment?
On the frontend, DLMM pool creation and listing is permissioned at the moment. Program-wise on Solana, this process is permissionless. If you're interested in creating a DLMM pool, please reach out to the team.
As a new DLMM pool creator, why can’t I set a wider price range than what is immediately shown?
While DLMM is in beta, we have a max of 69 bins. You can open more positions if you need a wider price range.
Can a new DLMM pool creator change the bin width (bin step) after creation?
No. A new pool creator will be able to set the bin width at creation, but won't be able to change it after.
As a pool creator, why do I sometimes pay higher rent than normal to open the position?
If you happen to be the first to create the specific price bins in the pool, meaning no LPs have used those price bins before, you will need to pay the rent to create the binArray program account (that stores the bins) and this rent is unfortunately non-refundable. Meteora can't close that program account because other LPs may have liquidity in those bins. But once they are created no one else has to pay that rent again. When you close your own position, you still get back the standard rent for your position (~0.057 SOL). Read more here.
When creating a DLMM pool and setting the initial pool price, why does the eventual pool price deviate from my input?
If the bin price cannot be represented exactly by the program, frontend will round up / down to the closest price. The deviation depends on the bin step the user selected.
What are the differences between DLMM and Dynamic pools?
Please read this section.
What is 24Hr Fee / TVL?
For DLMM, 24hr fee are the trading fees earned in the last 24 hrs. This can vary quite a bit, so we show how much fees are earned in one day over the liquidity provided (TVL) in the pools. To extrapolate to a year, you would multiply by 365 days.
Is there a price feed / oracle used by DLMM?
There is no price feed used. How the pool price syncs to the market price is through trades and arbitrage. This only happens if there is liquidity in a range from the market price to the current pool price, and the liquidity is picked up by Jupiter aggregator for trading. We will place a warning for users when the market price is out of sync with the pool price.
How come there are only a few token pairs supported on DLMM?
DLMM is in beta and still undergoing audits. We'll open up more pools soon. If there are pairs you'd like to provide liquidity for, reach out to us and we’d be happy to help spin up the pools.
What is bin step?
Each bin represents a single price point, and the difference between 2 consecutive bins is the bin step. Bin steps are calculated based on the basis points set by the pool creator. Bin step is similar to tick size and a higher size means a larger jump from one price to the next.
For example, if the current price for SOL/USDC is $20 per SOL and the bin step is 25 basis points (0.25%), then the consecutive bins would be 20 x 1.0025 = 20.05, 20.05 * 1.0025 = 20.10 and so on.
Smaller bin step: Allows you to capture more volume, but, your max range per position is smaller. So a good rule of thumb is smaller steps for stable pairs and larger steps for more volatile pairs.
Larger bin step: Allows you to set a wider price range per position, but at the cost of less volume, since there's a less continuous price range (harder for liquidity to be picked up for swaps). But important for highly volatile pairs where price swings can be huge. Note: Currently the max # of bins per position is 69, so a larger bin step can be used if you need to widen your range.
Base Fee: The minimum fee charged per swap. Lower fee gets more volume but higher fee earns more per volume. Generally if you want a higher base fee, the higher the bin step. But a lower base fee than other DEXes might give more flexibility for dynamic fees to optimize for volume or fees given the market volatility. For more details on dynamic fees, please refer to this section.
What is binArray?
binArray is the program account created to store liquidity from the pool’s position.
binArray = Sum of the pool’s position. e.g. the positions of 4 different users.
If you happen to be the first to create the specific price bins in the pool, meaning no LPs have used those price bins before, you will need to pay the rent to create the binArray program account (that stores the bins) and this rent is unfortunately non-refundable. Meteora can't close that program account because other LPs may have liquidity in those bins. But once they are created no one else has to pay that rent again.
How do I calculate my impermanent loss on DLMM?
There is a precise formula to calculate the impermanent loss for a given start and end point based on the relative price changes between the assets in the pool.
We created a simple google sheet as a helpful tool to manage your IL on the DLMM. It is currently set up for checking a position with 69 bins and an equal distribution of liquidity across the bins. Your actual liquidity distribution may be very different and would change the IL calculation here. Additionally, your 24hr fee / TVL for your position may also be different.
How do I get notified if my token price goes out of range on DLMM?
Right now you can either use:
Dialect notifications on Meteora:
Set up your preferred alert channel (e.g. web app, Telegram, email) and receive alerts whenever your all DLMM positions in a pool go out of range, plus quickly view the affected liquidity pool.
or
Find the pool you are LPing in and set a notification for a price change that goes out of range of your liquidity.
Is there an introduction video for DLMM beginners?
Please watch these videos:
You can also watch our LP Army Jam Sessions or Boot Camp Recaps!