Add liquidity
Function
clmmpool/sources/pool.move
/// Add liquidity to an existing position in the specified pool by fixing one of the coin types.
///
/// # Arguments
///
/// _ `config` - A reference to the `GlobalConfig` object.
/// _ `pool` - A mutable reference to the `Pool` object.
/// _ `position_nft` - A mutable reference to the `Position` object representing the existing position to add liquidity to.
/// _ `amount` - The amount of the fixed coin type to add to the position.
/// _ `fix_amount_a` - A boolean indicating whether to fix the amount of `CoinTypeA` or `CoinTypeB`.
/// _ `clock` - A reference to the `Clock` object used to determine the current time.
///
/// # Generic Type Parameters
///
/// _ `CoinTypeA` - The type of the first coin in the pool.
/// _ `CoinTypeB` - The type of the second coin in the pool.
///
/// # Returns
///
/// The `AddLiquidityReceipt` object representing the results of the liquidity addition.
public fun add_liquidity_fix_coin<CoinTypeA, CoinTypeB>(
config: &GlobalConfig,
pool: &mut Pool<CoinTypeA, CoinTypeB>,
position_nft: &mut Position,
amount: u64,
fix_amount_a: bool,
clock: &Clock
): AddLiquidityReceipt<CoinTypeA, CoinTypeB> {}
Example
1. Add liquidity with both coins
public entry fun add_liquidity_with_all<CoinTypeA, CoinTypeB>(
config: &GlobalConfig,
pool: &mut Pool<CoinTypeA, CoinTypeB>,
position_nft: &mut Position,
coins_a: vector<Coin<CoinTypeA>>,
coins_b: vector<Coin<CoinTypeB>>,
amount_limit_a: u64,
amount_limit_b: u64,
delta_liquidity: u128,
clock: &Clock,
ctx: &mut TxContext,
) {
let receipt = pool::add_liquidity<CoinTypeA, CoinTypeB>(
config,
pool,
position_nft,
delta_liquidity,
clock
);
repay_add_liquidity(config, pool, receipt, coins_a, coins_b, amount_limit_a, amount_limit_b, ctx);
}
2. Add liquidity with coin_a
public entry fun add_liquidity_only_a<CoinTypeA, CoinTypeB>(
config: &GlobalConfig,
pool: &mut Pool<CoinTypeA, CoinTypeB>,
position_nft: &mut Position,
coins_a: vector<Coin<CoinTypeA>>,
amount_limit: u64,
delta_liquidity: u128,
clock: &Clock,
ctx: &mut TxContext,
) {
let receipt = pool::add_liquidity<CoinTypeA, CoinTypeB>(
config,
pool,
position_nft,
delta_liquidity,
clock
);
repay_add_liquidity(config, pool, receipt, coins_a, vector::empty(), amount_limit, 0, ctx);
}
3. Add liquidity with coin_b only
public entry fun add_liquidity_only_b<CoinTypeA, CoinTypeB>(
config: &GlobalConfig,
pool: &mut Pool<CoinTypeA, CoinTypeB>,
position_nft: &mut Position,
coins_b: vector<Coin<CoinTypeB>>,
amount_limit: u64,
delta_liquidity: u128,
clock: &Clock,
ctx: &mut TxContext,
) {
let receipt = pool::add_liquidity<CoinTypeA, CoinTypeB>(
config,
pool,
position_nft,
delta_liquidity,
clock
);
repay_add_liquidity(config, pool, receipt, vector::empty(), coins_b, 0, amount_limit, ctx);
}
Last updated