Instruções de Freeze e Thaw
Freeze impede todas as operações de tokens em uma conta até que ela seja descongelada (thawed). Apenas a autoridade de freeze da mint pode realizar esta operação.
Thaw reabilita as operações de tokens em uma conta previamente congelada. Apenas a autoridade de freeze da mint pode descongelar contas.
Antes de podermos congelar e descongelar qualquer token, precisaremos já ter:
Inicializado uma conta
Mintda qual detemos afreezeAuthorityInicializado uma conta
TokenouAssociated Tokenque desejamos congelar ou descongelar
Instrução Raw
Usando apenas instruções "raw" sem nenhuma abstração, é assim que congelar um token ficaria:
const keypair = Keypair.generate();
const tokenAccount = await getAssociatedTokenAddress(
mint.publicKey,
keypair.publicKey,
);
// Criar instrução de criação de ATA
const createAtaInstruction = createAssociatedTokenAccountIdempotentInstruction(
keypair.publicKey, // pagador
tokenAccount, // endereço da conta associated token
destination.publicKey, // dono
mint.publicKey, // mint
);
// Congelar um ATA
const freezeInstruction = createFreezeAccountInstruction(
tokenAccount // conta
mint // mint
keypair.publickey // autoridade
);
const transaction = new Transaction().add(
createAtaInstruction,
freezeInstruction,
);
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
console.log(`Contas de token criadas e congeladas! Veja sua TX aqui: https://explorer.solana.com/tx/${signature}?cluster=devnet`);Usando apenas instruções "raw" sem nenhuma abstração, é assim que revogar um token ficaria:
// Descongelar um ATA
const thawInstruction = createThawAccountInstruction(
tokenAccount // conta
mint // mint
keypair.publickey // autoridade
);
const transaction = new Transaction().add(thawInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
console.log(`Conta de token descongelada! Veja sua TX aqui: https://explorer.solana.com/tx/${signature}?cluster=devnet`);Instrução Abstraída
É assim que as mesmas instruções ficariam abstraídas com a instrução freezeAccount():
const tokenAccount = Keypair.generate();
const ata = await getOrCreateAssociatedTokenAccount(
connection,
keypair,
mint,
tokenAccount.publicKey
);
console.log(`Este é o seu ATA: ${ata.address}!`)
let tx = await freezeAccount(
connection,
keypair,
tokenAccount // conta
mint // mint
keypair.publickey // autoridade
);
console.log(`Conta de Token congelada com sucesso! Transação aqui: https://explorer.solana.com/tx/${tx}?cluster=devnet`)É assim que as mesmas instruções ficariam abstraídas com a instrução thawAccount():
let tx = await thawAccount(
connection,
keypair,
tokenAccount // conta
mint // mint
keypair.publickey // autoridade
);
console.log(`Conta de Token descongelada com sucesso! Transação aqui: https://explorer.solana.com/tx/${tx}?cluster=devnet`)