Uma Conta de Token Associada (ATA) é o endereço canônico da conta de token SPL para um par carteira + mint. Carteiras, programas e indexadores dependem deste PDA determinístico em vez de endereços de contas de token ad-hoc.
O endereço ATA é derivado do proprietário, do mint e do ID do programa de token
create_associated_token_account_idempotent é seguro para chamar quando o ATA já pode existir
As restrições associated_token do Anchor conectam a mesma derivação na cadeia, incluindo token_program para que a derivação corresponda ao programa real do mint
Esses tipos anchor_spl::token são apenas do Token clássico; para um mint que pode ser Token-2022, use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface} com InterfaceAccount e Interface<'info, TokenInterface>
use anchor_spl::associated_token::{ get_associated_token_address, get_associated_token_address_with_program_id,};// Apenas Token clássico - este helper codifica Tokenkeg... nas sementes.let ata = get_associated_token_address(&owner.key(), &mint.key());// Para um mint que pode ser Token-2022, o programa de token faz parte das sementes:let ata_any = get_associated_token_address_with_program_id( &owner.key(), &mint.key(), token_program.key,);// Compare com a conta passada em caminhos de validação manuais
Programa de token errado na derivação - Incompatibilidade de endereço ATA para mints Token-2022. Correção: passe o ID real do programa de token do mint para findAssociatedTokenPda.
Envio para carteira sem ATA - a transferência falha. Correção:--fund-recipient na CLI ou createAssociatedTokenIdempotent em clientes.
Assumindo uma conta de token por mint globalmente - podem existir várias contas não ATA. Correção: prefira ATA; valide se o endereço é igual à derivação em programas.
O proprietário é um PDA - ATA ainda funciona; o proprietário é a chave pública do PDA, não uma chave de assinatura. Correção: o programa assina como PDA ao mover tokens do ATA de propriedade do PDA.
Aluguel de ATA codificado - os parâmetros do cluster mudam. Correção: consulte getMinimumBalanceForRentExemption(165).
O PDA canônico da conta de token associada para um determinado proprietário de carteira e mint. As carteiras exibem um endereço de depósito por ativo SPL.
Podem existir dois ATAs para o mesmo proprietário e mint?
Não. A derivação é determinística - apenas um endereço ATA por triplo (proprietário, mint, programa de token).
A criação do ATA custa SOL?
Sim. O pagador financia lamports isentos de aluguel (~2M para conta de 165 bytes) mais taxa de transação.
Um programa pode possuir um ATA?
Sim. A chave pública do proprietário pode ser um PDA; o programa proprietário assina transferências com sementes PDA.
Como obtenho o endereço ATA sem criá-lo?
Derive com findAssociatedTokenPda / spl-token address --token - a criação é uma etapa separada.
A criação idempotente é segura para spam?
Sim. A instrução idempotente é bem-sucedida independentemente de o ATA já existir ou não.
Os mints Token-2022 usam o mesmo programa ATA?
Sim, mas passe o ID do programa Token-2022 na derivação e nas instruções.
E se eu transferir para uma conta de token aleatória?
Funciona se o mint da conta corresponder, mas a UX quebra - os usuários esperam endereços ATA em exploradores e carteiras.
Posso fechar um ATA?
Sim, quando o saldo é zero. Lamports retornam para uma conta de destino.
Como os indexadores encontram tokens de carteira?
getTokenAccountsByOwner retorna ATAs e quaisquer outras contas de token para esse proprietário.
Os protocolos devem pagar o aluguel do ATA?
Subsídio de integração comum - orçamento da tesouraria para create ATA por usuário por mint.
O @solana/kit 7.0.0 inclui auxiliares ATA?
Use os pacotes @solana-program/token e @solana-program/associated-token juntamente com o RPC do kit e os construtores de transações.