Aluguel & Isenção de Aluguel
As contas Solana devem conter lamports suficientes para serem isentas de aluguel - um depósito único baseado no tamanho dos dados. Sem ele, as contas não podem persistir na rede.
Receita
solana rent 200const rent = await rpc.getMinimumBalanceForRentExemption(200n).send();Quando usar isso:
- Dimensionando transferências
initem programas Anchor - Estimando o custo de onboarding do usuário (quantas contas criar)
- Fechando contas para recuperar o aluguel
- Orçando o tesouro do protocolo para subsídios de criação de contas
Exemplo de Trabalho
use anchor_lang::prelude::*;
#[derive(Accounts)]
pub struct InitConfig<'info> {
#[account(
init,
payer = payer,
space = 8 + Config::INIT_SPACE,
)]
pub config: Account<'info, Config>,
#[account(mut)]
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
#[derive(InitSpace)]
pub struct Config {
pub admin: Pubkey,
pub fee_bps: u16,
}import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const space = 8 + 32 + 2; // discriminador + campos
const minBalance = await rpc.getMinimumBalanceForRentExemption(BigInt(space)).send();
console.log("Mínimo isento de aluguel:", minBalance, "lamports");O que isso demonstra:
- Transferências
initde pelo menos o mínimo isento de aluguel do pagador para a nova conta - O cálculo do espaço deve incluir o discriminador de 8 bytes do Anchor
- A RPC retorna a quantidade exata de lamports para qualquer tamanho de byte
Mergulho Profundo
Como Funciona
- O aluguel é uma função do tamanho dos dados e uma taxa anual de lamports por byte em toda a rede
- Isento de aluguel significa manter aproximadamente 2 anos de aluguel adiantado - a conta nunca é cobrada por aluguel contínuo
- Os lamports ficam no saldo da conta - recuperáveis no fechamento
- O Programa do Sistema impõe um saldo mínimo na alocação
Tamanhos Típicos
| Tipo de Conta | Bytes | Aluguel Aprox. (lamports) |
|---|---|---|
| Carteira Vazia | 0 | ~890.880 |
| Conta Token SPL | 165 | ~2.039.280 |
| Estrutura pequena Anchor | 8 + 40 | ~1.500.000+ |
Valores exatos mudam com os parâmetros do cluster - sempre consulte a RPC.
Armadilhas
spacesubdimensionado no Anchor -initfalha ou trunca dados. Correção: use o deriveInitSpaceou cálculo manual com comprimentos máximos de string/vetor.- Esquecer o discriminador no espaço - 8 bytes de diferença. Correção: sempre adicione 8 para contas Anchor.
- Assumir que o aluguel é uma cobrança recorrente - contas isentas de aluguel pagam uma vez. Correção: financie até o mínimo na criação; sem cobrança contínua.
- Não recuperar o aluguel no fechamento - fundos do usuário bloqueados para sempre. Correção: implemente a restrição
close. - Valores de aluguel codificados - os parâmetros do cluster podem mudar. Correção: consulte
getMinimumBalanceForRentExemptionnos clientes.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
CLI solana rent | Estimativas rápidas no terminal | Lógica de programa na rede |
| Consulta de aluguel RPC | Exibição dinâmica de custo na interface do cliente | Dentro do BPF (use sysvar ou buffer fixo) |
| Compressão de estado | Milhões de registros pequenos | Estado mutável ativo |
FAQs
O que é isenção de aluguel?
Financiar uma conta com lamports suficientes para cobrir aproximadamente 2 anos de aluguel de armazenamento adiantado. A conta então persiste sem cobranças de aluguel contínuas.
Como calculo o aluguel para uma conta Anchor?
space = 8 + sizeof campos serializados (com comprimentos máximos para String/Vec). Consulte a RPC para lamports exatos.
Posso reaver o aluguel?
Sim. Feche a conta e os lamports retornarão para um destino que você especificar.
O que acontece se o saldo cair abaixo do isento de aluguel?
O comportamento legado poderia coletar lixo; a prática moderna exige isenção de aluguel na criação. Inits sem fundos falham.
Dados maiores sempre significam mais aluguel?
Sim. O aluguel escala linearmente com o tamanho dos dados em bytes.
Quem paga o aluguel na criação da conta?
O signatário payer em init - tipicamente o usuário ou o tesouro do protocolo.
O bytecode do programa está sujeito a aluguel?
Sim. Programas implantados mantêm lamports para o tamanho de sua conta de dados do programa.
Como `realloc` afeta o aluguel?
O crescimento dos dados pode exigir lamports adicionais transferidos para manter a isenção de aluguel.
O que é o sysvar de aluguel?
O sysvar Rent contém os parâmetros de cálculo. Raramente lido diretamente em programas modernos.
Devo subsidiar a criação de contas de usuários?
Padrão de UX comum para ATAs e PDAs. Orce o tesouro de acordo.
O aluguel do devnet corresponde ao mainnet?
Mesma fórmula; os valores são idênticos para o mesmo tamanho de dados.
O cálculo de aluguel pode diferir por tipo de conta?
Não. Apenas o tamanho dos dados e os parâmetros de aluguel do cluster importam.
Relacionado
- Criando e Fechando Contas - recuperar aluguel
- Anatomia da Conta - campo lamports
- Contas de Dados e Layout - dimensionando layouts
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.