Fix for when median is not divisible by tick

This commit is contained in:
Jordan Prince 2021-09-17 16:28:57 -05:00
parent dc167a92bb
commit 1c6c46400e
3 changed files with 18 additions and 15 deletions

View File

@ -110,9 +110,8 @@ export const getFairLaunchState = async (
console.log('No ticket'); console.log('No ticket');
} }
const fairLaunchLotteryBitmap = ( //@ts-ignore const fairLaunchLotteryBitmap = //@ts-ignore
await getFairLaunchLotteryBitmap(state.tokenMint) (await getFairLaunchLotteryBitmap(state.tokenMint))[0];
)[0];
return { return {
id: fairLaunchId, id: fairLaunchId,
@ -142,9 +141,8 @@ export const punchTicket = async (
) )
)[0]; )[0];
const fairLaunchLotteryBitmap = ( //@ts-ignore const fairLaunchLotteryBitmap = //@ts-ignore
await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint) (await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint))[0];
)[0];
const buyerTokenAccount = ( const buyerTokenAccount = (
await getAtaForMint( await getAtaForMint(
@ -155,7 +153,11 @@ export const punchTicket = async (
)[0]; )[0];
if (ticket.amount.toNumber() > fairLaunch.state.currentMedian.toNumber()) { 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 } = const { remainingAccounts, instructions, signers } =
await getSetupForTicketing( await getSetupForTicketing(
fairLaunch.program, fairLaunch.program,
@ -390,8 +392,9 @@ export const purchaseTicket = async (
); );
if (ticket) { if (ticket) {
const fairLaunchLotteryBitmap = //@ts-ignore const fairLaunchLotteryBitmap = ( //@ts-ignore
(await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint))[0]; await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint)
)[0];
console.log( console.log(
'Anchor wallet', 'Anchor wallet',
anchorWallet.publicKey.toBase58(), anchorWallet.publicKey.toBase58(),

View File

@ -269,7 +269,7 @@ pub mod fair_launch {
return Err(ErrorCode::CannotBuyTicketsOutsidePhaseOne.into()); 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.fair_launch = fair_launch.key();
fair_launch_ticket.buyer = *buyer.key; fair_launch_ticket.buyer = *buyer.key;
@ -465,7 +465,7 @@ pub mod fair_launch {
} }
if amount != 0 { if amount != 0 {
assert_valid_amount(&fair_launch.data, amount)?; assert_valid_amount(&fair_launch, amount)?;
} else { } else {
// going from not zero to zero // going from not zero to zero
fair_launch.number_tickets_dropped = fair_launch fair_launch.number_tickets_dropped = fair_launch

View File

@ -352,13 +352,13 @@ pub fn get_expected_capital_alotment_size(
Ok(divided as u64) Ok(divided as u64)
} }
pub fn assert_valid_amount(data: &FairLaunchData, amount: u64) -> ProgramResult { pub fn assert_valid_amount(fair_launch: &FairLaunch, amount: u64) -> ProgramResult {
if amount < data.price_range_start || amount > data.price_range_end { if amount < fair_launch.data.price_range_start || amount > fair_launch.data.price_range_end {
return Err(ErrorCode::InvalidPurchaseAmount.into()); return Err(ErrorCode::InvalidPurchaseAmount.into());
} }
if let Some(val) = amount.checked_rem(data.tick_size) { if let Some(val) = amount.checked_rem(fair_launch.data.tick_size) {
if val > 0 { if val > 0 && amount != fair_launch.current_median {
return Err(ErrorCode::InvalidPurchaseAmount.into()); return Err(ErrorCode::InvalidPurchaseAmount.into());
} }
} }