Del documento técnico de Bitcoin, deduje que el hash de un bloque debe comenzar con una cierta cantidad de ceros. Y que este número de ceros se ajusta cada 2 semanas. En consecuencia, el objetivo del hash es una potencia de dos.
Requerir un cero adicional para la función hash dividirá el objetivo hash por 2.
Dicho esto, en otra pregunta sobre el intercambio (¿ Cómo se calcula la dificultad? ) parece que la dificultad se puede multiplicar por fracciones (por ejemplo, 40%).
¿Significa eso que los objetivos hash no son necesariamente potencias de 2? ¿O el objetivo está redondeado a la potencia de 2 más cercana?
Contrariamente a la creencia popular, el objetivo en realidad no se basa en la cantidad de ceros iniciales. Esta es una simplificación importante que se usa para transmitir la idea general, pero en realidad no es cómo funciona el código. En cambio, el objetivo es solo un número que se ajusta por la relación entre el tiempo real entre bloques y el tiempo esperado entre bloques (con un error de un error que en realidad hace que no funcione como se esperaba). Entonces, los objetivos no son necesariamente múltiplos de 2.
Hay una advertencia adicional: la nueva dificultad solo puede ser al menos una cuarta parte y como máximo 4 veces más que la dificultad anterior. El multiplicador (la relación entre tiempos) por lo tanto debe estar entre 1/4 y 4.
Como señala la respuesta de Andrew, el 'número de ceros iniciales' es solo una simplificación, así que pensé en dar un ejemplo para ilustrar esto de manera más concreta:
Los hashes de bloque generalmente se representan en formato hexadecimal, que utiliza el conjunto de caracteres [0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f]. Pero para simplificar, podemos usar un conjunto de números de base 10 [0,1,2,3,4,5,6,7,8,9], se aplican exactamente los mismos principios.
El hash de bloque es el resultado de una operación SHA256, por lo que es un número de 256 bits, que es un número muy grande. Esto significa que la salida de la operación SHA256 será un número en el rango de 0 a 2^256. De nuevo, sin embargo, para simplificar, podemos considerar un rango de números mucho más pequeño en nuestro ejemplo, por lo que usaremos el rango de 0 a 1,000,000 en su lugar.
Ahora, imaginemos que el objetivo hash es ≤500
, por lo tanto, cualquier entrada de bloque válida que proporcione una salida de 0000500
o menos se consideraría un bloque válido. Imaginemos también que el objetivo hash cambia para ser ≤450
para el siguiente período de dificultad, haciendo que cualquier salida de 0000450
o menos sea un bloque válido.
Tenga en cuenta que estos dos objetivos "requerirían la misma cantidad de ceros a la izquierda" , pero un bloque cuyo hash 0000475
solo sería válido en el período de dificultad anterior, y no en el posterior. Esto se debe a que el objetivo hash es un número específico, el número de ceros iniciales es solo una simplificación/proxy aproximado para esto.
Roberto
Quitrik
Fred
Quitrik