Typescript
SPL Token com Web3.js

SPL Token com Web3.js

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.

Desabilita completamente transferências, aprovações e queimas, afetando apenas a conta específica que foi congelada

Thaw reabilita as operações de tokens em uma conta previamente congelada. Apenas a autoridade de freeze da mint pode descongelar contas.

Restaura a funcionalidade completa de uma conta congelada e só pode ser realizado pela autoridade de freeze da mint

Antes de podermos congelar e descongelar qualquer token, precisaremos já ter:

  • Inicializado uma conta Mint da qual detemos a freezeAuthority

  • Inicializado uma conta Token ou Associated Token que desejamos congelar ou descongelar

Instrução Raw

Usando apenas instruções "raw" sem nenhuma abstração, é assim que congelar um token ficaria:

ts
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:

ts
// 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():

ts
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():

ts
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`)
Blueshift © 2026Commit: 1b88646