¿Cuál es el objetivo de 2^187 en el libro blanco de Ethereum wrt PoW en Bitcoin?

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?

Respuestas (2)

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 xtal que int(SHA256(SHA256(x))) < Tpara 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.

1) ¿Puedes explicarme el uso de 2^187? ¿Qué significa the target is 2^187"2) Si tenemos dos bloques, uno con hash de 0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6dy otro con hash de 0x000000000000000000265a170000000200000000000000000000000000000000, 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?
1. 2^187 es aproximadamente la forma entera del objetivo en el momento en que se escribió el artículo. 2. Correcto

En Bitcoin, SHA256 (SHA256 (x)) llamado Hash256 que produce una salida de 256 bits

  • hash el bloque en un árbol merkle
  • vinculación de entradas y salidas de transacciones
  • hash del encabezado del bloque (y por lo tanto la prueba de trabajo y el enlace al bloque anterior)

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.