Skip to main content
El método RPC getRecentPrioritizationFees proporciona información sobre las comisiones de priorización pagadas en bloques recientes de la red Solana. Al examinar estas comisiones, los desarrolladores pueden tomar decisiones más informadas sobre la comisión adicional (comisión de prioridad) que deben agregar a sus transacciones para aumentar la probabilidad de que se procesen rápidamente, especialmente durante períodos de alta actividad en la red. Los nodos suelen almacenar en caché los datos de las comisiones de priorización de hasta 150 bloques recientes.

Casos de uso comunes

  • Estimación dinámica de comisiones: Determina una comisión de prioridad competitiva para una transacción observando qué comisiones han funcionado recientemente.
  • Análisis de congestión: Comprende el estado actual de la congestión de la red al observar el nivel de las comisiones de prioridad que se están pagando.
  • Integración con billeteras: Permite que las billeteras sugieran comisiones de prioridad adecuadas a los usuarios según las condiciones recientes de la red.
  • Bots de arbitraje: Para operaciones urgentes como el arbitraje, establecer una comisión de prioridad óptima es fundamental para ejecutarlas a tiempo.

Parámetros de la solicitud

  1. lockedWritableAccounts (array de string, opcional):
    • Un arreglo de claves públicas de cuentas codificadas en base 58 que tu transacción pretende bloquear para escritura.
    • Puedes proporcionar un máximo de 128 direcciones.
    • Si se proporciona, el método devuelve las comisiones de priorización pagadas por transacciones que bloquearon todas las cuentas especificadas como modificables.
    • Si se omite o se pasa un arreglo vacío, el método devuelve una vista más general de las comisiones de priorización observadas en bloques recientes, sin limitarse a ningún conjunto específico de cuentas.

Estructura de la respuesta

El campo result de la respuesta JSON-RPC es un arreglo de objetos de comisiones de priorización. Cada objeto detalla las comisiones de un slot reciente específico y tiene la siguiente estructura:
  • slot (u64): El número de slot en el que se procesaron las transacciones que aportaron estos datos de comisiones.
  • prioritizationFee (u64): La comisión de priorización mínima (en microlamports por Unidad de Cómputo) pagada por al menos una transacción en este slot (y que coincide con el filtro lockedWritableAccounts, si corresponde). Un valor de 0 suele indicar que ninguna transacción de ese slot que coincidiera con los criterios pagó una comisión de prioridad adicional sobre la comisión base, o que el nodo no observó ninguna para las cuentas indicadas.

Ejemplos

1. Obtener comisiones de priorización globales recientes

Este ejemplo obtiene una lista general de comisiones de priorización recientes sin especificar ninguna cuenta bloqueada.

2. Obtener comisiones de priorización recientes para cuentas modificables específicas

Este ejemplo obtiene las comisiones de priorización relevantes para una transacción que necesita bloquear dos cuentas específicas para escritura.

Consejos para desarrolladores

  • Unidades de comisión: Las comisiones de priorización se expresan en microlamports (0.000001 lamports) por Unidad de Cómputo (CU).
  • Ventana de caché: Los nodos RPC suelen almacenar estas comisiones en caché durante unos 150 bloques. Esto significa que estás consultando una ventana histórica relativamente corta (aproximadamente de 1 a 2 minutos).
  • Comisiones de cero: Un valor prioritizationFee de 0 no significa necesariamente que no se pagaron comisiones, sino que, para el slot y las cuentas indicados, las transacciones de la muestra no incluyeron una comisión de prioridad o estuvieron por debajo de un umbral que el nodo considera significativo.
  • Uso estratégico: No elijas simplemente la comisión reciente más alta. Analiza la distribución (por ejemplo, la mediana o el percentil 75 de las comisiones distintas de cero) para tomar una decisión rentable. Pagar de más no garantiza una inclusión más rápida después de cierto punto si el bloque ya está lleno de transacciones de alta prioridad.
  • Unidades de Cómputo: La comisión de prioridad total de tu transacción será prioritizationFee_per_CU * your_transaction_compute_units. También debes establecer el límite de unidades de cómputo de tu transacción (ComputeBudgetProgram.setComputeUnitLimit) y el precio (ComputeBudgetProgram.setComputeUnitPrice).
Usar getRecentPrioritizationFees de forma eficaz puede mejorar significativamente la fiabilidad de la confirmación de transacciones en condiciones dinámicas de la red.