Dificultad

Ver también: objetivo

¿Qué es «dificultad»?

La dificultad es una medida de lo difícil que es encontrar un hash debajo de un objetivo determinado.

La red Bitcoin tiene una dificultad de bloqueo global. Los bloques válidos deben tener un hash debajo de este objetivo. Los grupos de minería también tienen una dificultad de compartir específica del grupo que establece un límite inferior para los recursos compartidos.

¿Con qué frecuencia cambia la dificultad de la red?

Cada 2016 bloques.

¿Cuál es la fórmula de la dificultad?

dificultad = dificultad_1_target / current_target

(el objetivo es un número de 256 bits)

La dificultad_1_target puede ser diferente para varias formas de medir la dificultad. Tradicionalmente, representa un hash donde los 32 bits iniciales son cero y el resto son uno (esto se conoce como «dificultad de grupo» o «pdiff»). El protocolo de Bitcoin representa los objetivos como tipo de punto flotante personalizado con precisión limitada; como resultado, los clientes de Bitcoin a menudo se aproximan a la dificultad basándose en esto (esto se conoce como «bdiff»).

¿Cómo se almacena la dificultad en bloques?

Cada bloque almacena una representación empaquetada ( llamado «Bits») para su objetivo hexadecimal real. El objetivo puede derivarse de él mediante una fórmula predefinida. Por ejemplo, si el destino empaquetado en el bloque es 0x1b0404cb (almacenado en orden little-endian: cb 04 04 1b), el destino hexadecimal es

0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000

Tenga en cuenta que este formato empaquetado contiene un bit de signo en el bit 24 y, por ejemplo, la negación del objetivo anterior sería 0x1b8404cb en formato empaquetado. Sin embargo, dado que los objetivos nunca son negativos en la práctica, esto significa que el valor legal más grande para los 24 bits más bajos es 0x7fffff. Además, 0x008000 es el valor legal más pequeño para los 24 bits inferiores, ya que los objetivos siempre se almacenan con el exponente más bajo posible.

¿Cómo se calcula la dificultad? ¿Cuál es la diferencia entre bdiff y pdiff?

El objetivo más alto posible (dificultad 1) se define como 0x1d00ffff, lo que nos da un objetivo hexadecimal de

0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000

Debe tenerse en cuenta que la minería agrupada a menudo utiliza objetivos no truncados, lo que coloca la «dificultad del grupo 1» en

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Entonces, la dificultad en 0x1b0404cb es por lo tanto:

0x00000000FFFF0000000000000000000000000000000000000000000000000000 /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.420938523983 (bdiff)

Y:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.669773817162 (pdiff)

Aquí «una forma rápida de calcula la dificultad de bitcoin. Utiliza una serie de Taylor modificada para el logaritmo (puedes ver tutoriales en flipcode y wikipedia) y se basa en registros para transformar el cálculo de dificultad:

Para ver las matemáticas para pasar de la dificultad normal cálculos (que requieren grandes números enteros más grandes que el espacio en cualquier número entero normal) para el cálculo anterior, aquí hay algo de pitón:

¿Cuál es la dificultad actual?

Dificultad actual, como resultado de getDifficulty de Bitcoin.

Gráficos

¿Cuál es la máxima um dificultad?

No hay un objetivo mínimo. La dificultad máxima es aproximadamente: maximum_target / 1 (ya que 0 resultaría en infinito), que es un número ridículamente enorme (alrededor de 2 ^ 224).

La dificultad máxima real es cuando current_target = 0, pero nosotros no sería capaz de calcular la dificultad si eso sucediera. (afortunadamente nunca lo hará, así que estamos bien).

¿Puede disminuir la dificultad de la red?

Sí. Ver discusión en target.

¿Cuál es la dificultad mínima?

La dificultad mínima, cuando el objetivo está en el valor máximo permitido, es 1.

¿Qué tasa de hash de red resulta en una dificultad determinada?

La dificultad se ajusta cada 2016 bloques en función del tiempo que se tardó en encontrar los bloques anteriores de 2016. Al ritmo deseado de un bloque cada 10 minutos, los bloques de 2016 tardarían exactamente dos semanas en encontrarlos. Si los bloques de 2016 anteriores tardaron más de dos semanas en encontrar, la dificultad se reduce. Si tardaron menos de dos semanas, la dificultad aumenta. El cambio en la dificultad es proporcional a la cantidad de tiempo durante o menos de dos semanas que los bloques anteriores de 2016 tardaron en encontrar .

Para encontrar un bloque, el hash debe ser menor que el objetivo. El hash es efectivamente un número aleatorio entre 0 y 2 ** 256-1. El desplazamiento para la dificultad 1 es

0xffff * 2**208

y para la dificultad D es

(0xffff * 2**208)/D

El número esperado de hashes que necesitamos calcular para encontrar un bloque con dificultad D es por lo tanto

D * 2**256 / (0xffff * 2**208)

o simplemente

D * 2**48 / 0xffff

La dificultad se establece de tal manera que los bloques anteriores de 2016 habrían sido encontrado a una velocidad de uno cada 10 minutos, por lo que estábamos calculando (D * 2 ** 48 / 0xffff) hashes en 600 segundos. Eso significa que la tasa de hash de la red fue

D * 2**48 / 0xffff / 600

sobre los bloques anteriores de 2016. Se puede simplificar aún más a

D * 2**32 / 600

sin mucha pérdida de precisión.

En dificultad 1, eso es alrededor de 7 Mhashes por segundo.

En el momento de escribir este artículo, la dificultad es 22012.4941572, lo que significa que durante el conjunto anterior de bloques de 2016 se encontró que la tasa de hash de red promedio era

22012.4941572 * 2**32 / 600 = around 157 Ghashes per second.

¿Qué tan pronto puedo esperar generar un bloque?

(La eterna pregunta.)

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 el número de hashes que su minero calcula por segundo y el tiempo es el promedio en segundos entre los bloques que encuentra.

Por ejemplo, usando Python calculamos el tiempo promedio para genere un bloque usando una plataforma de minería de 1Ghash / s cuando la dificultad sea 20000:

$ python -c "print 20000 * 2**32 / 10**9 / 60 / 60.0"23.85

y descubra que toma menos de 24 horas en promedio.

  • Cualquiera que muele el hachís tiene las mismas posibilidades de «ganar» que cualquier otro. El juego de números es cuántos intentos puede hacer su hardware por segundo.
  • Necesita conocer la dificultad (arriba) y su tasa de khash / seg (informada por el cliente).
    • Minería La comparación de hardware tiene algunas estadísticas que pueden ayudarlo a predecir lo que podría obtener.
  • Visite una calculadora o realice los cálculos usted mismo,
    • http://www.alloscomp.com/bitcoin/calculator.php
    • http://www.vnbitcoin.org/bitcoincalculator.php
    • https://bitknock.com/calculator
  • Recuerde que es solo una probabilidad. No hay garantías de que gane cada N días.

Enlaces relacionados

  • Historial de dificultades de Bitcoin
  • ¿Qué es la dificultad de minar Bitcoin?
  • Ver también: objetivo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *