import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token'; import { PublicKey, TransactionInstruction } from '@solana/web3.js'; import { BASKETS_V3_PROGRAM_ID } from '../../constants'; import { SystemProgram } from '@solana/web3.js'; import { getAta, getBountyVaultPda, getGlobalConfigPda, getRebalanceIntentPda, getRentPayerPda } from '../pda'; const CREATE_AUCTION_DISCRIMINATOR = Buffer.from([50, 37, 7, 103, 80, 100, 162, 13]); export function createAuctionIx(params: { keeper: PublicKey, basket: PublicKey, bountyMint: PublicKey, }): TransactionInstruction { const { keeper, basket, bountyMint } = params; let bountyVault = getBountyVaultPda(); let bountyVaultAta = getAta(bountyMint, bountyVault); let rebalanceIntent = getRebalanceIntentPda(basket, basket); let rentPayerPda = getRentPayerPda(); let globalConfig = getGlobalConfigPda(); let keeperBountyATA = getAta(keeper, bountyMint); const data = CREATE_AUCTION_DISCRIMINATOR; const keys = [ { pubkey: keeper, isWritable: true, isSigner: true }, { pubkey: basket, isWritable: true, isSigner: false }, { pubkey: rebalanceIntent, isWritable: true, isSigner: false }, { pubkey: rentPayerPda, isWritable: true, isSigner: false }, { pubkey: globalConfig, isWritable: false, isSigner: false }, { pubkey: bountyMint, isWritable: false, isSigner: false }, { pubkey: keeperBountyATA, isWritable: true, isSigner: false }, { pubkey: bountyVault, isWritable: true, isSigner: false }, { pubkey: bountyVaultAta, isWritable: true, isSigner: false }, { pubkey: SystemProgram.programId, isWritable: false, isSigner: false }, { pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false }, { pubkey: TOKEN_2022_PROGRAM_ID, isWritable: false, isSigner: false }, { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isWritable: false, isSigner: false }, { pubkey: rebalanceIntent, isWritable: true, isSigner: false } ]; return new TransactionInstruction({ keys, programId: BASKETS_V3_PROGRAM_ID, data, }); }