Establecer Tarifas de Prioridad
Establece tarifas de prioridad dinámicas utilizando percentiles recientes de la red y SetComputeUnitPrice para que las transacciones compitan durante la congestión.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
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 por CU en la instrucción del presupuesto de cómputo
const microLamports = Math.min(p75 * 1.2, MAX_CAP);Cuándo usar esto:
- Lanzamientos en Mainnet y acuñaciones con contención.
- Servicios de retransmisión que agrupan transacciones de usuarios.
- Carteras que ajustan automáticamente la tasa de éxito de envío.
- Reemplazo de valores predeterminados de tarifa de prioridad cero estática.
Ejemplo de Trabajo
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("precio por unidad de cómputo:", microLamports);Lo que esto demuestra:
getRecentPrioritizationFeesmuestrea las tarifas de las transacciones aterrizadas.- El objetivo del percentil 75-90 equilibra el costo y el éxito.
- Un límite máximo evita tarifas descontroladas durante picos de tarifas.
Análisis Profundo
Cómo Funciona
- Tarifa de prioridad =
microLamports * compute_units_requested(limitado por la instrucción de límite). - Los validadores ordenan las transacciones parcialmente por la oferta total de tarifas de prioridad.
- La tarifa de firma base (5000 lamports) permanece separada del componente de prioridad.
- Las API del proveedor pueden devolver
priorityFeeEstimatecon estadísticas de percentiles.
Niveles de Estrategia
| Perfil | Percentil | Caso de uso |
|---|---|---|
| Economía | p50 | Baja urgencia |
| Estándar | p75 | La mayoría de la UX |
| Agresivo | p90 | Acuñaciones, arb |
| Limitado | min(p90, cap) | Barreras de costo |
Notas de TypeScript
// Lamports de prioridad total ≈ (microLamports * computeUnitLimit) / 1_000_000
// Añade la tarifa base por separado en las estimaciones de UXTrampas
- Tarifa cero durante acuñación de moda - tasa de aterrizaje casi nula. Solución: percentil dinámico con un suelo.
- p99 sin límite - los usuarios pagan tarifas extremas. Solución:
MAX_MICRO_LAMPORTSpor política de producto. - Muestra de tarifa obsoleta - el mercado se movió desde la obtención. Solución: actualizar por lote de envío.
- Límite alto + precio alto - multiplica los lamports de prioridad totales. Solución: primero ajusta el límite de CU correctamente.
- Ajuste de tarifas en Devnet sin sentido - congestión diferente a Mainnet. Solución: prueba la política en transacciones pequeñas de Mainnet.
Alternativas
| Alternativa | Usar Cuándo | No Usar Cuándo |
|---|---|---|
| Tarifa fija | Devnet tranquilo | Mainnet congestionado |
| Propina de Jito | Aterrizaje de paquetes | Transferencias simples |
| Acuerdos con validadores privados | Institucional | Carteras de consumidores |
| Deslizadores seleccionados por el usuario | UX transparente | Bots completamente automatizados |
Preguntas Frecuentes
¿Qué son los microLamports?
1e-6 lamports; el precio es por unidad de cómputo solicitada en la instrucción de presupuesto.
¿Cómo ven los usuarios la tarifa de prioridad?
Muestra SOL de prioridad estimada = microLamports * CU límite / 1e9 más la tarifa base.
¿Deben diferir las tarifas por tipo de instrucción?
Sí - mantén perfiles de tarifas por plantilla de transacción a partir de simulaciones.
¿Las transacciones fallidas pagan prioridad?
Si se incluyen en el bloque pero el programa falla, la tarifa de prioridad aún se cobra; las transacciones descartadas no pagan nada.
¿API de tarifas de Helius?
Mejora opcional sobre getRecentPrioritizationFees en bruto - abstraer detrás de una interfaz.
¿Tarifa de prioridad en devnet?
Generalmente innecesario - enfoca las pruebas en pequeñas cantidades en Mainnet.
¿Relación con la propina de Jito?
Rutas de pago separadas - algunas aplicaciones usan ambas para un aterrizaje competitivo.
¿Con qué frecuencia actualizar?
Por acción de envío del usuario durante la congestión; con menos frecuencia fuera de horas pico.
¿Puedo reembolsar las tarifas de prioridad?
No hay reembolso en cadena si la transacción aterriza fallida - diseña los límites y la simulación cuidadosamente.
¿Dónde se establece el límite de CU?
Ver Estimación de Unidades de Cómputo - establece el límite antes del precio.
Relacionado
- APIs de Tarifa de Prioridad y Simulación - datos RPC
- Tarifas de Prioridad - modelo conceptual
- Paquetes de Jito - propinas de paquetes
- Por qué las Transacciones Fallan en Aterrizar - caídas infravaloradas
Versiones de la Pila: Esta página fue 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, y LiteSVM 0.6.x.