Interest-Bearing e Default Account State
Mints Token-2022 interest-bearing acumulam yield ao longo do tempo via mecanismo de taxa on-chain. Default account state define se novas contas de token começam initialized ou frozen, controlando quem pode receber transferências até thaw.
Receita
# Interest-bearing mint
spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--decimals 6 \
--enable-interest-bearing \
--rate-authority <PUBKEY>
# Default frozen new accounts
spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--default-account-state frozenQuando usar isso:
- Produtos estilo poupança on-chain exibindo APY
- Tokens de conformidade exigindo thaw KYC antes de transferências
- Airdrops que destinatários devem reivindicar via fluxo thaw
- Tokens de tesouraria acumulando yield nominal sem programa de empréstimo externo
Exemplo de Trabalho
# Create interest-bearing mint (rate set in extension init)
MINT=$(spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--decimals 6 \
--enable-interest-bearing | awk '/Creating token/{print $3}')
spl-token display "$MINT" --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbuse anchor_lang::prelude::*;
use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface};
#[derive(Accounts)]
pub struct ThawAfterKyc<'info> {
pub mint: InterfaceAccount<'info, Mint>,
#[account(mut)]
pub holder_token: InterfaceAccount<'info, TokenAccount>,
pub freeze_authority: Signer<'info>,
pub token_program: Interface<'info, TokenInterface>,
}
pub fn thaw_after_kyc(ctx: Context<ThawAfterKyc>) -> Result<()> {
// CPI ThawAccount after off-chain KYC verification
Ok(())
}// UI: read interest rate from mint extension; show accrued balance estimate
// Note: displayed yield may use timestamp-based calculation client-sideO que isso demonstra:
- Rate authority pode atualizar parâmetros APY conforme regras da extensão
- Estado frozen padrão bloqueia transferências até
ThawAccountpela freeze authority - Novas ATAs herdam estado padrão no momento da criação
Mergulho Profundo
Como Funciona
- Interest-bearing: Taxa armazenada na extensão do mint; saldos escalam com fórmula de tempo definida pela spec Token-2022
- Default account state:
Initialized(normal) ouFrozenpara contas novas - Freeze authority necessária para thaw de contas com portão
- Carteiras devem chamar instruções refresh/update onde exigido pela spec
Comparação de Extensões
| Extensão | Afeta | Autoridade |
|---|---|---|
| Interest-bearing | Crescimento de saldo | Rate authority |
| Default account state | Transferências de conta nova | Freeze authority |
Notas de TypeScript
// Before transfer: check account state via jsonParsed RPC
// if (state === "frozen") prompt user to complete KYC thaw flowArmadilhas
- Exibição APY sem refresh - valores UI obsoletos. Correção: siga cadência de instrução refresh Token-2022 nos clientes.
- Surpresa airdrop frozen - usuários não podem mover tokens. Correção: documente passos claim + thaw antecipadamente.
- Centralização freeze authority - emissor pode travar todos os holders. Correção: freeze authority multisig ou revogue após distribuição.
- Interest vs yield DeFi - acúmulo da extensão difere de APY de protocolo de empréstimo. Correção: não confunda no marketing.
- Pools DEX com default frozen - ATAs de pool podem precisar thaw explícito no setup. Correção: teste fluxo de criação de pool end-to-end.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Protocolo de empréstimo externo | Yield real de tomadores | UX simples de poupança com marca |
| KYC transfer hook | Verificações por transferência | Gating em nível de conta suficiente |
| Freeze manual por conta | Lock seletivo | Todas as contas novas devem começar frozen |
FAQs
O que é extensão interest-bearing?
Configuração on-mint acumula saldo ao longo do tempo conforme fórmula de taxa Token-2022.
O que é default account state?
Se contas de token recém-criadas para o mint começam initialized ou frozen.
Quem thaw contas frozen?
Freeze authority via instrução ThawAccount após sua política KYC passar.
Taxa de juros pode mudar?
Rate authority atualiza conforme regras da extensão - documente governança.
Todas as carteiras mostram juros acumulados?
Suporte varia - você pode precisar cálculos UI customizados.
Compatível com transfer fees?
Sim com UX cuidadosa - taxas aplicam em transferências, juros acumulam separadamente.
Estado padrão pode ser initialized?
Sim - comportamento padrão equivalente a contas SPL clássicas.
Impacto em AMMs?
Contas frozen não podem transferir - pools devem usar contas initialized/thawed.
É yield DeFi real?
Somente matemática da extensão - não yield de mercado de empréstimo a menos que integrado off-chain.
Teste na devnet?
Crie mint com extensão na devnet; verifique caminhos thaw e gating de transferência.
Default state imutável?
Frequentemente definido no init do mint - planeje antes da mainnet.
Relação com freeze authority?
Default frozen requer freeze authority ativa para thaw - mesmo que freeze clássico.
Relacionados
- Autoridades - freeze authority
- Permanent Delegate e Non-Transferable - extensões de controle
- Boas Práticas Token-2022 - UX de gating
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.