Noções Básicas de SPL Token
9 exemplos para começar com SPL Token - 7 básicos e 2 intermediários.
Pré-requisitos
solana config set --url devnet
solana airdrop 2
spl-token --versioncargo add anchor-lang@0.32.1 anchor-spl@0.32.1
npm install @solana/kit@7.0.0Program ID do SPL Token: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA.
Exemplos Básicos
1. Criar um Mint
Uma conta mint define decimais, supply e autoridades.
spl-token create-token --decimals 6decimalsdefine como amounts brutos mapeiam para valores legíveis- Mint authority pode mintar mais até ser revogada
- Freeze authority é opcional;
Nonesignifica que contas não podem ser congeladas
Relacionado: Minting e Burning - mudanças de supply
2. Inspecionar Estado do Mint
Leia supply e campos de autoridade antes de integrar clientes.
spl-token display <MINT>Supplyé unidades inteiras brutas (não amount de UI)- Pubkey
Mint authoritycontrola inflação Freeze authoritycomodisabledsignifica sem capacidade de freeze
Relacionado: Autoridades - padrões de revogação
3. Criar Conta de Token (ATA)
Carteiras guardam saldos em contas de token, não no mint em si.
spl-token create-account <MINT>- Endereço Associated Token Account (ATA) é PDA de carteira + mint
- Uma ATA por carteira por mint é o padrão de UX
- Tamanho da conta é 165 bytes (~2M lamports rent-exempt)
Relacionado: Contas de Token Associadas (ATAs)
4. Mintar Tokens para uma ATA
Aumente supply creditando uma conta de token.
spl-token mint <MINT> 10000001000000unidades brutas = 1,0 token quando decimals = 6- Exige signer com mint authority
- Supply atualiza na conta mint atomicamente
Relacionado: Decimais e Amounts
5. Transferir Entre Contas de Token
Mova saldos sem alterar supply total.
spl-token transfer <MINT> 500000 <RECIPIENT_WALLET> --fund-recipient- Origem deve ser sua ATA daquele mint
--fund-recipientcria ATA do destinatário se ausente- Delegates podem transferir em nome do owner quando aprovados
Relacionado: Transferências e Delegates
6. Ler Saldos com @solana/kit
Clientes consultam contas de token via RPC padrão.
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const owner = address("YOUR_WALLET");
const { value } = await rpc
.getTokenAccountsByOwner(owner, { mint: address("MINT_PUBKEY") }, { encoding: "jsonParsed" })
.send();
const balance = value[0]?.account.data.parsed.info.tokenAmount.uiAmount;
console.log("Balance:", balance);jsonParsedretorna amount de UI e amount bruto juntos- Array vazio significa que ainda não existe ATA para aquele mint
- Use DAS para metadados NFT; use RPC de token para saldos fungíveis
Relacionado: SOL Envolvido - SOL nativo como SPL
7. Burn para Reduzir Supply
Remova tokens da circulação permanentemente.
spl-token burn <MINT> 100000- Queima do saldo da sua ATA, não de holders arbitrários
- Diminui campo supply do mint
- Comum antes de revogar mint authority para tokens de supply fixo
Relacionado: Minting e Burning
Exemplos Intermediários
8. Transferência CPI em Programa Anchor
Programas movem tokens via cross-program invocation (CPI).
use anchor_lang::prelude::*;
use anchor_spl::token::{self, Token, TokenAccount, Transfer};
#[derive(Accounts)]
pub struct PayFee<'info> {
#[account(mut)]
pub user_token: Account<'info, TokenAccount>,
#[account(mut)]
pub treasury_token: Account<'info, TokenAccount>,
pub authority: Signer<'info>,
pub token_program: Program<'info, Token>,
}
pub fn pay_fee(ctx: Context<PayFee>, amount: u64) -> Result<()> {
let cpi = CpiContext::new(
ctx.accounts.token_program.to_account_info(),
Transfer {
from: ctx.accounts.user_token.to_account_info(),
to: ctx.accounts.treasury_token.to_account_info(),
authority: ctx.accounts.authority.to_account_info(),
},
);
token::transfer(cpi, amount)?;
Ok(())
}Account<'info, TokenAccount>desserializa layout SPL e valida owner- Signer deve ser owner da conta de token ou delegate aprovado
- Sempre valide mint correspondente entre contas from/to em produção
Relacionado: SPL Token em Programas
9. Revogar Mint Authority (Supply Fixo)
Trave supply após distribuição inicial.
spl-token authorize <MINT> mint --disable- Irreversível naquele mint - sem mais inflação possível
- Padrão de lançamento: mint alocação, airdrop, depois revogar
- Documente mudanças de autoridade para transparência e indexadores
Relacionado: Boas Práticas de SPL Token - checklist de lançamento
Versões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.