¿Cuál es el algoritmo para crear una calculadora de minería de Bitcoin?

Quiero saber cómo puedo calcular la ganancia de la minería de bitcoins en bitcoins. Estoy interesado en la fórmula que utilizan las calculadoras. Por ejemplo, digamos que tengo un hashrate de 700 mh/s, la dificultad actual es 908350862,437. La calculadora dice que extraeré 0.00038755 BTC por día. ¿Qué algoritmo se utiliza para calcular estas cifras?

¿Dónde puedo multar la recompensa de bloque actual?
La recompensa del bloque actual es de 25 BTC, será de 12,5 BTC a partir del bloque 420 000. Echa un vistazo a BitcoinClock

Respuestas (2)

Quiero dar una respuesta ampliada ya que encontré que lo preexistente aquí o en otro lugar necesitaba un poco más de aclaración, específicamente para los recién llegados.

Fórmula

Para calcular el valor total aproximado de las ganancias de bitcoin por mes de una operación minera (sin tener en cuenta los costos de minería [electricidad, mantenimiento de hardware, etc.]), se puede usar la siguiente fórmula:

H = Hashrate (hashes / second)
D = Difficulty (Reference for values below)
B = Reward per Block (Reference for value below)
N = Number of days per month (default = 30)
S = Number of seconds per day (S = 60 * 60 * 24 = 86400)

Fórmula de ganancias mineras

Ejemplo

H = 21,990,232,555,520 h/s (~= 20TH/s)
D = 47,427,554,950.648
B = 25
N = 30
S = 86400

Fórmula de ganancias mineras

El número total de bitcoins ganados por mes según las variables definidas anteriormente será ~6.995 . Descarte Ndel numerador y obtendrá el valor diario.

Pitón

Una declaración rápida de python como ejemplo de implementación (puede escribir esto directamente en la terminal)

$ python -c "print (30*21990232555520*25*86400)/(47427554950.648*2**32)"
$ 6.99542703277

Algunas referencias:

Dificultad ( Valor actual | Wiki )

Recompensa por bloque ( valores actuales y futuros )

¿Esta lógica se aplica a todas las monedas?
¿De dónde 2**32viene? ¿Es esto BTC específico?
@domdambrogia sí, lea más sobre esto en la referencia wiki de Dificultad

El tiempo promedio para encontrar un bloque se puede aproximar calculando:

time = difficulty * 2**32 / hashrate

Donde la dificultad es la dificultad actual, el hashrate es la cantidad de hashes que tu minero calcula por segundo y el tiempo es el promedio en segundos entre los bloques que encuentras.

¿Por qué esta fórmula es solo una aproximación? No veo ningún otro parámetro que pueda tener un efecto en el resultado (al menos si tanto la dificultad como el hashrate son constantes, por supuesto).
Es una aproximación porque la minería es un juego de varianza y suerte. Hay momentos en los que podrías tener suerte y generar más bloques de los previstos y seguramente habrá períodos secos en los que no se produzcan bloques. Esto se puede ver al observar grandes grupos de minería mientras resuelven bloques, los bloques no se crean en un horario establecido de ninguna manera, la red se ajusta de manera que se debe generar un bloque cada 10 minutos, pero sabemos que esto deberá ajustarse regularmente. basado en nuevos mineros que se conectan todo el tiempo. La tasa de hash de la red y, por lo tanto, la dificultad cambiarán regularmente.
Es por eso que la fórmula solo puede dar un tiempo promedio . Aún así, incluso las fórmulas para los promedios se pueden aproximar, pero creo que aquí tenemos una fórmula exacta para un valor promedio (esto puede sonar un poco quisquilloso, pero en mi opinión, sigue siendo una distinción no muy importante).