APIs de Tarifa de Prioridad y Simulación
Utiliza getRecentPrioritizationFees, simulateTransaction y las APIs de tarifas del proveedor para estimar las unidades de cómputo y las tarifas de prioridad antes de enviar transacciones.
Busca en todas las páginas de la documentación
Utiliza getRecentPrioritizationFees, simulateTransaction y las APIs de tarifas del proveedor para estimar las unidades de cómputo y las tarifas de prioridad antes de enviar transacciones.
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
import { createSolanaRpc, getBase64EncodedWireTransaction } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
await rpc.getRecentPrioritizationFees([]).send();
await rpc.simulateTransaction(encodedTx, {
commitment: "processed",
sigVerify: false,
}).send();Cuándo usar esto:
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
// Tarifas de prioridad recientes para cuentas relevantes (vacío = muestra global)
const fees = await rpc.getRecentPrioritizationFees([]).send();
const recent = fees.map((f) => f.prioritizationFee).filter((n) => n > 0);
recent.sort((a, b) => a - b);
const p75 = recent[Math.floor(recent.length * 0.75)] ?? 0;
console.log("precio sugerido de microLamports por CU (p75):", p75);
// Simular tx firmada o parcialmente firmada (wire en base64)
const simulation = await rpc
.simulateTransaction("BASE64_WIRE_TX", {
commitment: "processed",
sigVerify: false,
replaceRecentBlockhash: true,
})
.send();
console.log("err:", simulation.value.err);
console.log("units:", simulation.value.unitsConsumed);
console.log("logs:", simulation.value.logs?.slice(0, 5));Lo que esto demuestra:
unitsConsumed y registros sin confirmar estado (excepto cuando está configurado).replaceRecentBlockhash ayuda a simular transacciones con blockhashes caducados.getRecentPrioritizationFees devuelve observaciones de tarifas por slot para conjuntos de bloqueo de cuentas.simulateTransaction ejecuta SVM contra una instantánea del banco en el nivel de compromiso elegido.priorityFeeEstimate con estadísticas de percentiles.| Opción | Efecto |
|---|---|
sigVerify: false | Simulación más rápida, omite las comprobaciones de firma |
replaceRecentBlockhash | Actualiza el blockhash para transacciones obsoletas |
innerInstructions | Devuelve el desglose de CPI |
accounts | Devuelve los estados de cuenta posteriores a la simulación |
// Después de la simulación, establece la ix del presupuesto de cómputo con margen
const units = simulation.value.unitsConsumed ?? 200_000;
const limit = Math.ceil(units * 1.1);
const microLamports = Math.max(p75, 1_000);sigVerify falso ocultando errores del firmante - falsos positivos. Solución: pre-vuelo final con sigVerify: true antes de enviar a mainnet.unitsConsumed - el límite predeterminado de 200k CU puede ser demasiado bajo. Solución: establecer un límite explícito a partir de la simulación + 10% de margen.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Tarifa de prioridad fija | Bajo tráfico en devnet | Períodos de congestión en mainnet |
| APIs de propinas de Jito | Agrupación de confirmaciones | Transferencias simples |
| Simulación de Surfpool | DeFi precisa de fork | Aplicaciones solo de billetera |
CLI solana confirm -v | Depuración post-envío | Planificación pre-envío |
Micro-lamports por unidad de cómputo para la instrucción de tarifa de prioridad: multiplique por el presupuesto de CU solicitado para obtener el total de lamports de prioridad.
Por lote de transacciones durante la congestión; con menos frecuencia en devnet con poco tráfico.
No hay gasto en la cadena: solo cómputo RPC; algunos proveedores limitan las simulaciones intensivas.
A menudo sí con sigVerify: false - útil para flujos de firma parcial.
La simulación informa los valores de las instrucciones SetComputeUnitLimit y SetComputeUnitPrice.
Helius y otros ofrecen estimaciones de percentiles; recurra a getRecentPrioritizationFees para portabilidad.
Retroalimentación más rápida durante la depuración iterativa: igualar el compromiso de envío para comprobaciones finales.
Sí, si el programa devuelve un error por salida insuficiente: lea los registros y el campo err.
Utilice getBase64EncodedWireTransaction al construir transacciones con pipelines de kit antes de simular.
Consulte Establecer Tarifas de Prioridad y Estimar Unidades de Cómputo.
Versiones de Stack: Esta página se escribió 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.
Revisado por Chris St. John·Última actualización: 16 jul 2026