O Programa SPL Token
No Solana, ativos fungíveis (e muitos do tipo NFT) não são saldos armazenados dentro das carteiras dos usuários da maneira que um ledger bancário armazena uma única linha por cliente.
Busque em todas as páginas da documentação
No Solana, ativos fungíveis (e muitos do tipo NFT) não são saldos armazenados dentro das carteiras dos usuários da maneira que um ledger bancário armazena uma única linha por cliente.
São contas de propriedade do programa SPL Token, que impõe o suprimento da moeda (mint), quem pode mover fundos e como os valores são armazenados.
Noções Básicas do SPL Token mostra receitas para criar moedas (mint) e ATAs; Contas de Token Associadas (ATAs), Autoridades, Decimais e Valores, Cunhagem e Queima (Minting & Burning) e SPL Token em Programas cada um aprofunda em uma camada.
Esta página é a camada inferior: o modelo único que faz com que essas páginas pareçam um sistema, em vez de uma pilha de flags de CLI.
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) possui contas moeda (mint - definição do token e suprimento) e contas de token (saldos para uma moeda sob uma autoridade), e apenas as modifica através de suas instruções.transfer_checked, autoridades de moeda/cofre de PDA, ID do programa Token-2022.SPL Token separa o que é um token de quem detém quanto.
Uma conta moeda (mint account) é a definição do tipo para um token: decimais, suprimento total, autoridade de moeda (quem pode aumentar o suprimento) e autoridade de congelamento (quem pode congelar contas de token para essa moeda).
A moeda não armazena saldos por carteira. Criar uma moeda não dá tokens a ninguém até que uma instrução de cunhagem (mint) credite uma conta de token.
Uma conta de token detém um saldo para exatamente uma moeda sob uma autoridade (geralmente uma carteira ou um PDA).
Seu estado inclui a chave pública da moeda (mint pubkey), a proprietária/autoridade, o valor bruto, um delegado opcional e valor delegado, e o estado de congelamento.
Carteiras "têm USDC" apenas no sentido de que controlam uma conta de token cuja moeda é a moeda USDC e cujo valor é diferente de zero.
Essa separação é o motivo pelo qual você nunca envia tokens SPL para "o endereço da moeda" como se fosse uma conta bancária, e por que listar apenas uma chave pública de carteira é incompleto sem o contexto da moeda.
Contas de Token Associadas (ATAs) são a convenção social e de ferramentas que remove o caos de endereços.
Para uma dada tripla (carteira, moeda, programa de token), o programa de Token Associado deriva um PDA determinístico como a conta de token preferida.
Carteiras, exploradores e indexadores assumem esse endereço quando um usuário diz "envie-me este token".
Você ainda pode criar contas de token não-ATA; a UX de produção quase sempre cria ou usa a ATA.
Autoridades são a superfície de confiança de uma moeda e de cada conta de token.
None.None.Revogar as autoridades de cunhagem e congelamento é um sinal comum de lançamento: suprimento fixo ou controlado pela comunidade e sem poder de congelamento.
Decimais e valores fecham a fundação.
O armazenamento na cadeia é sempre um inteiro bruto (u64). Decimais na moeda apenas definem a escala humana: com 6 decimais, 1.5 na UI é 1_500_000 bruto.
Clientes, CLIs e programas que misturam floats de UI com campos brutos sem converter são uma fonte principal de bugs de 1000x e 1e6x.
ID do programa clássico SPL Token:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Contas de token para o SPL Token clássico têm 165 bytes e devem permanecer isentas de aluguel (rent-exempt); ATAs ainda são apenas contas de token em um endereço derivado.
O ciclo de vida produtivo do token é ordenado: definir a moeda, criar uma conta de detentor, alterar o suprimento ou mover saldos, então (opcionalmente) travar autoridades.
conta moeda conta de token / ATA ops
------------ ------------------- ---
criar moeda ──► definir decimais + ──► criar ATA (ou ──► mint_to
(Prog. Token) autoridades conta de token) transfer
│ │ │ burn
│ │ │ approve
▼ ▼ ▼ freeze
suprimento na moeda chaves de autoridade saldo, delegado set_authority
(total bruto) mint / freeze estado de congelamento close accountUma moeda é criada como uma conta pertencente ao Programa Token, inicializada com decimais e autoridades (e geralmente financiada com isenção de aluguel por um pagador de taxas).
spl-token create-token --decimals 6 (pilha Solana CLI 3.0.10) é o caminho do operador; @solana/kit 7.0.0 e @solana-program/token constroem as mesmas instruções de inicialização de moeda para aplicativos.
Até que você crie (mint), o suprimento é zero; os decimais nunca mudam após a inicialização no Classic SPL Token.
Saldos precisam de uma conta de destino para essa moeda.
A criação de ATA é tipicamente uma instrução (ou uma criação idempotente) que deriva o endereço, cria a conta se ausente e a inicializa para a moeda e o proprietário.
Clientes que transferem sem garantir que a ATA do destinatário exista falham com erros de conta ausente; fluxos de produção usam create-idempotent ou check-then-create.
Prefira instruções do tipo transfer_checked / mint_to_checked quando disponíveis para que a moeda e os decimais sejam explícitos na instrução, capturando erros de incompatibilidade de moeda precocemente.
Valores brutos apenas nos dados da instrução: se a moeda tem 9 decimais e você quer 5 tokens inteiros, o valor da instrução é 5_000_000_000, não 5.
O CLI spl-token é a exceção, e a direção confunde as pessoas: seus argumentos de valor são valores de UI que ele escala pelos decimais da moeda para você. spl-token mint <MINT> 5 cunha cinco tokens; spl-token mint <MINT> 5000000000 cunha cinco bilhões.
Inicialmente: a autoridade de cunhagem é uma chave de implantação ou multisig; a autoridade de congelamento é opcional.
Após a distribuição: muitos projetos desabilitam a autoridade de cunhagem (sem mais inflação) e a autoridade de congelamento (sem risco de congelamento), ou as movem para uma DAO/PDA com política documentada.
A propriedade da conta de token pode ser uma carteira de usuário ou um PDA para que um programa possa assinar transferências e queimadas com seeds (cofres, escrows, staking).
Fora da cadeia (Off-chain): CLI, clientes kit e carteiras constroem instruções do Programa Token em transações (pagador de taxas, blockhash recente, assinaturas) como qualquer outro trabalho do Solana.
Na cadeia (On-chain): seu programa nunca "escreve saldos de token" em seu próprio layout de conta para ativos SPL; ele faz CPI para o Programa Token com as contas, valores e privilégios de signatário corretos.
Anchor 0.32.1 anchor-spl types (Mint, TokenAccount, Token, TransferChecked, MintTo, Burn) validam propriedade e campos, então emitem essas CPIs. Use TransferChecked, não o Transfer depreciado. Note que anchor_spl::token::{Mint, TokenAccount} são apenas para Token clássico e sua verificação de proprietário rejeita contas Token-2022; um programa que deve aceitar ambos usa anchor_spl::token_interface em vez disso.
Um caminho mínimo de operação de teste (não uma receita completa de produto):
spl-token create-token --decimals 6
spl-token create-account <MINT>
spl-token mint <MINT> 1 # Valor de UI: 1 token = 1_000_000 bruto com 6 decimais
spl-token display <MINT>Mecânicas a manter: moeda define tipo e suprimento; ATAs detêm saldos; autoridades controlam mutações; valores são brutos.
| Preocupação | Abordagem do Classic SPL Token | Por que importa | Página mais aprofundada |
|---|---|---|---|
| UX do endereço do destinatário | Prefere ATAs por carteira+moeda | Carteiras e indexadores concordam em um endereço | ATAs |
| Política de suprimento | Autoridade de cunhagem e depois revogação ou DAO | Confiança e tokenomics | Autoridades, Cunhagem e Queima |
| Matemática de UI vs. cadeia | Sempre converte com decimais | Evita bugs catastróficos de unidade | Decimais e Valores |
| Cofres de programa | Autoridade PDA na ATA do cofre; transfer via CPI | Escrow sem carteiras quentes custodiadas | SPL Token em Programas |
| Instruções verificadas (checked) | Passa moeda + decimais na transferência/cunhagem | Rejeita contas de moeda erradas | Em programas e construtores de clientes |
| Extensões (taxas, hooks) | Usa Token-2022, não Token clássico | ID de programa diferente e layouts de conta | Seção Token-2022 (irmã) |
Autoridades PDA são como programas DeFi custodiam ativos com segurança: a ATA do cofre tem como autoridade um PDA para o qual seu programa pode assinar com invoke_signed, não uma chave humana em um servidor.
Valide a derivação da moeda, ATA e valor na mesma instrução que move os fundos.
Caminhos de ATA create_idempotent reduzem falhas de corrida quando duas transações tentam criar a mesma ATA.
Delegados permitem limite de gastos (aprovações) sem transferir a propriedade; limpe ou sobrescreva com cuidado para que limites remanescentes não surpreendam os usuários.
SOL Envolvido (Wrapped SOL) é o Classic SPL Token usado como ponte: SOL nativo é envolvido em uma conta de token para que programas possam tratar SOL como qualquer outra moeda em caminhos de CPI. Os fluxos de cunhagem e envolvimento/desenvolvimento são ferramentas especiais em cima do mesmo modelo de conta de token.
Token-2022 é um programa separado com extensões de moeda/conta de token. Não assuma que contas Tokenkeg e contas Token-2022 são intercambiáveis; o ID do programa, ATAs (programa de token nas seeds) e conjuntos de instruções devem corresponder.
Clientes em @solana/kit 7.0.0 devem usar construtores de instrução específicos do programa e auxiliares de PDA em vez de layouts de byte criados manualmente.
Programas em Anchor 0.32.1 / Rust 1.91.1 devem fixar anchor-spl na mesma linha de lançamento e preferir macros de restrição (token::mint, associated_token::...) para que contas inválidas falhem antes da CPI.
u64; decimais apenas escalam a exibição e a conversão.transfer não verificado é depreciado, e o Token-2022 o rejeita completamente em moedas com uma extensão de taxa de transferência.spl-token são unidades brutas como dados de instrução." São valores de UI. O CLI multiplica por 10^decimals para você, então um valor "bruto" gasta a mais por esse fator.O programa na cadeia que possui contas de moeda e de token e impõe a cunhagem, queima, transferências, congelamentos e autoridades para tokens clássicos do Solana.
Uma moeda define o tipo de token, decimais, suprimento e autoridades de cunhagem/congelamento; uma conta de token detém um saldo bruto para uma moeda sob um proprietário/autoridade.
Uma Conta de Token Associada é a conta de token PDA canônica para uma carteira e moeda (e programa de token), derivada para que todos concordem onde o saldo desse usuário reside.
Apenas a autoridade de cunhagem atual (um keypair, multisig ou PDA que assina a instrução de cunhagem), e apenas enquanto essa autoridade ainda estiver definida na moeda.
A autoridade de congelamento da moeda, se uma estiver definida; se a autoridade de congelamento for desabilitada, contas para essa moeda não podem ser congeladas através do Programa Token.
Eles frequentemente mostram unidades brutas. Divida por 10^decimals para valores de UI, ou use ferramentas que formatam com os decimais da moeda.
Não. Transferência move o valor bruto entre contas de token da mesma moeda. Cunhagem aumenta o suprimento; queima o diminui.
Não. Cada conta de token é inicializada para exatamente uma moeda. Uma carteira usa uma conta de token separada (geralmente uma ATA separada) por moeda.
Por CPI para o Programa Token com as contas e autoridade corretas (assinatura do usuário ou PDA invoke_signed), tipicamente via auxiliares anchor-spl no Anchor 0.32.1.
Quando você quer um suprimento máximo fixo e sem inflação adicional sob essa autoridade - um passo comum pós-distribuição ou de endurecimento de lançamento. Veja Autoridades.
165 bytes de dados, alocados com isenção de aluguel para que a conta não seja coletada como lixo; ATAs usam esse mesmo layout de conta de token em um endereço derivado.
Ele constrói e envia as mesmas instruções Token e Token Associado contra o RPC; o modelo de conta não muda, apenas a ergonomia do cliente.
Wrapped SOL usa uma moeda SPL e contas de token para que SOL possa participar de CPIs de token; os fluxos de envolvimento/desenvolvimento (wrap/unwrap) conectam lamports nativos e saldos de token.
Use Classic SPL Token quando precisar de compatibilidade máxima e sem extensões; escolha Token-2022 quando precisar de recursos de extensão e puder exigir seu ID de programa e derivação de ATA em todos os lugares.
Trabalhe através de Noções Básicas do SPL Token, depois ATAs, cunhagem/queima, autoridades, decimais e padrões de CPI na cadeia na lista Relacionados abaixo.
Versões da Pilha: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, Rust 1.91.1 e @solana/kit 7.0.0.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026