From 1c6c46400e0ec802383fc382d9f35559cf3a1604 Mon Sep 17 00:00:00 2001 From: Jordan Prince Date: Fri, 17 Sep 2021 16:28:57 -0500 Subject: [PATCH] Fix for when median is not divisible by tick --- js/packages/fair-launch/src/fair-launch.ts | 21 ++++++++++++--------- rust/fair-launch/src/lib.rs | 4 ++-- rust/fair-launch/src/utils.rs | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/js/packages/fair-launch/src/fair-launch.ts b/js/packages/fair-launch/src/fair-launch.ts index 8dc8655..6320e38 100644 --- a/js/packages/fair-launch/src/fair-launch.ts +++ b/js/packages/fair-launch/src/fair-launch.ts @@ -110,9 +110,8 @@ export const getFairLaunchState = async ( console.log('No ticket'); } - const fairLaunchLotteryBitmap = ( //@ts-ignore - await getFairLaunchLotteryBitmap(state.tokenMint) - )[0]; + const fairLaunchLotteryBitmap = //@ts-ignore + (await getFairLaunchLotteryBitmap(state.tokenMint))[0]; return { id: fairLaunchId, @@ -142,9 +141,8 @@ export const punchTicket = async ( ) )[0]; - const fairLaunchLotteryBitmap = ( //@ts-ignore - await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint) - )[0]; + const fairLaunchLotteryBitmap = //@ts-ignore + (await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint))[0]; const buyerTokenAccount = ( await getAtaForMint( @@ -155,7 +153,11 @@ export const punchTicket = async ( )[0]; if (ticket.amount.toNumber() > fairLaunch.state.currentMedian.toNumber()) { - console.log('Adjusting down...'); + console.log( + 'Adjusting down...', + ticket.amount.toNumber(), + fairLaunch.state.currentMedian.toNumber(), + ); const { remainingAccounts, instructions, signers } = await getSetupForTicketing( fairLaunch.program, @@ -390,8 +392,9 @@ export const purchaseTicket = async ( ); if (ticket) { - const fairLaunchLotteryBitmap = //@ts-ignore - (await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint))[0]; + const fairLaunchLotteryBitmap = ( //@ts-ignore + await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint) + )[0]; console.log( 'Anchor wallet', anchorWallet.publicKey.toBase58(), diff --git a/rust/fair-launch/src/lib.rs b/rust/fair-launch/src/lib.rs index 1f4c914..39023ce 100644 --- a/rust/fair-launch/src/lib.rs +++ b/rust/fair-launch/src/lib.rs @@ -269,7 +269,7 @@ pub mod fair_launch { return Err(ErrorCode::CannotBuyTicketsOutsidePhaseOne.into()); } - assert_valid_amount(&fair_launch.data, amount)?; + assert_valid_amount(&fair_launch, amount)?; fair_launch_ticket.fair_launch = fair_launch.key(); fair_launch_ticket.buyer = *buyer.key; @@ -465,7 +465,7 @@ pub mod fair_launch { } if amount != 0 { - assert_valid_amount(&fair_launch.data, amount)?; + assert_valid_amount(&fair_launch, amount)?; } else { // going from not zero to zero fair_launch.number_tickets_dropped = fair_launch diff --git a/rust/fair-launch/src/utils.rs b/rust/fair-launch/src/utils.rs index cca54d3..b8f32c4 100644 --- a/rust/fair-launch/src/utils.rs +++ b/rust/fair-launch/src/utils.rs @@ -352,13 +352,13 @@ pub fn get_expected_capital_alotment_size( Ok(divided as u64) } -pub fn assert_valid_amount(data: &FairLaunchData, amount: u64) -> ProgramResult { - if amount < data.price_range_start || amount > data.price_range_end { +pub fn assert_valid_amount(fair_launch: &FairLaunch, amount: u64) -> ProgramResult { + if amount < fair_launch.data.price_range_start || amount > fair_launch.data.price_range_end { return Err(ErrorCode::InvalidPurchaseAmount.into()); } - if let Some(val) = amount.checked_rem(data.tick_size) { - if val > 0 { + if let Some(val) = amount.checked_rem(fair_launch.data.tick_size) { + if val > 0 && amount != fair_launch.current_median { return Err(ErrorCode::InvalidPurchaseAmount.into()); } }