Setting Priority Fees
Defina priority fees dinâmicas usando percentis recentes da rede e SetComputeUnitPrice para que transações compitam durante congestionamento.
Receita
Cartão de receita para referência rápida - pronto para copiar e colar.
const fees = await rpc.getRecentPrioritizationFees([]).send();
fees.sort((a, b) => a.prioritizationFee - b.prioritizationFee);
const p75 = fees[Math.floor(fees.length * 0.75)]?.prioritizationFee ?? 1000;
// microLamports per CU in compute budget instruction
const microLamports = Math.min(p75 * 1.2, MAX_CAP);Quando usar:
- Lançamentos e mints na mainnet com contenção.
- Serviços relayer em lote de transações de usuário.
- Carteiras auto-ajustando taxa de sucesso de envio.
- Substituindo padrões estáticos de priority fee zero.
Exemplo Prático
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const MAX_MICRO_LAMPORTS = 500_000;
async function suggestPriorityFee(lockedAccounts: string[] = []) {
const fees = await rpc
.getRecentPrioritizationFees(
lockedAccounts.map((a) => ({ account: a }))
)
.send();
const samples = fees
.map((f) => f.prioritizationFee)
.filter((n) => n > 0)
.sort((a, b) => a - b);
if (samples.length === 0) return 1_000;
const p75 = samples[Math.floor(samples.length * 0.75)];
return Math.min(Math.ceil(p75 * 1.2), MAX_MICRO_LAMPORTS);
}
const microLamports = await suggestPriorityFee();
console.log("compute unit price:", microLamports);O que isso demonstra:
getRecentPrioritizationFeesamostra fees de transações que aterrissaram.- Alvo no percentil 75-90 equilibra custo vs sucesso.
- Teto rígido evita fees descontroladas durante picos.
Aprofundamento
Como funciona
- Priority fee =
microLamports * compute_units_requested(limitado pela instrução de limite). - Validadores ordenam transações em parte pelo lance total de priority fee.
- Base signature fee (5000 lamports) permanece separada do componente de priority.
- APIs de provedor podem retornar
priorityFeeEstimatecom estatísticas de percentil.
Níveis de estratégia
| Perfil | Percentil | Caso de uso |
|---|---|---|
| Economy | p50 | Baixa urgência |
| Standard | p75 | Maioria da UX |
| Aggressive | p90 | Mints, arb |
| Capped | min(p90, cap) | Guardrails de custo |
Notas TypeScript
// Total priority lamports ≈ (microLamports * computeUnitLimit) / 1_000_000
// Add base fee separately in UX estimatesErros comuns
- Fee zero durante mint hype - taxa de aterrissagem quase zero. Correção: percentil dinâmico com piso.
- p99 sem teto - usuários pagam fees extremas. Correção:
MAX_MICRO_LAMPORTSpor política do produto. - Amostra de fee obsoleta - mercado mudou desde o fetch. Correção: atualize por lote de envio.
- Limite alto + preço alto - multiplica priority lamports total. Correção: dimensione limite de CU primeiro.
- Ajuste de fee em devnet sem sentido - congestionamento diferente da mainnet. Correção: teste política com txs pequenas na mainnet.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
| Fee fixa | Devnet tranquila | Mainnet congestionada |
| Jito tip | Aterrissagem em bundle | Transferências simples |
| Acordos com validador privado | Institucional | Carteiras de consumo |
| Sliders escolhidos pelo usuário | UX transparente | Bots totalmente automatizados |
FAQs
O que são microLamports?
1e-6 lamports; preço é por compute unit solicitada na instrução de budget.
Como usuários veem priority fee?
Mostre priority SOL estimada = microLamports * CU limit / 1e9 mais base fee.
Fees devem diferir por tipo de instrução?
Sim - mantenha perfis de fee por template de transação a partir de simulações.
Txs falhadas pagam priority?
Se incluídas no bloco mas programa falhou, priority fee ainda é cobrada; txs descartadas não pagam nada.
API de fee Helius?
Melhoria opcional sobre getRecentPrioritizationFees bruto - abstraia atrás de interface.
Priority fee em devnet?
Geralmente desnecessária - foque testes com pequenas quantias na mainnet.
Relação com Jito tip?
Caminhos de pagamento separados - alguns apps usam ambos para aterrissagem competitiva.
Com que frequência atualizar?
Por ação de envio do usuário durante congestionamento; menos frequente fora de pico.
Posso reembolsar priority fees?
Sem reembolso on-chain se a tx aterrissa com falha - projete tetos e simulação com cuidado.
Onde definir limite de CU?
Veja Estimating Compute Units - defina limite antes do preço.
Relacionados
- Priority Fee & Simulation APIs - dados RPC
- Priority Fees - modelo conceitual
- Jito Bundles - tips de bundle
- Why Transactions Fail to Land - descartes subprecificados
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.