solana-token-extension-boost
Version:
SDK for Solana Token Extensions with wallet adapter support
115 lines (114 loc) • 5.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenFreezeExtension = void 0;
const web3_js_1 = require("@solana/web3.js");
const spl_token_1 = require("@solana/spl-token");
/**
* Class for managing token freeze and thaw functionality
* Designed to be compatible with wallet adapter in web environments
*/
class TokenFreezeExtension {
/**
* Create instruction to freeze a token account
* @param account - Token account address
* @param mint - Token mint address
* @param authority - Freeze authority address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Instruction to freeze the account
*/
static createFreezeAccountInstruction(account, mint, authority, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
return (0, spl_token_1.createFreezeAccountInstruction)(account, mint, authority, multiSigners, programId);
}
/**
* Create instruction to thaw a token account
* @param account - Token account address
* @param mint - Token mint address
* @param authority - Freeze authority address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Instruction to thaw the account
*/
static createThawAccountInstruction(account, mint, authority, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
return (0, spl_token_1.createThawAccountInstruction)(account, mint, authority, multiSigners, programId);
}
/**
* Create instruction to update the default account state of a token
* @param mint - Mint address
* @param accountState - New default state (frozen or initialized)
* @param freezeAuthority - Freeze authority address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Instruction to update the default state
*/
static createUpdateDefaultAccountStateInstruction(mint, accountState, freezeAuthority, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
return (0, spl_token_1.createUpdateDefaultAccountStateInstruction)(mint, accountState, freezeAuthority, multiSigners, programId);
}
/**
* Prepare a transaction to freeze a token account
* Wallet adapter compatible version
*
* @param account - Token account address
* @param mint - Token mint address
* @param authority - Freeze authority address
* @param feePayer - Transaction fee payer address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Configured transaction
*/
static prepareFreezeAccountTransaction(account, mint, authority, feePayer, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
const instruction = this.createFreezeAccountInstruction(account, mint, authority, multiSigners, programId);
const transaction = new web3_js_1.Transaction().add(instruction);
transaction.feePayer = feePayer;
return transaction;
}
/**
* Prepare a transaction to thaw a token account
* Wallet adapter compatible version
*
* @param account - Token account address
* @param mint - Token mint address
* @param authority - Freeze authority address
* @param feePayer - Transaction fee payer address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Configured transaction
*/
static prepareThawAccountTransaction(account, mint, authority, feePayer, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
const instruction = this.createThawAccountInstruction(account, mint, authority, multiSigners, programId);
const transaction = new web3_js_1.Transaction().add(instruction);
transaction.feePayer = feePayer;
return transaction;
}
/**
* Prepare a transaction to update the default account state of a token
* Wallet adapter compatible version
*
* @param mint - Token mint address
* @param accountState - New default state
* @param freezeAuthority - Freeze authority address
* @param feePayer - Transaction fee payer address
* @param multiSigners - List of signers if using multisig
* @param programId - Token Extension Program ID
* @returns Configured transaction
*/
static prepareUpdateDefaultAccountStateTransaction(mint, accountState, freezeAuthority, feePayer, multiSigners = [], programId = spl_token_1.TOKEN_2022_PROGRAM_ID) {
const instruction = this.createUpdateDefaultAccountStateInstruction(mint, accountState, freezeAuthority, multiSigners, programId);
const transaction = new web3_js_1.Transaction().add(instruction);
transaction.feePayer = feePayer;
return transaction;
}
/**
* Utility method to create a transaction from instructions
* @param instructions - Instructions to add to the transaction
* @param feePayer - Transaction fee payer
* @returns Configured transaction
*/
static buildTransaction(instructions, feePayer) {
const transaction = new web3_js_1.Transaction();
instructions.forEach(instruction => transaction.add(instruction));
transaction.feePayer = feePayer;
return transaction;
}
}
exports.TokenFreezeExtension = TokenFreezeExtension;