Home/Wiki/Tópicos Técnicos Avançados: Token-2022, PDA, Multisig e Erros

Tópicos Técnicos Avançados: Token-2022, PDA, Multisig e Erros

Guia técnico avançado cobrindo falhas de transação, especificidades do Token-2022, gerenciamento de contas PDA, integração com hardware wallets e interpretação de códigos de erro.

#Por que transações falham: razões técnicas?

Mesmo transações corretamente formadas podem não entrar em um bloco. Entender as razões ajuda a evitar perda de tempo e gas.

Arquitetura de Transações na Solana

Cada transação na Solana tem limites rígidos e restrições de tempo:

  • Tamanho máximo: 1232 bytes (MTU de pacote de rede)
  • Limite de Compute Units: 1.400.000 CU por transação
  • Tempo de vida: 150 slots (~60-90 segundos)
  • Validade do Blockhash: Válido apenas para blocos recentes

Transaction Expired: Erro Mais Comum

O que aconteceu: Transação contém referência a blockhash recente (identificador de bloco). Se mais de 150 slots passaram enquanto aguardava na fila, a rede rejeita a transação como desatualizada.

Processo técnico:

  • Você forma transação com blockhash do bloco N
  • Transação aguarda inclusão em bloco
  • Rede atinge bloco N+150
  • Seu blockhash não está mais na lista "recent blockhashes"
  • Validadores rejeitam transação com erro "Blockhash not found"

Por que isso acontece:

Congestionamento de rede: Durante mints populares de NFT ou hype de token, rede recebe milhões de transações. Priority Fee determina ordem.

Priority Fee baixo: Se você definiu taxa mínima, validadores priorizarão transações com pagamento maior.

Problemas de RPC: Nós RPC públicos podem ser lentos ou perder conexão.

Solução:

  • ✅ Aumente Priority Fee para "Medium" ou "High" nas configurações da carteira
  • ✅ Tente novamente após 1-2 minutos (blockhash atualiza automaticamente)
  • ✅ Use endpoints RPC privados (Helius, Triton) para estabilidade

Importante: Transação expirada não deduz taxa. Seus fundos estão seguros.

Account State Changed: Conflito de Dados

O que aconteceu: Entre formação da transação e execução, estado da conta mudou.

Cenários típicos:

Cenário 1: Recarga durante cleanup

  • Scanner determinou: conta vazia, saldo = 0
  • Você forma transação CloseAccount
  • Alguém envia 1 token para esta conta
  • Transação tenta fechar conta com saldo > 0
  • Erro: "Account has non-zero balance"

Cenário 2: Race condition com outra transação

  • Você enviou swap de token A na DEX
  • Simultaneamente enviou transação de fechamento de conta do token A
  • Ambas transações tentam modificar mesma conta
  • Uma passa, segunda é rejeitada

Solução:

  • ✅ Execute novo escaneamento - dados atualizarão
  • ✅ Use ferramentas com simulação pre-flight (verificação antes de envio)
  • ✅ Evite operações simultâneas com um token

Compute Budget Exceeded: Limite de Computação Excedido

O que aconteceu: Transação tentou executar operações muito complexas, excedendo limite de 1.4M Compute Units.

Causas:

  • Muitas instruções no pacote: Tentativa de fechar 30-40 contas de uma vez
  • Smart contracts complexos: Alguns Token-2022 com extensões requerem mais computação
  • Chamadas de programa aninhadas: Programa A chama programa B, que chama C

Solução:

  • ✅ Reduza número de contas no pacote (feche 15-20 em vez de 25-30)
  • ✅ Use ferramentas que otimizam automaticamente tamanhos de pacote
  • ✅ Adicione instrução ComputeBudgetProgram.setComputeUnitLimit() para aumentar limite

Detalhe técnico: Você pode solicitar até 1.400.000 CU, mas isso requer Priority Fee proporcionalmente maior:

Priority Fee = CU solicitadas × Preço por CU

Insufficient Lamports: Fundos Insuficientes

O que aconteceu: SOL insuficiente no saldo para executar operação.

Causas não óbvias:

Mínimo rent-exempt: Se você tentar transferir todo SOL mas tem contas vazias abertas, carteira deve preservar mínimo para cobrir rent de todas as contas.

Mudanças dinâmicas de gas: Durante congestionamento, Priority Fee pode crescer 10-100x. Transação formada com cálculo de 0.000005 SOL de gas pode requerer 0.0005 SOL.

Múltiplas transações: Você enviou 5 transações seguidas, cada uma reserva gas. Última não passa devido a fundos livres insuficientes.

Solução:

  • ✅ Sempre mantenha mínimo de 0.01-0.02 SOL no saldo
  • ✅ Use modo "Advanced" na carteira para controlar reserva de gas
  • ✅ Envie transações sequencialmente, aguardando confirmação

#Como funciona o Token-2022 e como recuperar rent dele?

Token Extensions Program (Token-2022) é a evolução do SPL Token clássico, lançado em 2023.

Principais Diferenças do SPL Token

SPL Token (clássico):

  • Program ID: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
  • Tamanho fixo: 165 bytes
  • Funcionalidade básica: transfer, mint, burn, approve

Token-2022:

  • Program ID: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  • Tamanho variável: 165-500+ bytes (depende de extensões)
  • Funcionalidade estendida: 16+ capacidades adicionais

Principais Extensões

Transfer Fee Extension:

Permite ao criador do token cobrar taxa em cada transferência.

Exemplo:

Transferir 100 tokens Taxa: 2% = 2 tokens Destinatário recebe: 98 tokens Criador recebe: 2 tokens de taxa

Impacto na recuperação de rent: Contas com Transfer Fee ocupam mais espaço → rent aumenta para ~0.0025 SOL.

Permanent Delegate:

Criador do token designa endereço que pode transferir tokens de qualquer carteira sem consentimento do proprietário.

Aplicações:

  • Stablecoins centralizadas (USDC pode congelar fundos de criminosos)
  • Tokens de jogos (desenvolvedor pode confiscar ao banir)

Risco: Criador tem acesso backdoor aos seus fundos.

Confidential Transfers:

Criptografia de saldos usando provas de conhecimento zero.

Como funciona:

  • Apenas saldo criptografado publicamente visível
  • Remetente e destinatário conhecem valores reais
  • Validadores podem verificar correção sem revelação

Tamanho da conta: Até 400 bytes → rent até ~0.004 SOL

Non-Transferable Tokens:

Tokens que não podem ser transferidos (soulbound).

Aplicações:

  • Certificados e diplomas
  • Conquistas em jogos
  • Tokens KYC (verificação de identidade)

Especificidade de recuperação de rent: Tais tokens não podem ser queimados, mas conta pode ser fechada se criador previu esta função.

Por Que Ferramentas Antigas Não Veem Token-2022

Razão técnica: Serviços de cleanup clássicos usam método RPC que retorna apenas tokens SPL. Abordagem correta requer duas consultas separadas para programas SPL e Token-2022.

Recuperação de Rent do Token-2022

Valores de recuperação (aproximados):

  • Token-2022 básico: ~0.00204 SOL (como SPL)
  • Com uma extensão: ~0.0025 SOL
  • Com duas extensões: ~0.003 SOL
  • Com Confidential Transfers: ~0.004 SOL

Importante: Valor real depende do tamanho exato da conta em bytes.

Processo de fechamento: Idêntico aos tokens SPL - Queimar restos (se houver), depois instrução CloseAccount. Única diferença: precisa usar Program ID correto ao formar instrução.

#O que são contas PDA e é possível recuperar rent delas?

Program Derived Address (PDA) - contas controladas por programas, não usuários.

O Que é PDA Tecnicamente

Conta regular:

Private Key → Public Key (endereço) Assinatura de transação = sua chave privada

PDA:

Program ID + Seeds → Endereço determinístico Assinatura de transação = programa (via invoke_signed)

Característica chave: PDA não tem chave privada. Apenas o programa pode assinar operações em seu nome.

Onde PDAs São Usados

Protocolos de lending (Solend, MarginFi):

Quando você deposita:

  • Programa cria PDA para armazenar seu colateral
  • Você é o proprietário mas não controla diretamente
  • Saque possível apenas através da função withdraw() do programa

DEX (Raydium, Orca):

Ordens abertas armazenadas em PDAs - Order Book contém PDA de cada ordem aberta. Cancelar ordem = fechar PDA + retornar rent

Programas de staking:

Seus tokens em stake ficam em PDA - programa controla período de unlock, você não pode "roubar" seus próprios tokens antes do vencimento

É Possível Retornar Rent de PDA

Depende da implementação do programa.

Se programa previu Close Authority para usuário:

✅ Você pode fechar PDA e retornar rent
Exemplos: Versões desatualizadas do Serum DEX, protocolos de lending antigos

Se programa não previu:

❌ PDA permanece aberto para sempre
Exemplos: Alguns programas de staking criam PDAs permanentemente

Se fundos ainda estão em uso:

❌ Fechamento impossível até retirada
Exemplo: Não pode fechar PDA com empréstimo ativo em lending

Como Determinar Se Você Pode Retornar Rent

Passo 1: Verificar Owner

Abra conta no Solscan e verifique se Owner é um programa conhecido (Raydium, Orca).

Passo 2: Verificar Saldo

Se saldo = apenas rent (sem tokens/dados), fechamento pode ser possível.

Passo 3: Verificar Close Authority

Alguns exploradores mostram campo Close Authority. Se é seu endereço - você pode fechar.

Detecção Automática em Ferramentas de Cleanup

Serviços de qualidade:

  • Escaneiam todas as contas onde você é Rent Payer
  • Filtram por programas com lógica conhecida
  • Verificam saldo e status via RPC
  • Mostram apenas PDAs seguros para fechar

Aviso: Não feche PDAs manualmente sem entendimento. Pode perder acesso a fundos no protocolo.

#Como usar Ledger e hardware wallets para cleanup?

Hardware wallets fornecem segurança máxima mas requerem passos adicionais para operações de cleanup.

Por Que Ledger Bloqueia Transações Complexas

Limitação de tela: Ledger Nano S/X tem tela de 128×64 pixels. Pode mostrar endereço (parcialmente), valor de transferência e informações básicas de transação, mas NÃO detalhes de 20 instruções CloseAccount, lista de todas as contas afetadas, ou chamadas complexas de smart contract.

Mecanismo de proteção: Se Ledger não pode exibir detalhes da transação, rejeita por padrão com erro:

Condition of use not satisfied (0x6985)

O Que é Blind Signing

Blind Signing - modo onde você permite que Ledger assine transações sem exibição completa de detalhes na tela.

Como habilitar:

  • Conecte Ledger ao computador
  • Abra app Solana no dispositivo
  • Pressione ambos os botões simultaneamente para entrar em Settings
  • Encontre opção "Blind signing"
  • Mude para "Enabled"
  • Saia de Settings

Importante: Esta configuração está dentro do app Solana no Ledger, não no Ledger Live no computador.

Riscos do Blind Signing

Perda de verificação no dispositivo: Você não vê o que está assinando. Teoricamente, site malicioso poderia enviar transação transferindo todo SOL para hacker e fechando suas contas - e você não veria isso na tela do Ledger.

Como minimizar riscos:

  • ✅ Habilite Blind Signing apenas para operação específica
  • ✅ Use apenas serviços verificados
  • ✅ Verifique simulação de transação na carteira Phantom/Solflare (se usando como interface)
  • ✅ Desabilite Blind Signing imediatamente após uso

Workflow Alternativo Sem Blind Signing

Método 1: Cleanup parcial

Algumas operações simples não requerem Blind Signing - fechar 1-3 contas por transação, tokens SPL simples sem extensões.

Método 2: Exportar via xpub

  • Exporte extended public key do Ledger
  • Importe para hot wallet (watch-only)
  • Faça cleanup na hot wallet
  • Envie SOL recuperado de volta ao Ledger

Método 3: Criar carteira intermediária

  • Transfira fundos para hot wallet temporária
  • Faça cleanup na hot wallet
  • Retorne fundos ao Ledger

#Como recuperar rent de carteiras multisig?

Carteiras multisignature (Squads Protocol, Goki) usam múltiplas chaves para autorizar transações.

Como Multisig Funciona na Solana

Estrutura:

Multisig Vault (PDA) ├── Signer 1: Alice (1/3 voto) ├── Signer 2: Bob (1/3 voto) └── Signer 3: Charlie (1/3 voto) Threshold: 2/3 (precisa assinaturas de dois dos três)

Processo de transação:

  • Alice cria Proposal: "Fechar 50 contas vazias"
  • Bob revisa e Aprova
  • Threshold atingido (2/3) → transação executa automaticamente
  • Charlie pode Aprovar depois (mas já não é necessário)

Por Que Ferramentas de Cleanup Regulares Não Funcionam com Multisig

Problema: Serviços padrão tentam enviar transação imediatamente após conexão de carteira. Mas em Multisig:

  • Uma assinatura é insuficiente
  • Precisa criar Proposal
  • Aguardar outros signatários

Momento técnico: Multisig Vault é um PDA. Tokens armazenados não nos endereços dos signatários, mas no Vault. Portanto, escanear endereço de Alice mostrará 0 contas, embora Vault tenha centenas.

Workflow de Cleanup Multisig

Passo 1: Escanear endereço do Vault

Encontre endereço do Multisig Vault na interface do Squads, cole no scanner de cleanup (Read-Only).

Passo 2: Exportar lista de contas

Algumas ferramentas avançadas permitem exportar lista de contas de tokens para fechar.

Passo 3: Criar Proposal manualmente

Na interface do Squads:

  • New Proposal → Custom Instruction
  • Program: Token Program / Token-2022 Program
  • Instruction: CloseAccount
  • Account list: colar da exportação
  • Create Proposal

Passo 4: Coletar assinaturas

Envie link do Proposal para outros signatários. Após atingir threshold, transação executa.

Automação para Multisig

Desenvolvedores podem criar scripts usando Squads SDK para automatizar criação de proposal, coleta de assinaturas e execução. Custo inclui gas para criação do Proposal mais gas de execução da transação.

#Como interpretar códigos de erro comuns da Solana?

Solana usa códigos de erro numéricos que nem sempre são claros para usuários.

Códigos de Erro Comuns Durante Cleanup

0x0 (Success): Não é erro. Transação executada com sucesso.

0x1 (Insufficient funds): SOL insuficiente para pagamento de gas ou mínimo rent-exempt. Solução: Recarregar saldo.

0x3 (Invalid account data): Conta tem estrutura de dados incorreta. Causa: Token bugado, metadados corrompidos. Solução: Pular esta conta, fechar as outras.

0x7 (Account already in use): Outra transação simultaneamente modificando esta conta. Solução: Aguardar 5-10 segundos, tentar novamente.

0xBB8 (3000 - Account not rent exempt): Tentativa de criar conta sem depósito suficiente. Em contexto de cleanup: Bug da ferramenta (erro raro).

0x1771 (6001 - Custom program error): Erro específico do programa particular. Precisa verificar detalhes na mensagem de erro.

Como Obter Detalhes do Erro

No Phantom/Solflare:

Após transação falhar aparece:

Transaction failed View in Explorer →

Clicar → abre Solscan com log completo.

No Solscan:

  • Encontre seção "Program Logs"
  • Procure por linhas com "Error:"
  • Frequentemente há descrição legível

Exemplo:

Program log: Error: Account has non-zero balance Program TokenkegQf... failed: custom program error: 0x10

Interpretação: 0x10 = "Non-zero balance", não pode fechar conta com tokens.

SolChekers

Our mission is to make the Solana blockchain cleaner, lighter, and more efficient for everyone by reclaiming unused rent deposits.

Built with ❤️ by Solana enthusiasts

Important

SolChekers is a non-custodial tool. We do not have access to your private keys. Use at your own risk.

Official URL verification:
solchekers.com

© 2025 SolChekers.com. Not affiliated with the Solana Foundation.