Typescript
SPL токен з Web3.js

SPL токен з Web3.js

Інструкції з заморожування та розморожування

Заморожування запобігає всім операціям з токенами на рахунку, доки він не буде розморожений. Лише орган заморожування емітента може виконувати цю операцію.

Повністю вимикає перекази, схвалення та спалювання, і впливає лише на конкретний заморожений рахунок

Розморожування повторно вмикає операції з токенами на раніше замороженому рахунку. Лише орган заморожування емітента може розморожувати рахунки.

Відновлює повну функціональність замороженого рахунку і може виконуватися лише органом заморожування емітента

Перш ніж ми зможемо заморозити та розморозити будь-який токен, нам потрібно вже мати:

  • Ініціалізований рахунок Mint, для якого ми маємо freezeAuthority
  • Ініціалізований рахунок Token або рахунок Associated Token, який ми хочемо заморозити або розморозити

Raw Instruction

Використовуючи лише "сиру" інструкцію без будь-якої абстракції, заморожування токена виглядатиме так:

ts
const tokenAccount = Keypair.generate();
 
const tokenAccount = await getAssociatedTokenAddress(
    mint.publicKey,
    tokenAccount.publicKey,
);
 
// Create ATA creation instruction
const createAtaInstruction = createAssociatedTokenAccountIdempotentInstruction(
    keypair.publicKey, // payer
    tokenAccount, // associated token account address
    destination.publicKey, // owner
    mint.publicKey, // mint
);
 
// Freeze an ATA 
const freezeInstruction = createFreezeAccountInstruction(
    tokenAccount // account
    mint // mint
    keypair.publickey // authority
);
 
const transaction = new Transaction().add(
    createAtaInstruction,
    freezeInstruction,
);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
 
console.log(`Token accounts created and frozen! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);

Використовуючи лише "сиру" інструкцію без будь-якої абстракції, відкликання токена виглядатиме так:

ts
// Thaw an ATA 
const thawInstruction = createThawAccountInstruction(
    tokenAccount // account
    mint // mint
    keypair.publickey // authority
);
 
const transaction = new Transaction().add(thawInstruction);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
 
console.log(`Token account thawed! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);

Abstracted Instruction

Ось як ті самі інструкції виглядатимуть з абстракцією за допомогою інструкції freezeAccount():

ts
const tokenAccount = Keypair.generate();
 
const ata = await getOrCreateAssociatedTokenAccount(
    connection,
    keypair,
    mint,
    tokenAccount.publicKey
);
 
console.log(`This is your ATA: ${ata.address}!`)
  
let tx = await freezeAccount(
    connection,
    keypair,
    tokenAccount // account
    mint // mint
    keypair.publickey // authority
);
 
console.log(`Token Account succesfully Frozen!. Transaction Here: https://explorer.solana.com/tx/${tx}?cluster=devnet`)

Ось як ті самі інструкції виглядатимуть з абстракцією за допомогою інструкції thawAccount():

ts
let tx = await thawAccount(
    connection,
    keypair,
    tokenAccount // account
    mint // mint
    keypair.publickey // authority
);
 
console.log(`Token Account succesfully Thawed!. Transaction Here: https://explorer.solana.com/tx/${tx}?cluster=devnet`)
Blueshift © 2025Commit: 6d01265
Blueshift | SPL токен з Web3.js | Заморожування та розморожування