41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import type { PublicKey } from '@solana/web3.js';
|
|
import { SystemProgram, SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js';
|
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '../constants.js';
|
|
|
|
/**
|
|
* Construct an AssociatedTokenAccount instruction
|
|
*
|
|
* @param payer Payer of the initialization fees
|
|
* @param associatedToken New associated token account
|
|
* @param owner Owner of the new account
|
|
* @param mint Token mint account
|
|
* @param programId SPL Token program account
|
|
* @param associatedTokenProgramId SPL Associated Token program account
|
|
*
|
|
* @return Instruction to add to a transaction
|
|
*/
|
|
export function createAssociatedTokenAccountInstruction(
|
|
payer: PublicKey,
|
|
associatedToken: PublicKey,
|
|
owner: PublicKey,
|
|
mint: PublicKey,
|
|
programId = TOKEN_PROGRAM_ID,
|
|
associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID
|
|
): TransactionInstruction {
|
|
const keys = [
|
|
{ pubkey: payer, isSigner: true, isWritable: true },
|
|
{ pubkey: associatedToken, isSigner: false, isWritable: true },
|
|
{ pubkey: owner, isSigner: false, isWritable: false },
|
|
{ pubkey: mint, isSigner: false, isWritable: false },
|
|
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
{ pubkey: programId, isSigner: false, isWritable: false },
|
|
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
|
];
|
|
|
|
return new TransactionInstruction({
|
|
keys,
|
|
programId: associatedTokenProgramId,
|
|
data: Buffer.alloc(0),
|
|
});
|
|
}
|