From 59269f50b371805eb0e43a0e0e699097bf49eff8 Mon Sep 17 00:00:00 2001 From: none00y Date: Wed, 21 Aug 2024 15:38:21 +0200 Subject: [PATCH] adjust position validation and burn test --- .../programs/protocol/src/contexts/burn.rs | 15 +------- protocol/tests/burn.test.ts | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/protocol/programs/protocol/src/contexts/burn.rs b/protocol/programs/protocol/src/contexts/burn.rs index 051145e..48e4891 100644 --- a/protocol/programs/protocol/src/contexts/burn.rs +++ b/protocol/programs/protocol/src/contexts/burn.rs @@ -1,7 +1,7 @@ use std::cell::RefMut; use crate::math::{ - calculate_amount_delta, compute_lp_share_change, get_max_tick, get_min_tick, + calculate_amount_delta, compute_lp_share_change, LiquidityChangeResult, }; use crate::states::{DerivedAccountIdentifier, LpPool, State, LP_TOKEN_IDENT}; @@ -285,19 +285,8 @@ impl<'info> BurnLpTokenCtx<'info> { pub fn validate_position(&self) -> Result<()> { let lp_pool = &self.lp_pool.load()?; - if lp_pool.invariant_position != Pubkey::default() { - let upper_tick_index = get_max_tick(lp_pool.tick_spacing); - let lower_tick_index = get_min_tick(lp_pool.tick_spacing); - let position = try_from!(AccountLoader::, &self.position)?; - require_eq!(position.load()?.upper_tick_index, upper_tick_index); - require_eq!(position.load()?.lower_tick_index, lower_tick_index); + require_keys_eq!(lp_pool.invariant_position, self.position.key()); - require_keys_eq!(self.position.key(), self.last_position.key()); - let owner = self.program_authority.key(); - let seeds = [b"positionv1", owner.as_ref(), &0i32.to_le_bytes()]; - let (pubkey, _bump) = Pubkey::find_program_address(&seeds, &invariant::ID); - require_keys_eq!(self.last_position.key(), pubkey); - } Ok(()) } diff --git a/protocol/tests/burn.test.ts b/protocol/tests/burn.test.ts index 42fe001..5d2d1a7 100644 --- a/protocol/tests/burn.test.ts +++ b/protocol/tests/burn.test.ts @@ -213,7 +213,7 @@ describe("burn lp token", () => { const { positionAddress: lastPositionAddress2 } = await market.getPositionAddress(protocol.programAuthority, 0); - const liquidityDelta2 = new BN(49000747); + accountLp = await getOrCreateAssociatedTokenAccount( connection, owner, @@ -226,10 +226,44 @@ describe("burn lp token", () => { ASSOCIATED_TOKEN_PROGRAM_ID ); assert.equal(accountLp.amount, 23n); + await protocol.burnLpToken( + { + liquidityDelta: new BN(46000747), + pair, + index: positionId, + invProgram: INVARIANT_ADDRESS, + invState: stateAddress, + position: positionAddress, + lastPosition: lastPositionAddress2, + pool: poolAddress, + positionList: positionListAddress, + lowerTick: lowerTickAddress, + upperTick: upperTickAddress, + tickmap, + accountX: userTokenXAccount.address, + accountY: userTokenYAccount.address, + invReserveX: tokenXReserve, + invReserveY: tokenYReserve, + invProgramAuthority: market.programAuthority, + }, + owner + ); + accountLp = await getOrCreateAssociatedTokenAccount( + connection, + owner, + tokenLp, + owner.publicKey, + undefined, + undefined, + undefined, + TOKEN_2022_PROGRAM_ID, + ASSOCIATED_TOKEN_PROGRAM_ID + ); + assert.equal(accountLp.amount, 1n); await protocol.burnLpToken( { - liquidityDelta: liquidityDelta2, + liquidityDelta: new BN(2000030), pair, index: positionId, invProgram: INVARIANT_ADDRESS,