Instruksi Freeze dan Thaw
Freeze mencegah semua operasi token pada akun sampai di-thaw. Hanya freeze authority dari mint yang dapat melakukan operasi ini.
Thaw mengaktifkan kembali operasi token pada akun yang sebelumnya dibekukan. Hanya freeze authority dari mint yang dapat men-thaw akun.
Sebelum kita dapat membekukan dan mencairkan token apa pun, kita perlu sudah memiliki:
- Akun
Mint
yang telah diinisialisasi di mana kita memegangfreezeAuthority
- Akun
Token
atau akunAssociated Token
yang telah diinisialisasi yang ingin kita bekukan atau cairkan
Raw Instruction
Dengan menggunakan instruksi "raw" tanpa abstraksi apa pun, beginilah cara membekukan token:
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`);
Dengan menggunakan instruksi "raw" tanpa abstraksi apa pun, beginilah cara mencabut token:
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
Beginilah instruksi yang sama akan terlihat jika diabstraksikan dengan instruksi 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`)
Beginilah instruksi yang sama akan terlihat jika diabstraksikan dengan instruksi 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`)