Instructions Freeze et Thaw
Freeze
empêche toutes les opérations liées aux jetons sur un compte jusqu'à ce qu'il soit débloqué. Seule l'autorité de gel du mint peut effectuer cette opération.
Thaw
réactive les opérations liées aux jetons sur un compte précédemment gelé. Seule l'autorité de gel du mint peut débloquer des comptes.
Avant de pouvoir geler et débloquer un jeton, nous devons déjà avoir :
- Initialisé un compte de
Mint
pour lequel nous détenons lafreezeAuthority
- Initialisé un compte de
Token
ouAssociated Token
que nous voulons geler ou débloquer
Instruction Brute
En utilisant uniquement une instruction "brute" sans aucune abstraction, voici à quoi ressemble le gel d'un jeton :
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`);
En utilisant uniquement une instruction "brute" sans aucune abstraction, voici à quoi ressemble le déblocage d'un jeton :
// 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`);
Instruction Abstraite
Voici à quoi ressemble la même instruction si elle est abstraite à l'aide de l'instruction freezeAccount()
:
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`)
Voici à quoi ressemble la même instruction si elle est abstraite à l'aide de l'instruction thawAccount()
:
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`)