Modifying Liquidity
Whirlpools provide two instructions - increase_liquidity
and decrease_liquidity
to allow users to modify their position's liquidity.
The SDK also provides quote functions (ex. increaseLiquidityQuoteByInputToken
,
decreaseLiquidityQuoteByLiquidity
) to help estimate the tokenIn/Out from the liquidity operation.
Using Whirlpool Client
Use the Position
class from the WhirlpoolClient
to fetch and manage your liquidity. Read below for more on the relationship between quote and the transaction.
The Manual Way
For each instruction, calculate the following values:
liquidityAmount - The total amount of liquidity you would like to deposit/withdraw into your position.
tokenMax A, B (increase_liquidity) - The maximum amount of token X to add to the position. Note the value here is shifted by the decimal places of the token.
tokenMin A, B (decrease_liquidity) - The minimum amount of token X to withdraw from the position. Note the value here is shifted by the decimal places of the token.
Getting a quote
The Typescript SDK provides several quote functions to help generate an estimate based on common user input values.
Increase Liquidity quote by input token amount
Given a desired amount of input token (A or B), you can use the quote utility function increaseLiquidityQuoteByInputTokenWithParams
to calculate the liquidityAmount and other tokenMax value required to deposit the desired amount of token into the position.
The quote amount will differ based on the current price (tick) and the desired tick boundaries for the position. The price environment may change from the time of quote to the actual processing of the increase_liquidity
ix. Use the slippage tolerance to adjust the quote values to balance your risk of ix failure and total tokens to deposit.
Decrease Liquidity quote by liquidity amount
Given the liquidity amount, use the decreaseLiquidityQuoteByLiquidityWithParams
util function to get an estimate on what's the minimum token A & B you can expect from the decrease_liquidity
instruction call.
Like increase_liquidity
, use the slippage tolerance to adjust the quote values to balance your risk of ix failure and total tokens to deposit.
Decrease Liquidity quote by input token amount
This quote is in development....
Other Parameters
whirlpool - PublicKey of the whirlpool the position is a part of
position - PublicKey of the position address. Derivable from
PDAUtil.getPosition
.positionTokenAccount - Associated token address of the position token on the user's wallet.
tokenOwnerAccount A, B - Associated token address of the tokenA,B on the user's wallet.
tokenVaults A, B - PublicKey of the token vaults for this
tickArrayLower, Upper - Lower & upper tick-array accounts that contains the tick indices for the lower, upper bound of the position
positionAuthority - The address that hosts the position token. This authority must sign the transaction.
Sample Code
Increase Liquidity example
Decrease Liquidity example
Common Errors
LiquidityZero
(0x177c) - Provided liquidity amount is zero.LiquidityTooHigh
(0x177d) - Provided liquidity exceeds u128::max.TokenMaxExceeded
(0x1781) - The required token to perform this operation exceeds the user defined amount inincrease_liquidity
.TokenMinSubceeded
(0x1782) - The required token to perform this operation subceeds the user defined amount indecrease_liquidity
.TickNotFound
(0x1779) - The provided tick array accounts do not contain the tick specified in the position.ConstraintRaw
(0x7d3) - TokenVault, TokenAccount mints does not match the values in the provided whirlpool.
Last updated