En la fuente de Litecoin está escrito:
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 20); // Litecoin: starting difficulty is 1 / 2^12
¿Cómo se calcula eso? ~uint256(0) >> 20
es 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
_ Los hashes tienen la misma probabilidad de ser cualquier número dado, por lo que la posibilidad de obtener un hash de Litecoin válido (es decir, uno que sea más pequeño que este número) es 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff / 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
= 1 / 2^20
, no 1 / 2^12
. ¿Es esto un error tipográfico en el código fuente de Litecoin o estoy malinterpretando algo?
Para usar la terminología en la wiki de Litecoin , ~uint256(0) >> 20
es el objetivo y 1 / 2^12
es (aproximadamente) la dificultad. Puede ver eso ejecutando lo siguiente en Python (o cualquier cosa que pueda manejar cálculos en números grandes).
target = 0x00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff # or 2**236-1
diff = 0xFFFF * 2**208 / target
print(diff) # 0.00024413689970970154
print(1/2**12) # 0.000244140625
Creo que la 1 / 2^20
cifra que calculaste es la probabilidad de que cada hash tenga éxito, que no es lo mismo que (aunque está relacionado con) la dificultad.
Nate Eldredge
2^32
Una buena forma de recordarlo es que una dificultad de 1 significa que se necesita un promedio de hash para minar un bloque, y se escala linealmente a partir de ahí. Esta convención proviene de Bitcoin, donde la dificultad mínima es, de hecho, 1.creador