Feesim es un programa de estimación de tarifas de bitcoin. A diferencia de la estimación de tarifas en Bitcoin Core, Feesim hace uso de la tasa actual de llegada del estado de Mempool y la transacción, lo que permite que responda a los aumentos de tráfico. Las estimaciones de tarifas se pueden ver aquí.
La estimación de la tarifa en Teseim está basada en modelos; Las estimaciones se obtienen de la simulación de Monte Carlo de un modelo de cola de la red Bitcoin. En esencia, encontramos la solución a la pregunta: "Si suponemos que los mineros priorizan las transacciones por tasa de tarifas, sujeto a un tamaño de bloque máximo y una tasa de tarifa mínima, y que las transacciones llegan a la misma tarifa que la hora pasada, entonces dada la hora dada la Tamaño actual de Mempool, ¿qué tasa de tarifas se requiere para que se confirme una transacción dentro de los bloques X (con probabilidad de éxito P)? "
Esto permite que el algoritmo de estimación acomode las variaciones en las condiciones de la red. Por ejemplo, si no se ha encontrado un bloque en una hora y hay una gran acumulación de Mempool, el algoritmo debería reconocer eso y aumentar las estimaciones de tarifas. Alternativamente, si hay paquetes diarios en la tasa de llegada de transacciones, las estimaciones de tarifas también deben reflejar eso, lo que permite al usuario pagar tarifas más bajas durante los períodos de calma.
Feesim recopila datos de red de bitcoin a través de la API JSON-RPC de Bitcoin Core, y calcula las estimaciones para:
(txFeerate, txSize)
*Ver Commit D895E64
Junto con el estado de Mempool actual, se utilizan para realizar la simulación y obtener las estimaciones de tarifas. Aquí se pueden ver estimaciones de la política minera, y las tasas de bytes de llegada de la transacción en función de la tasa de tarifas se pueden ver aquí.
Durante la operación normal, Feesim predecirá el tiempo de confirmación de cada transacción y mantendrá una cuenta de la proporción de transacciones que cumplieron con la predicción. Esta proporción debe estar cerca de la probabilidad de éxito (predeterminado 90%), si el modelo es preciso. Estos puntajes se pueden ver aquí.
Instalar desde la fuente usando al menos Go 1.6:
$ go get github.com/bitcoinfees/feesim
Feesim utiliza el experimento de proveedores GO 1.5, por lo que alternativamente puede instalar con GO 1.5 configurando la variable de entorno GO15VENDOREXPERIMENT=1
.
Feesim requiere el acceso JSON-RPC a un nodo central de bitcoin (versión> 0.13.0, que se puede podar). La configuración de RPC debe especificarse en config.yml
, como tal:
bitcoinrpc :
username : myusername
password : mypassword
# host: localhost
# port: 8332
El archivo de configuración debe colocarse en el directorio de datos:
~/.feesim
~/Library/Application Support/Feesim
%LOCALAPPDATA%Feesim
Al ejecutar feesim start
, el programa iniciará la recopilación de datos y luego comenzará a ejecutar la simulación una vez que haya suficientes datos. Debe estar en línea todo el tiempo, ya que recopila datos MEMPOOL que no se pueden obtener mediante análisis fuera de línea.
feesim status
muestra el estado del programa:
$ feesim status
result : Tx estimation window size was 0s, should be at least 600s
txsource : Tx estimation window size was 0s, should be at least 600s
blocksource : Block coverage was only 0/2016, should be at least 1008/2016.
mempool : OK
result
muestra si hay estimaciones de tarifas disponibles o no. Por defecto, las estimaciones de tarifas requieren al menos 10 minutos de datos de transacciones y datos de 1008 de los últimos bloques de 2016.
Una vez que haya suficientes datos, la simulación comenzará a ejecutarse y producir estimaciones de tarifas. La interfaz refleja la de bitcoin-cli estimatefee
:
$ feesim estimatefee 1
0.00030112
Esto muestra la tasa de tarifa mínima para una transacción que se confirma en 1 bloque, con una probabilidad del 90% (configurable).
A diferencia de bitcoin-cli
, si el argumento de entrada está omitido o es 0, se devuelven las estimaciones para todos los tiempos de confirmación:
$ feesim estimatefee
1: 0.00030138
2: 0.00026738
3: 0.00020492
4: 0.00015988
5: 0.00012805
6: 0.00011478
7: 0.00010616
8: 0.00010001
9: 0.00007519
10: 0.00005020
11: 0.00005000
12: 0.00005000
La API JSON-RPC subyacente es compatible con el núcleo de Bitcoin, por lo que FeesIM se puede usar como reemplazo de entrega de la API estimatefee
:
$ bitcoin-cli -rpcport=8350 estimatefee 1
0.00030138
Feesim actualmente supone que los mineros tienen el mismo minrelaytxfee que su nodo, por lo que no lo configure demasiado bajo, o de lo contrario, las estimaciones de tiempo de espera para tarifas bajas serán inexactas. Permanecer con los valores predeterminados debería estar bien. Consulte Commit D895E64 para más detalles.
Es posible que desee configurar maxmempool
de Bitcoin Core para que sea más bajo que el valor predeterminado, ya que esto hará que la simulación sea más rápida y requerirá menos memoria. maxmempool=100
está bien si se queda con la configuración predeterminada de TeseIM (específicamente MaxBlockConfirms). La desventaja es tener datos de MEMpool menos completos.
La simulación es intensiva en la CPU, mientras que la recopilación de datos no lo es, por lo que es posible que no desee ejecutar el SIM todo el tiempo, al tiempo que sigue recopilando datos. Para hacer esto, use feesim pause
pausa para pausar la simulación y feesim unpause
para reanudar.
Por defecto, las estimaciones de tarifas se actualizan cada minuto. Sin embargo, es posible que una sola ejecución de simulación demore más de un minuto, debido a los recursos insuficientes de la CPU o el tráfico de transacciones excepcionalmente alto. En general, esto no causará ningún problema importante; Solo hace que las estimaciones de tarifas se actualicen con menos regularidad. Sin embargo, es posible reducir el tiempo de ejecución de la simulación al reducir maxblocksconfirms
o numiters
en la configuración.
Puede monitorear el tiempo de ejecución de simulación con feesim metrics
; sim.X
son las estadísticas de tiempo de ejecución, en nanosegundos, durante aproximadamente la última X
se ejecuta.
Consulte config.yml
en este repositorio para obtener un archivo de configuración de ejemplo.
Como se mencionó anteriormente, Feesim requiere, por defecto, datos de 1008 de los bloques anteriores de 2016 (debe estar en línea cuando los bloques se descubren para que los datos se registren). Esto es aproximadamente 1 semana; Si no desea esperar tanto, puede comunicarse conmigo para obtener una copia de los datos de bloque.