Noções Básicas de SPL Token
9 exemplos para você começar com o SPL Token - 7 básicos e 2 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com o SPL Token - 7 básicos e 2 intermediários.
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.0ID do programa SPL Token: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA.
Uma conta mint define decimais, supply e autoridades.
spl-token create-token --decimals 6decimals define como quantidades brutas são mapeadas para valores legíveis por humanosNone significa que as contas não podem ser congeladasRelacionado: Minting e Burning - mudanças de supply
Leia os campos de supply e autoridade antes de integrar clientes.
spl-token display <MINT>Supply são unidades inteiras brutas (não a quantidade da UI)Mint authority controla a inflaçãoFreeze authority como disabled significa sem capacidade de congelamentoRelacionado: Autoridades - padrões de revogação
Carteiras detêm saldos em contas de token, não no próprio mint.
spl-token create-account <MINT>Relacionado: Contas de Token Associadas (ATAs)
Aumente o supply creditando uma conta de token.
spl-token mint <MINT> 1spl-token são quantidades da UI: 1 emite 1.0 token (quantidade bruta 1000000 com 6 decimais). Passar 1000000 aqui emitiria um milhão de tokensRelacionado: Decimais e Quantidades
Mova saldos sem alterar o supply total.
spl-token transfer <MINT> 0.5 <RECIPIENT_WALLET> --fund-recipient0.5 = meio token), não unidades base brutas--fund-recipient cria a ATA do destinatário se ela não existirRelacionado: Transferências e Delegados
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);jsonParsed retorna a quantidade da UI e a quantidade bruta juntasRelacionado: SOL Wrapped - SOL nativo como SPL
Remova tokens da circulação permanentemente.
# burn recebe o endereço da CONTA DE TOKEN, não do mint
spl-token burn "$(spl-token address --token <MINT> --verbose | awk '/Associated token address/{print $NF}')" 0.10.1 = um décimo de um token)Relacionado: Minting e Burning
Programas movem tokens via invocação entre programas (CPI).
use anchor_lang::prelude::*;
use anchor_spl::token::{self, Mint, Token, TokenAccount, TransferChecked};
#[derive(Accounts)]
pub struct PayFee<'info> {
pub mint: Account<'info, Mint>,
#[account(mut, token::mint = mint, token::authority = authority)]
pub user_token: Account<'info, TokenAccount>,
#[account(mut, token::mint = mint)]
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 decimals = ctx.accounts.mint.decimals;
let cpi = CpiContext::new(
ctx.accounts.token_program.to_account_info(),
TransferChecked {
mint: ctx.accounts.mint.to_account_info(),
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_checked(cpi, amount, decimals)?;
Ok(())
}Account<'info, TokenAccount> desserializa o layout SPL e valida que o proprietário é o programa de Token clássicoTransferChecked passa o mint e verifica os decimais on-chain; o Transfer não verificado está obsoletotoken::mint fixa ambos os lados ao mesmo ativo - uma origem não fixada é o clássico bug de drenoanchor_spl::token rejeitam contas Token-2022 - use anchor_spl::token_interface para essasRelacionado: SPL Token em Programas
Trave o supply após a distribuição inicial.
spl-token authorize <MINT> mint --disableRelacionado: Melhores 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.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026