Estimaciones combinadas de comisiones de Bitcoin
Combinando estimadores de comisiones basados en el mempool y en el historial
Tom Kirkpatrick
Jan 23, 2024
En Bitcoin, las comisiones de transacción juegan un papel importante en garantizar la confirmación oportuna y confiable de las transacciones. Sin embargo, estimar estas comisiones con precisión puede ser una tarea desafiante, dadas las dinámicas de mercado siempre cambiantes y las demandas de transacciones competidoras. Este desafío se ve aún más complicado por la escasez de espacio en los bloques, un recurso finito por el que compiten todas las transacciones.
Con nuevos bloques minándose aproximadamente cada 10 minutos, depende de ti, el remitente de la transacción, determinar la comisión que estás dispuesto a pagar para asegurar la inclusión de tu transacción en la blockchain. Una comisión más alta generalmente se traduce en una mayor probabilidad de una confirmación rápida, mientras que una comisión más baja puede llevar a una confirmación retrasada. Pero, ¿cómo puedes estimar con precisión la comisión requerida según tu preferencia de tiempo?
En esta publicación, analizaremos algunas de las diferentes formas de estimar las comisiones de transacción de bitcoin y cómo puedes combinarlas en una estrategia efectiva de estimación de comisiones.
Predecir con precisión las tendencias futuras de las comisiones sigue siendo un desafío. Aunque las billeteras y los nodos emplean varios métodos de estimación de comisiones, cada enfoque tiene sus fortalezas y limitaciones.
Hay dos métodos principales de estimación de comisiones que analizaremos: basado en el mempool y basado en el historial.
La estimación de comisiones basada en el mempool se centra en analizar el estado actual del mempool, la colección de transacciones no confirmadas que compiten por espacio en los bloques. Al examinar las tasas de comisión de las transacciones recientemente añadidas al mempool, este método proporciona información en tiempo real sobre el panorama actual de comisiones. Este enfoque es particularmente útil para situaciones donde se desea una confirmación rápida, ya que puede proporcionar estimaciones actualizadas basadas en las dinámicas inmediatas del contenido real del mempool.
Un buen ejemplo de estimación de comisiones basada en el mempool es el proyecto de código abierto Mempool. El equipo de Muun también usa su propio estimador de comisiones basado en el mempool, del cual puedes leer más aquí. Producen este gráfico en su sitio web que muestra cuánta diferencia puede hacer un enfoque basado en el mempool:
Como puedes ver, cuando se trata de estimar con precisión la comisión para que una transacción sea confirmada en el próximo bloque, los estimadores basados en el mempool como este hacen un buen trabajo; producen estimaciones que son más óptimas ya que son más reactivas a los cambios a corto plazo.
En contraste con la estimación basada en el mempool, la estimación de comisiones basada en el historial utiliza datos históricos para predecir las tendencias futuras de comisiones, analizando datos de transacciones pasadas para identificar patrones y tendencias en las fluctuaciones de comisiones. Al entender los movimientos históricos de las comisiones, la estimación basada en el historial puede proporcionar estimaciones más estables y predecibles para las transacciones con objetivos de confirmación más flexibles.
Bitcoin Core, la implementación de nodo de Bitcoin más utilizada, y la que usamos en Strike, utiliza este enfoque basado en el historial. Si deseas ver exactamente cómo genera sus estimaciones de comisiones, puedes leer el código fuente de estimación de comisiones de Bitcoin Core. Pero para desglosarlo en términos simples, el proceso de estimación involucra:
La estimación de comisiones de Bitcoin Core utiliza un promedio móvil y varios parámetros para proporcionar estimaciones de tasas de comisión bajo diferentes condiciones. Dentro de esto, hay dos modos de estimación que puedes seleccionar: económico y conservador.
Modo Económico: Este modo estima las comisiones basándose en bloques recientes, con el objetivo de optimizar por comisiones más bajas. Es más receptivo a los cambios más recientes en el mercado de comisiones, lo que lo hace adecuado para situaciones donde estás dispuesto a arriesgar tiempos de confirmación más largos por comisiones potencialmente más bajas.
Modo Conservador: Este modo proporciona estimaciones que son más propensas a asegurar una confirmación más rápida, ya que considera un historial de transacciones más largo. Sin embargo, es menos receptivo a caídas a corto plazo en las tasas de comisión, lo que a menudo resulta en recomendaciones de comisiones más altas. Este modo es mejor si deseas priorizar el tiempo de confirmación de la transacción sobre el costo de la comisión.
Ambos modos buscan equilibrar el costo y el tiempo de confirmación según las diferentes preferencias del usuario y las condiciones del mercado.
En Strike, realizamos muchas transacciones de Bitcoin en nombre de nuestros usuarios. Dependiendo del escenario, tenemos diferentes requisitos para nuestros tiempos de confirmación. Veamos un par de ejemplos breves:
Agrupación de transacciones: Cuando transmitimos transacciones on-chain en nombre de nuestros usuarios, usamos la agrupación de transacciones para optimizar nuestro uso del espacio en los bloques. En términos generales, nuestro algoritmo de agrupación apunta a transmitir un lote de transacciones cada bloque. Para que esto sea efectivo, necesitamos garantías fuertes de que nuestra transacción realmente entrará en el próximo bloque, por lo que usar un estimador de comisiones basado en el mempool funciona mejor para este caso de uso.
Apertura/cierre de canales Lightning: Por el contrario, cuando estamos abriendo y cerrando canales lightning, podemos esperar más tiempo, y por lo tanto una estimación basada en el historial, como las de Bitcoin Core, puede ser más apropiada ya que nos permite apuntar más efectivamente a bloques más lejanos en el futuro.
Dadas las ventajas y limitaciones de cada enfoque individual, utilizamos un método de estimación combinada de comisiones que aprovecha las ventajas de las estimaciones basadas en el mempool y en el historial.
Para transacciones inmediatas que requieren una confirmación rápida dentro de los próximos bloques, priorizamos las estimaciones basadas en el mempool por su precisión en tiempo real.
Para transacciones con objetivos de confirmación más flexibles en el futuro, confiamos en las estimaciones basadas en el historial para proporcionar un rango de comisiones más estable y predecible.
Este enfoque combinado logra un equilibrio entre precisión en tiempo real y previsibilidad a largo plazo, lo que nos permite optimizar las comisiones de transacción de manera efectiva en una amplia variedad de escenarios.
En el resto de esta publicación, veremos cómo combinamos las dos técnicas: estimación de comisiones basada en el mempool y basada en el historial.
Dado que usamos principalmente el Daemon de la Red Lightning (LND) para nuestras necesidades de nodo Lightning, nos centraremos en eso; sin embargo, se podría tomar un enfoque similar para otras implementaciones de nodos.
De forma predeterminada, un nodo LND que está conectado a una instancia de Bitcoin Core usará el estimatesmartfee
RPC de Bitcoin Core para proporcionar sus estimaciones de comisiones. Como vimos anteriormente, esto es menos que ideal en algunas situaciones, ya que sus estimaciones solo se basan en datos históricos.
¿No sería mejor si pudiéramos conectar un estimador de comisiones diferente en LND? Bueno, tenemos suerte porque los ingenieros que trabajan en LND pensaron en eso y, por supuesto, ya hicieron configurable el servicio de comisiones.
Puede que no sea inmediatamente aparente, pero si miras el archivo de configuración de muestra proporcionado en el código fuente de LND, encontrarás este bloque de código:
; Optional URL for external fee estimation. If no URL is specified, the method
; for fee estimation will depend on the chosen backend and network. Must be set
; for neutrino on mainnet.
; Default:
; feeurl=
; Example:
; feeurl=https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json
Como puedes ver, hay una opción de configuración feeurl, que se puede establecer en una URL que proporcione estimaciones de comisiones. Y si visitamos la URL de ejemplo de ese mismo fragmento, llegarás a una página que sirve un json que se ve así:
{
"current_block_hash": "0000000000000000000075b86...6303e",
"fee_by_block_target": {
"2": 141428,
"4": 96148,
"85": 82688,
"121": 79068
"24": 171819,
"25": 86680,
"144": 58520,
"504": 56192,
"1008": 37896
}
}
Examinando esto un poco, notamos que proporciona una serie de estimaciones de objetivos de confirmación. Del ejemplo anterior, la comisión estimada para que una transacción sea minada dentro de los próximos 4 bloques es de 96,148 (eso es comisión por kb, lo que se traduce en una tasa de comisión de ~96 sats/vbyte).
Esto es bastante bueno. Significa que podemos apuntar la configuración feeurl
a cualquier URL que devuelva json siguiendo este formato, por lo que, en teoría, podríamos conectar cualquier sistema de estimación de comisiones a eso, siempre que pueda devolver estimaciones de comisiones en el formato esperado.
Nuestro objetivo era usar estimaciones de comisiones basadas en el mempool para transacciones que deberían ser confirmadas dentro de los próximos bloques, pero seguir usando estimaciones basadas en el historial para transacciones que deberían ser confirmadas más adelante en el futuro.
Cuando se trata de estimadores de comisiones basados en el mempool, creemos que el proyecto de código abierto Mempool es una de las mejores herramientas disponibles, por lo que queríamos usar eso para nuestras estimaciones de comisiones a corto plazo. Y para las estimaciones a largo plazo, creemos que Bitcoin Core hace un buen trabajo, así que queríamos seguir usándolo.
Para lograr esto, creamos un Estimador Combinado de Comisiones de Bitcoin. Este es un servicio básico que proporciona un único endpoint que sirve json con estimaciones de comisiones en el formato esperado para LND.
Las estimaciones para un objetivo de confirmación de 1 a 6 son proporcionadas por la API de Mempool, mientras que las estimaciones para objetivos de confirmación más lejanos en el futuro son proporcionadas por Bitcoin Core a través de la API de Esplora.
Por defecto, se conecta a las APIs públicas de mempool.space y blockstream.info, sin embargo, se puede configurar para conectarse directamente a tus propias instancias de Mempool y Esplora para reducir la dependencia de estas APIs de terceros alojadas.
Puedes ejecutar este servicio en tu propia infraestructura junto a tu nodo LND. O, puedes usar nuestra versión alojada para comenzar rápidamente (sigue leyendo para más detalles).
Si tienes Docker configurado en tu máquina, puedes probarlo ejecutando la imagen de Docker que proporcionamos para tu conveniencia.
docker run -p 3000:3000 lnzap/bitcoin-blended-fee-estimator:latest
Después de que la imagen de Docker se haya descargado, deberías ver la siguiente salida indicando que el servicio está en funcionamiento.
---
Using port: 3000
Using base URL: http://localhost:3000
Using Esplora base URL: https://blockstream.info
Using Mempool base URL: https://mempool.space
Using Mempool estimation depth: 6
Using fee multiplier: 1
Using cache stdTTL: 15
Using cache checkperiod: 20
---
Fee Estimates available at http://localhost:3000/v1/fee-estimates
Luego, simplemente navega a http://localhost:3000/v1/fee-estimates donde deberías ver las estimaciones de comisiones actuales, formateadas adecuadamente para LND.
Puedes configurar esta URL en tu archivo de configuración de LND y reiniciar tu nodo LND:
; URL for external fee estimation.
feeurl=http://localhost:3000/v1/fee-estimates
Con esto en su lugar, LND ahora usará estimaciones de comisiones de Mempool para estimaciones de comisiones del próximo bloque, y estimaciones de Esplora para estimaciones más lejanas en el futuro.
Debido a que nos hemos conectado directamente a LND, usará esto para todas sus estimaciones internas de comisiones que apunten a un número específico de bloques en el futuro, como hacer transacciones on-chain, abrir canales, sweeps, etc. Además, cualquier cosa que se conecte o construya sobre LND también se beneficiará de las nuevas fuentes de estimación de comisiones. Así que tendrás un enfoque consistente para generar estimaciones de comisiones en toda tu pila.
Por ejemplo, si estás utilizando Lightning Loop para reequilibrar canales, las estimaciones de comisiones proporcionadas por el servicio Loop también usarán nuestras fuentes de comisiones personalizadas, ya que llama a LND para obtener esas estimaciones (descubrimos que esto reduce drásticamente nuestros costos de reequilibrio al evitar que Loop pague de más en comisiones on-chain).
O si estás construyendo una billetera u otro servicio sobre LND, eso también usará las fuentes de estimación de comisiones personalizadas. Esencialmente, cualquier cosa que llame al RPC EstimateFee de LND, ya sea directamente o indirectamente, usará la nueva fuente de estimación de comisiones.
Usar una combinación de estimaciones de comisiones basadas en el mempool y en el historial en nuestras herramientas nos ha proporcionado mejores estimaciones para que las transacciones sean minadas. Esto ayuda a mantener los costos bajos para nuestros usuarios, así como a aliviar la presión de las comisiones en la blockchain de Bitcoin.
Pensamos que podría ser útil para otros operadores de nodos, proveedores de servicios de billetera o desarrolladores, así que hemos abierto el código:
https://github.com/LN-Zap/bitcoin-blended-fee-estimator
Además, queríamos hacerlo súper simple para que lo pruebes sin necesidad de desplegar una instancia del servicio en tu propia infraestructura, así que hemos configurado una versión alojada del servicio para que cualquiera lo use. Puedes acceder a él en la siguiente URL:
https://bitcoinchainfees.strike.me
Para usarlo, simplemente agrega/actualiza la configuración feeurl
en tu archivo lnd.conf para apuntar al endpoint proporcionado por el servicio:
feeurl=https://bitcoinchainfees.strike.me/v1/fee-estimates
¡Esperamos que encuentres útil la herramienta de estimación combinada de comisiones! Haznos saber si funciona para ti o si tienes alguna pregunta o sugerencia para mejoras.
Los problemas con las estimaciones de comisiones basadas en el historial de Bitcoin Core son bastante conocidos y entendidos, y hay múltiples esfuerzos y propuestas para mejorar esto.
Una propuesta reciente es la idea de Estimación de Comisiones por Clústeres, que surge de discusiones en la comunidad de Bitcoin en general. Este enfoque busca abordar algunas de las complejidades del mecanismo Child Pays For Parent (CPFP) agrupando transacciones vinculadas y evaluando sus tasas de comisión colectivas. Para entender el impacto del mecanismo CPFP en la estimación de comisiones y la propuesta de Estimación de Comisiones por Clústeres en más detalle, vale la pena leer este artículo de Bitcoin Optech, o revisar este resumen más detallado de la propuesta de Suhas Daftuar.
Aunque ninguna técnica de estimación de comisiones será perfecta dada la tarea imposible de predecir el futuro, podemos continuar implementando soluciones más avanzadas, robustas y adaptativas que ofrezcan mejoras generales al problema de la estimación de comisiones.
Cuanto más colectivamente optimicemos nuestras comisiones de transacciones on-chain, mejor para todos; al reducir el pago excesivo de comisiones, podemos ayudar a evitar el ciclo auto perpetuante en el que las personas que pagan comisiones innecesariamente altas pueden impulsar las estimaciones de comisiones aún más alto.
© 2024 Strike
De cero a bitcoin.
Legal