import BN from 'bn.js'; import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token'; import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js'; import { BASKETS_V3_PROGRAM_ID } from '../../constants'; import { getAta, getBountyVaultPda, getGlobalConfigPda } from '../pda'; const ADD_BOUNTY_DISCRIMINATOR = Buffer.from([84, 56, 167, 193, 17, 91, 42, 143,]); export function addBountyIx(params: { keeper: PublicKey; basket: PublicKey; bountyMint: PublicKey; amount: number; }): TransactionInstruction { const { keeper, basket, bountyMint, amount, } = params; let bountyVault = getBountyVaultPda(); let globalConfig = getGlobalConfigPda(); let keeperBountyAta = getAta(keeper, bountyMint); let bountyVaultAta = getAta(bountyVault, bountyMint); const data = Buffer.concat([ ADD_BOUNTY_DISCRIMINATOR, Buffer.from(new BN(amount).toArray("le", 8)), // u64 LE ]); const keys = [ { pubkey: keeper, isSigner: true, isWritable: true }, { pubkey: basket, isSigner: false, isWritable: true }, { pubkey: bountyMint, isSigner: false, isWritable: false }, { pubkey: keeperBountyAta, isSigner: false, isWritable: true }, { pubkey: bountyVault, isSigner: false, isWritable: true }, { pubkey: bountyVaultAta, isSigner: false, isWritable: true }, { pubkey: globalConfig, isSigner: false, isWritable: false }, { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, ]; return new TransactionInstruction({ keys, programId: BASKETS_V3_PROGRAM_ID, data, }); }