Typescript
Token2022 з Web3.js

Token2022 з Web3.js

Розширення Mint Close Authority

Розширення MintCloseAuthority є розширенням Mint, яке дозволяє власнику закрити та отримати орендну плату з рахунку Mint, який має поточний запас 0.

Це розширення корисне для очищення невикористаних мінтів та повернення SOL, який був використаний для оплати звільнення рахунку від оренди. Мінт можна закрити лише тоді, коли в обігу немає токенів.

Ініціалізація рахунку Mint

Щоб ініціалізувати розширення MintCloseAuthority на рахунку Mint, нам знадобиться функція initializeMintCloseAuthority().

Ось як створити мінт з розширенням Mint Close:

ts
import {
    Keypair,
    SystemProgram,
    Transaction,
    sendAndConfirmTransaction,
} from '@solana/web3.js';
import {
    createInitializeMintInstruction,
    createInitializeMintCloseAuthorityInstruction,
    getMintLen,
    ExtensionType,
    TOKEN_2022_PROGRAM_ID,
} from '@solana/spl-token';
 
const mint = Keypair.generate();
 
// Calculate the size needed for a Mint account with Mint Close Authority extension
const mintLen = getMintLen([ExtensionType.MintCloseAuthority]);
 
// Calculate minimum lamports required for rent exemption
const lamports = await connection.getMinimumBalanceForRentExemption(mintLen);
 
// Create the account with the correct size and owner
const createAccountInstruction = SystemProgram.createAccount({
    fromPubkey: keypair.publicKey,
    newAccountPubkey: mint.publicKey,
    space: mintLen,
    lamports,
    programId: TOKEN_2022_PROGRAM_ID,
});
 
// Initialize the Mint Close Authority extension
const initializeMintCloseAuthority = createInitializeMintCloseAuthorityInstruction(
    mint.publicKey,
    keypair.publicKey,
    TOKEN_2022_PROGRAM_ID,
);
 
// Initialize the mint itself
const initializeMintInstruction = createInitializeMintInstruction(
    mint.publicKey,
    6,
    keypair.publicKey,
    null,
    TOKEN_2022_PROGRAM_ID,
);
 
// Combine all instructions in the correct order
const transaction = new Transaction().add(
    createAccountInstruction,
    initializeMintCloseAuthority,
    initializeMintInstruction,
);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair, mint]);
 
console.log(`Mint created! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);

Закриття рахунку Mint

Якщо рахунок Mint має запас нуль, CloseMint Authority може повернути орендну плату за цей рахунок, використовуючи інструкцію closeAccount таким чином:

ts
const closeMintInstruction = createCloseAccountInstruction(
    mint.publicKey,
    keypair.publicKey,
    keypair.publicKey,
    [],
    TOKEN_2022_PROGRAM_ID,
);
 
const transaction = new Transaction().add(closeMintInstruction);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair], {skipPreflight: false});
 
console.log(`Mint closed! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);
Blueshift © 2025Commit: 6d01265
Blueshift | Token2022 з Web3.js | Розширення повноважень закриття емісії