# Estimaciones de tarifas combinadas de bitcoin

Combinación de estimadores de tarifas basados en el mempool y en el historial

Category: ingeniería
Source: https://strike.me/us/es/blog/blended-bitcoin-fee-estimations/

---

En bitcoin, las tarifas de transacción desempeñan un papel importante a la hora de garantizar una confirmación puntual y fiable de las transacciones. Sin embargo, estimar con precisión estas comisiones puede ser una tarea compleja, dada la dinámica siempre cambiante del mercado y la competencia entre las distintas demandas de transacciones. Esta dificultad se ve agravada por la escasez de espacio de bloques, un recurso limitado por el que compite cada transacción.

Dado que se minan nuevos bloques aproximadamente cada 10 minutos, tú, como remitente de la transacción, debes determinar la comisión que estás dispuesto a pagar para garantizar que tu transacción se incluya en la cadena de bloques. Por lo general, una comisión más alta se traduce en una mayor probabilidad de obtener una confirmación rápida, mientras que una comisión más baja puede provocar una confirmación tardía. Pero ¿cómo puedes estimar con precisión la comisión necesaria según tu preferencia temporal?

**En esta publicación, analizaremos algunas de las distintas formas de estimar las comisiones de las transacciones de bitcoin y cómo puedes combinarlas para crear una estrategia eficaz de estimación de comisiones.**


## Tipos de estimación de comisiones de bitcoin

Predecir con precisión las tendencias futuras de las comisiones sigue siendo un desafío. Aunque los monederos y los nodos emplean diversos métodos de estimación de comisiones, cada enfoque tiene sus ventajas y limitaciones. 

**Analizaremos dos métodos principales de estimación de comisiones: basados en el mempool y basados en el historial.**


### Estimación de comisiones basada en el mempool

La estimación de comisiones basada en el mempool se centra en analizar el estado actual del mempool, el conjunto de transacciones no confirmadas que compiten por espacio de bloques. Al examinar las tasas de comisión de las transacciones añadidas recientemente al mempool, este método proporciona información en tiempo real sobre el panorama actual de las comisiones. Este enfoque es especialmente útil en situaciones en las que se desea una confirmación rápida, ya que puede proporcionar estimaciones actualizadas basadas en la dinámica inmediata de las comisiones 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](https://mempool.space/). El equipo de [Muun](https://muun.com/) también utiliza su propio estimador de comisiones personalizado basado en el mempool, sobre el que puedes leer más [aquí](https://blog.muun.com/why-is-muuns-fee-estimator-more-efficient/). En su sitio web publican este gráfico, que muestra la diferencia que puede marcar un enfoque basado en el mempool:

![](https://www.datocms-assets.com/99305/1705601134-munn-fee-chart.png)

Como puedes ver, a la hora de estimar con precisión la comisión necesaria para que una transacción se confirme en el _siguiente_ bloque, los estimadores basados en el mempool como este funcionan bien; generan estimaciones más óptimas porque reaccionan mejor a los cambios a corto plazo.


### Estimación de comisiones basada en el historial

A diferencia de la estimación basada en el mempool, la estimación basada en el historial utiliza datos históricos para predecir las tendencias futuras de las comisiones, analizando datos de transacciones pasadas para identificar patrones y tendencias en las fluctuaciones de las comisiones. Al comprender la evolución histórica 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](https://github.com/bitcoin/bitcoin), la implementación de nodo de bitcoin más utilizada y la que usamos en Strike, utiliza este enfoque basado en el historial. Si quieres ver exactamente cómo genera sus estimaciones de comisiones, puedes consultar el [código fuente de estimación de comisiones de bitcoin Core](https://github.com/bitcoin/bitcoin/blob/master/src/policy/fees.h). Pero, para explicarlo de forma sencilla, el proceso de estimación incluye:

- Agrupar las transacciones en categorías según sus tasas de comisión similares
- Registrar cuánto tardan en minarse las transacciones de estas categorías
- Utilizar distintos conjuntos de datos para registrar esta información en varios horizontes temporales (corto, medio y largo)
- Aplicar un factor de decaimiento a cada conjunto de datos para dar más peso a las transacciones recientes
- Utilizar umbrales de éxito para distintos horizontes temporales
- Calcular estimaciones según el número de transacciones confirmadas en el número de bloques objetivo o menos

La estimación de comisiones de bitcoin Core utiliza una media móvil y varios parámetros para proporcionar estimaciones de tasas de comisión en distintas condiciones. Dentro de este sistema, puedes seleccionar entre dos modos de estimación: económico y conservador.

**Modo económico:** Este modo estima las comisiones basándose en los bloques recientes, con el objetivo de priorizar comisiones más bajas. Responde mejor a los cambios más recientes del mercado de comisiones, por lo que es adecuado para situaciones en las que estás dispuesto a asumir tiempos de confirmación más largos a cambio de unas comisiones potencialmente más bajas.

**Modo conservador:** Este modo proporciona estimaciones con mayor probabilidad de garantizar una confirmación más rápida, ya que tiene en cuenta un historial de transacciones más extenso. Sin embargo, responde menos a las caídas de las tasas de comisión a corto plazo, lo que a menudo da lugar a recomendaciones de comisiones más altas. Este modo es más adecuado si quieres priorizar el tiempo de confirmación de la transacción por encima del costo de la comisión.

Ambos modos buscan equilibrar el costo y el tiempo de confirmación según las distintas preferencias de los usuarios y las condiciones del mercado.


## Encontrar el equilibrio adecuado
En Strike, realizamos muchas transacciones de bitcoin en nombre de nuestros usuarios. Según la situación, tenemos distintos requisitos en cuanto a los tiempos de confirmación. Veamos un par de ejemplos breves:

**Agrupación de transacciones:** Cuando transmitimos transacciones en la cadena de bloques en nombre de nuestros usuarios, utilizamos la agrupación de transacciones para optimizar el uso del espacio de bloques. En general, nuestro algoritmo de agrupación busca transmitir un grupo de transacciones en cada bloque. Para que esto sea eficaz, necesitamos garantías sólidas de que nuestra transacción llegará realmente al siguiente bloque, por lo que utilizar un estimador de comisiones basado en el mempool funciona mejor en este caso de uso.

**Apertura y cierre de canales de Lightning:** En cambio, cuando abrimos y cerramos canales de Lightning, es posible que podamos esperar más tiempo, por lo que una estimación basada en el historial, como las de bitcoin Core, puede ser más adecuada, ya que nos permite apuntar de forma más eficaz a bloques más lejanos en el futuro.


## Estimación combinada de comisiones

Dados los beneficios y las limitaciones de cada enfoque individual, utilizamos un método combinado de estimación de comisiones que aprovecha las ventajas tanto de las estimaciones basadas en el mempool como de las basadas en el historial.

Para las transacciones que requieren confirmación inmediata dentro de los próximos bloques, damos prioridad a las estimaciones basadas en el mempool por su precisión en tiempo real.

Para las transacciones con objetivos de confirmación más flexibles y lejanos en el futuro, nos basamos en estimaciones basadas en el historial para proporcionar un rango de comisiones más estable y predecible.

Este enfoque combinado equilibra la precisión en tiempo real y la previsibilidad a largo plazo, lo que nos permite optimizar eficazmente las comisiones de las transacciones en una amplia variedad de situaciones.


## Mejorar las estimaciones de comisiones de LND

**En el resto de esta publicación, veremos cómo combinamos las dos técnicas: la estimación de comisiones basada en el mempool y la basada en el historial.**

Dado que utilizamos principalmente [Lightning Network Daemon (LND)](https://github.com/lightningnetwork/lnd) para nuestras necesidades relacionadas con los nodos de Lightning, nos centraremos en él; sin embargo, se podría aplicar un enfoque similar a otras implementaciones de nodos.


### Estimaciones de comisiones personalizadas con LND

De forma predeterminada, un nodo LND conectado a una instancia de bitcoin Core utiliza el RPC [`estimatesmartfee`](https://developer.bitcoin.org/reference/rpc/estimatesmartfee.html) de bitcoin Core para proporcionar sus estimaciones de comisiones. Como vimos anteriormente, esto dista mucho de ser ideal en algunas situaciones, ya que sus estimaciones se basan únicamente en datos históricos.

¿No sería mejor poder integrar un estimador de comisiones diferente en LND? Pues tenemos suerte, porque los ingenieros que trabajan en LND ya habían pensado en ello y, por supuesto, hicieron configurable el servicio de estimación de comisiones.

Puede que no sea evidente de inmediato, pero si consultas el [archivo de configuración de ejemplo](https://github.com/lightningnetwork/lnd/blob/master/sample-lnd.conf) incluido en el código fuente de LND, encontrarás este bloque de código:

```
; Optional URL for external fee estimation. Si no se especifica ninguna URL, el método
; de estimación de comisiones dependerá del backend y la red seleccionados. Debe configurarse
; para neutrino en la red principal.
; Default:
;   feeurl=
; Example:
;   feeurl=https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json
```

Como puedes ver, existe una opción de configuración `feeurl`, que se puede establecer en una URL que proporcione estimaciones de comisiones. Y si visitas la [URL de ejemplo](https://nodes.lightning.computer/fees/v1/btc-fee-estimates.json) del mismo fragmento, llegarás a una página que proporciona un JSON con este aspecto:

```
{
  "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
  }
}

```

Al examinarlo un poco, observamos que proporciona una serie de estimaciones de objetivos de confirmación. En el ejemplo anterior, la comisión estimada para que una transacción se mine dentro de los próximos 4 bloques es de 96.148 (es decir, comisión por kb; esto se traduce en una tasa de comisión de aproximadamente 96 sats/vbyte).

Esto está bastante bien. Esto significa que podemos indicar cualquier URL que devuelva un JSON con este formato en la configuración `feeurl`, por lo que, en teoría, podríamos conectar cualquier sistema de estimación de comisiones, siempre que pueda devolver estimaciones de comisiones en el formato esperado.


### Uso selectivo de estimaciones basadas en el mempool y en el historial

Nuestro objetivo era utilizar estimaciones de comisiones basadas en el mempool para las transacciones que debieran confirmarse dentro de los próximos bloques, pero seguir utilizando estimaciones basadas en el historial para las transacciones que debieran confirmarse más adelante.

En cuanto a los 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 utilizarlo para nuestras estimaciones de comisiones a corto plazo. Y, para las estimaciones a más largo plazo, creemos que bitcoin Core hace un trabajo bastante bueno, así que queríamos seguir usándolo.

Para lograrlo, creamos un [estimador de comisiones combinado de bitcoin](https://github.com/LN-Zap/bitcoin-blended-fee-estimator). Se trata de un servicio básico que proporciona un único endpoint que ofrece datos JSON con estimaciones de comisiones en el formato esperado por LND.

Las estimaciones para un objetivo de confirmación de entre 1 y 6 las proporciona la [API de Mempool](https://mempool.space/docs/api/rest), mientras que las estimaciones para objetivos de confirmación más lejanos las proporciona bitcoin Core mediante la [API de Esplora](https://github.com/Blockstream/esplora/blob/master/API.md).

De forma predeterminada, se conecta a las API públicas de [mempool.space](https://mempool.space/) y [blockstream.info](https://github.com/Blockstream/esplora/blob/master/API.md), pero puedes configurarlo para que se conecte directamente a tus propias instancias de Mempool y Esplora, reduciendo así la dependencia de estas API de terceros alojadas.

### Ejecutar el servicio combinado de estimación de comisiones

Puedes ejecutar este servicio en tu propia infraestructura junto con tu nodo de LND. O puedes usar nuestra versión alojada para empezar rápidamente (sigue leyendo para obtener más información).

Si tienes Docker configurado en tu equipo, puedes probarlo ejecutando la [imagen de Docker](https://hub.docker.com/repository/docker/lnzap/lnd-mempoolspace) que proporcionamos para mayor comodidad.

```
docker run -p 3000:3000 lnzap/bitcoin-blended-fee-estimator:latest
```

Cuando se haya descargado la imagen de Docker, deberías ver el siguiente resultado, que indica que el servicio está activo y en ejecución.

```
---
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
```

A continuación, simplemente accede a http://localhost:3000/v1/fee-estimates, donde deberías ver las estimaciones de tarifas actuales, bien formateadas para LND.

Puedes establecer esta URL en tu archivo de configuración de LND y reiniciar tu nodo de LND:

```
; URL for external fee estimation.
feeurl=http://localhost:3000/v1/fee-estimates
```

Con esto configurado, LND usará las estimaciones de comisiones de Mempool para las estimaciones de comisiones del siguiente bloque, y las estimaciones de Esplora para las estimaciones a más largo plazo.

### Aprovechar el servicio de estimación de comisiones combinado

Como nos hemos conectado directamente a LND, este lo usará para todas sus estimaciones internas de comisiones que tienen como objetivo un número específico de bloques en el futuro, como realizar transacciones on-chain, abrir canales, ejecutar barridos, etc. Además, todo lo que se conecte a LND o se base en él también se beneficiará de las nuevas fuentes de estimación de comisiones. Así tendrás un método coherente para generar estimaciones de comisiones en toda tu infraestructura.

Por ejemplo, si usas [Lightning Loop](https://lightning.engineering/loop/) para reequilibrar canales, las estimaciones de comisiones que proporcione el servicio de Loop también usarán nuestras fuentes de comisiones personalizadas, ya que recurre a LND para obtener esas estimaciones (descubrimos que esto redujo considerablemente nuestros costes de reequilibrado al evitar que Loop pagara de más en comisiones on-chain).

O, si estás creando una cartera u otro servicio sobre LND, también usará las fuentes personalizadas de estimación de comisiones.

En esencia, todo lo que llame al [RPC EstimateFee](https://lightning.engineering/api-docs/api/lnd/wallet-kit/estimate-fee) de LND —ya sea directa o indirectamente— usará la nueva fuente de estimación de comisiones.


## Un servicio de estimación de comisiones para LND alojado por Strike

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 lograr que las transacciones se minen. Esto ayuda a mantener bajos los costes para nuestros usuarios y a aliviar la presión de las comisiones en la cadena de bloques de bitcoin.

Pensamos que podría ser útil para otros operadores de nodos, proveedores de servicios de cartera o desarrolladores, así que hemos publicado el código como código abierto:

https://github.com/LN-Zap/bitcoin-blended-fee-estimator

Además, queríamos que te resultara muy sencillo probarlo sin tener que implementar una instancia del servicio en tu propia infraestructura, así que configuramos una versión alojada del servicio para que cualquiera pueda usarla. Puedes acceder a él en la siguiente URL:

https://bitcoinchainfees.strike.me

Para usarlo, simplemente añade o actualiza el ajuste `feeurl` en tu archivo lnd.conf para que apunte al endpoint proporcionado por el servicio:

```
feeurl=https://bitcoinchainfees.strike.me/v1/fee-estimates
```

¡Esperamos que la herramienta de estimación de comisiones combinada te resulte útil! Cuéntanos si te funciona o si tienes alguna pregunta o sugerencia para mejorarla.

## Mejoras futuras

Los problemas de las estimaciones de comisiones actuales de bitcoin Core basadas en el historial son bastante conocidos y están bien entendidos, y existen varios esfuerzos y propuestas para mejorarlas.

Una propuesta reciente es la idea de la estimación de comisiones por clúster, surgida de los debates de la comunidad más amplia de bitcoin. Este enfoque busca abordar algunas de las complejidades del mecanismo Child Pays For Parent (CPFP) agrupando las transacciones vinculadas y evaluando sus tasas de comisión conjuntas. Para comprender con más detalle el impacto del mecanismo CPFP en la estimación de comisiones y la propuesta de estimación de comisiones por clúster, vale la pena leer este [artículo de bitcoin Optech](https://bitcoinops.org/en/topics/cluster-mempool/) o consultar este [resumen más detallado de la propuesta](https://delvingbitcoin.org/t/an-overview-of-the-cluster-mempool-proposal/393) de Suhas Daftuar.

Aunque ninguna técnica de estimación de comisiones será perfecta, dada la imposibilidad de predecir el futuro, podemos seguir implementando soluciones más avanzadas, sólidas y adaptables que aporten mejoras generales a la estimación de comisiones.

**Cuanto más optimicemos colectivamente nuestras comisiones por transacciones on-chain, mejor será para todos**; al reducir los pagos excesivos de comisiones, podemos ayudar a evitar el ciclo autosostenido en el que quienes pagan comisiones innecesariamente altas pueden hacer que las estimaciones de comisiones sigan aumentando.

From Strike's blog — https://strike.me/us/es/blog/
