Think punching is working. Time for sleep.
This commit is contained in:
parent
58e3338957
commit
d8e096e3af
|
@ -21,6 +21,7 @@ import {
|
||||||
getFairLaunchLotteryBitmap,
|
getFairLaunchLotteryBitmap,
|
||||||
} from './helpers/accounts';
|
} from './helpers/accounts';
|
||||||
import { chunks, getMultipleAccounts, sleep } from './helpers/various';
|
import { chunks, getMultipleAccounts, sleep } from './helpers/various';
|
||||||
|
import { createAssociatedTokenAccountInstruction } from './helpers/instructions';
|
||||||
program.version('0.0.1');
|
program.version('0.0.1');
|
||||||
|
|
||||||
if (!fs.existsSync(CACHE_PATH)) {
|
if (!fs.existsSync(CACHE_PATH)) {
|
||||||
|
@ -585,6 +586,77 @@ program
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
program
|
||||||
|
.command('punch_ticket')
|
||||||
|
.option(
|
||||||
|
'-e, --env <string>',
|
||||||
|
'Solana cluster env name',
|
||||||
|
'devnet', //mainnet-beta, testnet, devnet
|
||||||
|
)
|
||||||
|
.option(
|
||||||
|
'-k, --keypair <path>',
|
||||||
|
`Solana wallet location`,
|
||||||
|
'--keypair not provided',
|
||||||
|
)
|
||||||
|
.option('-f, --fair-launch <string>', 'fair launch id')
|
||||||
|
.action(async (_, cmd) => {
|
||||||
|
const { env, keypair, fairLaunch } = cmd.opts();
|
||||||
|
|
||||||
|
const walletKeyPair = loadWalletKey(keypair);
|
||||||
|
const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env);
|
||||||
|
|
||||||
|
const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch);
|
||||||
|
const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch(
|
||||||
|
fairLaunchKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
const fairLaunchTicket = (
|
||||||
|
await getFairLaunchTicket(
|
||||||
|
//@ts-ignore
|
||||||
|
fairLaunchObj.tokenMint,
|
||||||
|
walletKeyPair.publicKey,
|
||||||
|
)
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
const fairLaunchLotteryBitmap = ( //@ts-ignore
|
||||||
|
await getFairLaunchLotteryBitmap(fairLaunchObj.tokenMint)
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
const buyerTokenAccount = (
|
||||||
|
await getAtaForMint(
|
||||||
|
//@ts-ignore
|
||||||
|
fairLaunchObj.tokenMint,
|
||||||
|
walletKeyPair.publicKey,
|
||||||
|
)
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
await anchorProgram.rpc.punchTicket({
|
||||||
|
accounts: {
|
||||||
|
fairLaunchTicket,
|
||||||
|
fairLaunch,
|
||||||
|
fairLaunchLotteryBitmap,
|
||||||
|
payer: walletKeyPair.publicKey,
|
||||||
|
buyerTokenAccount,
|
||||||
|
//@ts-ignore
|
||||||
|
tokenMint: fairLaunchObj.tokenMint,
|
||||||
|
tokenProgram: TOKEN_PROGRAM_ID,
|
||||||
|
},
|
||||||
|
instructions: [
|
||||||
|
createAssociatedTokenAccountInstruction(
|
||||||
|
buyerTokenAccount,
|
||||||
|
walletKeyPair.publicKey,
|
||||||
|
walletKeyPair.publicKey,
|
||||||
|
//@ts-ignore
|
||||||
|
fairLaunchObj.tokenMint,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`Punched ticket and placed token in new account ${buyerTokenAccount.toBase58()}.`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
program
|
program
|
||||||
.command('start_phase_three')
|
.command('start_phase_three')
|
||||||
.option(
|
.option(
|
||||||
|
|
|
@ -450,7 +450,10 @@ pub mod fair_launch {
|
||||||
fair_launch_ticket.state = FairLaunchTicketState::Withdrawn
|
fair_launch_ticket.state = FairLaunchTicketState::Withdrawn
|
||||||
}
|
}
|
||||||
|
|
||||||
adjust_counts(fair_launch, amount, Some(fair_launch_ticket.amount))?;
|
if clock.unix_timestamp <= fair_launch.data.phase_one_end {
|
||||||
|
// freeze counts after phase one ends...
|
||||||
|
adjust_counts(fair_launch, amount, Some(fair_launch_ticket.amount))?;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(treasury_mint) = fair_launch.treasury_mint {
|
if let Some(treasury_mint) = fair_launch.treasury_mint {
|
||||||
let treasury_mint_info = &ctx.remaining_accounts[0];
|
let treasury_mint_info = &ctx.remaining_accounts[0];
|
||||||
|
@ -598,10 +601,14 @@ pub mod fair_launch {
|
||||||
[FAIR_LAUNCH_LOTTERY_SIZE + index]
|
[FAIR_LAUNCH_LOTTERY_SIZE + index]
|
||||||
& mask;
|
& mask;
|
||||||
|
|
||||||
if is_winner != 1 {
|
if is_winner == 0 {
|
||||||
return Err(ErrorCode::DidNotWinLotteryCanOnlyWithdraw.into());
|
return Err(ErrorCode::DidNotWinLotteryCanOnlyWithdraw.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if fair_launch_ticket.amount < fair_launch.current_median {
|
||||||
|
return Err(ErrorCode::CannotPunchTicketWhenHavingPaidLessThanMedian.into());
|
||||||
|
}
|
||||||
|
|
||||||
// assert is an ATA owned by the buyer on the fair launch ticket, has no delegates, is a token account,
|
// assert is an ATA owned by the buyer on the fair launch ticket, has no delegates, is a token account,
|
||||||
// etc Since this is a permissionless endpoint (for cranks)
|
// etc Since this is a permissionless endpoint (for cranks)
|
||||||
assert_derivation(
|
assert_derivation(
|
||||||
|
@ -878,7 +885,7 @@ pub struct AdjustTicket<'info> {
|
||||||
pub struct PunchTicket<'info> {
|
pub struct PunchTicket<'info> {
|
||||||
#[account(mut, seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref(), fair_launch_ticket.buyer.as_ref()], bump=fair_launch_ticket.bump, has_one=fair_launch)]
|
#[account(mut, seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref(), fair_launch_ticket.buyer.as_ref()], bump=fair_launch_ticket.bump, has_one=fair_launch)]
|
||||||
fair_launch_ticket: ProgramAccount<'info, FairLaunchTicket>,
|
fair_launch_ticket: ProgramAccount<'info, FairLaunchTicket>,
|
||||||
#[account(seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref()], bump=fair_launch.bump, has_one=token_mint)]
|
#[account(mut, seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref()], bump=fair_launch.bump, has_one=token_mint)]
|
||||||
fair_launch: ProgramAccount<'info, FairLaunch>,
|
fair_launch: ProgramAccount<'info, FairLaunch>,
|
||||||
#[account(seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref(), LOTTERY.as_bytes()], bump=fair_launch_lottery_bitmap.bump)]
|
#[account(seeds=[PREFIX.as_bytes(), fair_launch.token_mint.as_ref(), LOTTERY.as_bytes()], bump=fair_launch_lottery_bitmap.bump)]
|
||||||
fair_launch_lottery_bitmap: ProgramAccount<'info, FairLaunchLotteryBitmap>,
|
fair_launch_lottery_bitmap: ProgramAccount<'info, FairLaunchLotteryBitmap>,
|
||||||
|
@ -886,7 +893,7 @@ pub struct PunchTicket<'info> {
|
||||||
payer: AccountInfo<'info>,
|
payer: AccountInfo<'info>,
|
||||||
#[account(mut)]
|
#[account(mut)]
|
||||||
buyer_token_account: AccountInfo<'info>,
|
buyer_token_account: AccountInfo<'info>,
|
||||||
#[account(seeds=[PREFIX.as_bytes(), fair_launch.authority.as_ref(), MINT.as_bytes(), fair_launch.data.uuid.as_bytes()], bump=fair_launch.token_mint_bump)]
|
#[account(mut, seeds=[PREFIX.as_bytes(), fair_launch.authority.as_ref(), MINT.as_bytes(), fair_launch.data.uuid.as_bytes()], bump=fair_launch.token_mint_bump)]
|
||||||
token_mint: AccountInfo<'info>,
|
token_mint: AccountInfo<'info>,
|
||||||
#[account(address = spl_token::id())]
|
#[account(address = spl_token::id())]
|
||||||
token_program: AccountInfo<'info>,
|
token_program: AccountInfo<'info>,
|
||||||
|
@ -1112,4 +1119,6 @@ pub enum ErrorCode {
|
||||||
CannotUpdateFairLaunchDataOnceInProgress,
|
CannotUpdateFairLaunchDataOnceInProgress,
|
||||||
#[msg("Not able to adjust tickets between phase two and three")]
|
#[msg("Not able to adjust tickets between phase two and three")]
|
||||||
PhaseTwoEnded,
|
PhaseTwoEnded,
|
||||||
|
#[msg("Cannot punch ticket when having paid less than median.")]
|
||||||
|
CannotPunchTicketWhenHavingPaidLessThanMedian,
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue