¿Cómo se deciden los nonces en la minería?

Sé que cuando creo un nuevo bloque en una red de Bitcoin, cambio el valor de nonce para generar un bloque.

La pregunta es, ¿asignas al azar los valores que asignas a los nonces? ¿O empiezas con el número uno?

Algunas personas dicen que son aleatorias,

Algunas personas dicen que comienzan con el número 1 usando el algoritmo de caché hash.

¿Quién tiene razón?

Si ambos tienen razón,

En el caso de la minería en solitario, asigne aleatoriamente un valor a los nonces,

En pooled mining, ¿distribuís los números entre los participantes y los aumentáis uno a uno?

Respuestas (1)

La mayoría de las implementaciones de minería, solas o agrupadas, comenzarán desde 0 e incrementarán el valor de nonce. En 2018 (y en los últimos años), los mineros ASIC son tan rápidos que se prueban todos los valores posibles de nonce en prácticamente nada de tiempo. Para sortear este agotamiento del espacio nonce, el valor extraNonce en el tx de coinbase se actualiza una vez que se agota el espacio nonce.

Se puede pensar en un grupo como múltiples mineros en solitario que trabajan en paralelo.

Dado que los ASIC son tan rápidos, no tiene sentido tener todos los trabajos de minería en la misma plantilla de bloque con solo diferentes rangos de nonce (trabajador uno en nonce 0-99, trabajador 2 en 100-199, etc.), ya que todos ellos agotan rápidamente su propio espacio nonce y comienzan a superponerse.

En cambio, los pools de minería enviarán diferentes plantillas de bloques a cada uno (o al menos a la mayoría) de los trabajadores. La única diferencia suele ser algunas transacciones, que luego cambian la raíz de merkle. Por lo tanto, todos los trabajadores están minando efectivamente un bloque único, pero todos a la misma altura. Si algún trabajador resuelve un bloque, el grupo ganará ese bloque.

Por último, además del nonce, el valor de la marca de tiempo también se actualiza cada segundo, lo que le permite volver a intentar el espacio nonce una vez más, ya que el encabezado ha cambiado.