Programas on-chain interagem com o SPL Token por meio de invocações entre programas (CPIs). O anchor-spl da Anchor 0.32.1 envolve a validação de conta, desserialização e construtores de instruções para lógica de token de nível de produção.
Account<'info, TokenAccount> valida que o proprietário é o programa Token clássico - ele rejeita contas Token-2022
As restrições token::mint e associated_token reduzem as verificações manuais de pubkey
transfer_checked inclui decimais para um manuseio de ativos mais seguro; o Transfer não verificado está obsoleto e o Token-2022 o rejeita em mints com taxa de transferência
use anchor_lang::prelude::*;use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface};// Nunca misture as duas árvores de módulos. `anchor_spl::token::{Mint, TokenAccount}` são// apenas para Token clássico e sua verificação de proprietário rejeita contas Token-2022; os// tipos `token_interface` despacham para ambos os programas.#[derive(Accounts)]pub struct EitherProgram<'info> { pub mint: InterfaceAccount<'info, Mint>, #[account(mut, token::mint = mint)] pub from: InterfaceAccount<'info, TokenAccount>, pub token_program: Interface<'info, TokenInterface>,}
Falta de verificação de igualdade da cunhagem - ativo errado do ATA do cofre. Correção: restrição token::mint = mint em todas as contas de token.
UncheckedAccount como autoridade do cofre - sem validação de sementes de PDA. Correção: restrições seeds + bump no PDA de autoridade.
Conta token_program incorreta - Program<'info, Token> fixa Tokenkeg..., e Account<'info, TokenAccount> rejeita contas de propriedade do Token-2022, portanto, não há um caminho de "apenas passe a conta do programa Token-2022". Correção: altere toda a estrutura da conta para anchor_spl::token_interface (InterfaceAccount + Interface<TokenInterface>), ou em Rust nativo use spl_token_2022::instruction::* - spl_token::instruction::* chama check_program_account e retorna IncorrectProgramId para qualquer ID que não seja Tokenkeg....
Mistura de tipos anchor_spl::token e anchor_spl::token_interface - a verificação de proprietário dos tipos clássicos rejeita cunhagens de extensão. Correção: escolha uma árvore de módulos por estrutura de conta.
PDA não pode assinar transferência - sementes with_signer faltando. Correção:CpiContext::new_with_signer com sementes do cofre.
Profundidade extra de CPI via hooks do Token-2022 - uma cunhagem com hook adiciona uma CPI aninhada a um programa de hook separado, custando profundidade e CU. Um hook nunca pode reentrar em um programa já na pilha (incluindo o seu ou o próprio Token-2022) - Solana rejeita isso com ReentrancyNotAllowed. Correção: orçamente CU e profundidade de CPI; consulte a documentação do hook de transferência.