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');
}
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(),

View File

@ -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

View File

@ -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());
}
}