El papel dice que
La condición precisa es que el hash SHA256 doble de cada bloque, tratado como un número de 256 bits, debe ser menor que un objetivo ajustado dinámicamente, que en el momento de escribir este artículo es de aproximadamente 2^187.
Tenía la impresión de que PoW implica obtener una cierta cantidad de ceros a la izquierda en un hash.
¿Puede alguien por favor explicar?
La gente a menudo dice que el objetivo de la minería es obtener un cierto número de "ceros iniciales", porque eso es fácil de visualizar, pero una declaración más precisa es que el objetivo es encontrar x
tal que int(SHA256(SHA256(x))) < T
para algún objetivo T
, donde int( )
significa que estamos interpretando el hash de 256 bits como un entero sin signo de 256 bits.
Esto es casi equivalente a la formulación de "ceros iniciales". Si piensa en dos secuencias hexadecimales de 32 bytes, entonces la que tiene más ceros a la izquierda es el número más pequeño cuando se interpreta como un número entero.
Por ejemplo, un bloque BTC reciente tiene hash
0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d
que es menor que el objetivo
0x000000000000000000365a170000000200000000000000000000000000000000
El bloque tiene más ceros delante, pero un hash de
0x000000000000000000265a170000000200000000000000000000000000000000
habría funcionado también, ya que es más pequeño que el objetivo, a pesar de tener tantos ceros.
Ethereum usa una función PoW más complicada, pero la idea es la misma: encontrar alguna entrada que minimice el resultado de alguna función unidireccional. La diferencia es que en lugar de apuntar a un pequeño hash de bloque, Ethereum usa un campo llamado "mix hash". " que junto con el nonce sirve como prueba de trabajo. Esto conduce a bloques hash que parecen aleatorios, a diferencia de los BTC, que tienen muchos ceros a la izquierda.
En Bitcoin, SHA256 (SHA256 (x)) llamado Hash256 que produce una salida de 256 bits
Esto es contiguo a la preservación de los 128 bits consistentes de seguridad en todo el protocolo.
En esta respuesta , puede ver por qué hay un objetivo de ajuste dinámico y el motivo de esa línea:
Minería
El algoritmo de minería se define de la siguiente manera:
def mine(full_size, dataset, header, difficulty): target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) while hashimoto_full(full_size, dataset, header, nonce) > target: nonce = (nonce + 1) % 2**64 return nonce
El bloque Ethereum tampoco tiene ceros iniciales . En cambio, Ethereum tiene un objetivo que es similar al hash de bloque de Bitcoin.
n0unc3
the target is 2^187
"2) Si tenemos dos bloques, uno con hash de0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d
y otro con hash de0x000000000000000000265a170000000200000000000000000000000000000000
, estaría bien seleccionar cualquiera de ellos, ¿no? y, en última instancia, si la mayoría de los nodos/mineros seleccionan uno de estos, el ¿Otro será descartado?tjaden hess