Cuando se "descubre" un bloque, ¿cómo se determina el nonce?

Sé que un bloque se basa en un número aleatorio llamado nonce, pero si ese número es aleatorio y desconocido para el minero, ¿cómo se verifica ese número como el nonce correcto y no como un número arbitrario?

El nonce es de conocimiento público una vez que se descubre un bloque. El número está disponible para el minero y el verificador.

Respuestas (1)

Básicamente, no existe un nonce "correcto", solo un conjunto de posibles bloques "correctos" que pueden usar cualquier nonce que deseen para obtener un hash aceptable. Entonces el nonce es solo "un número arbitrario". Pero para comprender cómo funcionan los nonces, primero debe comprender el proceso de hashing mediante el cual se producen los bloques.

Los hashes criptográficos son una forma matemática de convertir cualquier conjunto de datos en un número aleatorio, llamado hash. El proceso de hashing está diseñado para que sea fácil calcular el hash de algunos datos, pero casi imposible encontrar datos que se ajusten a un hash específico , tener incluso un conjunto de datos ligeramente diferente producirá un hash totalmente diferente, y para que la única manera encontrar un hash con una propiedad en particular (digamos, estar por debajo de cierto número) es calcular muchos de ellos hasta que tengas suerte.

En la red Bitcoin, solo se aceptan e incluyen en la lista oficial bloques con ciertos hashes. El criterio por el cual los bloques "cuentan" es que su hash debe estar por debajo de un cierto número llamado objetivo. La red ajusta este número hacia arriba y hacia abajo de acuerdo con la frecuencia con la que los bloques pasan la prueba; así es como puede mantener la tasa de producción de bloques en un promedio de 10 minutos por bloque. Entonces, si el objetivo es

00000692856290566183958127638592383846392938562929689273923968

luego un bloque con un hash de

00000739485762992939239823472938472569106923385616929838472389

no serán aceptados, pero bloques con hashes de

00000683060299472046094517810601040976920106812102601296720934

00000000000000000000000000000000000000000000000000000000453737

o

00000692856290566183958127638592383846392938562929689273923967

todo pasará con gran éxito. Estos no son hashes reales, son solo ejemplos.

Un minero está tomando una lista de transacciones verificadas y válidas, juntándolas en el formato correcto y luego calculando su hash criptográfico. Pero digamos que el hash que obtienen no cumple con los criterios (como la mayoría de ellos no). ¿Qué se supone que deben hacer? La única forma de obtener un hash diferente es usar al menos datos ligeramente diferentes. Entonces, en lugar de estropear su lista de transacciones válidas o algo así, los bloques tienen algo llamado nonce en ellos. El nonce es solo un número sin sentido que se puede cambiar tantas veces como desee para que pueda verificar un montón de hashes diferentes y ver si pasan la verificación de dificultad de la red.Entonces, cuando un minero está verificando miles de millones de hashes por segundo (como muchos de ellos), simplemente está cambiando el nonce a otra cosa, verificando el hash de todo el bloque; cambiando el nonce a otra cosa, verificando el hash del bloque (ahora ligeramente diferente); cambiando el nonce otra vez, etc.

En este sentido, un nonce "correcto" es simplemente el que permite que el bloque se convierta en un número aceptable. Así como hay muchos hashes aceptables, hay muchos nonces diferentes que funcionarán para el mismo bloque. Pero un minero solo tiene que encontrar uno de ellos. Cualquiera que encuentren primero está bien.

También te puede interesar cómo se calcula el objetivo.

De hecho, debido a que el nonce es solo de 32 bits, para la mayoría de los bloques, no hay un nonce válido que cumpla con la dificultad. En ese caso, el minero tiene que cambiar el conjunto de transacciones. Por lo general, se cambia la transacción de la base de monedas. (Un campo sin sentido en la transacción de coinbase se usa como un nonce 'extra').
No estoy seguro de cuánto tiempo atrás quiere decir, pero al menos a partir del 0.3.23, cambiaría la transacción de coinbase si se agotara el nonce. Y, por supuesto, todos los mineros y pools de minería modernos hacen esto.
Se utilizó @eMansipater a partir del primer bloque con una dificultad de un nonce adicional. Con una dificultad de 1, las probabilidades de que cualquier objetivo de hash cumpla en particular es 1/(2^32). Con solo 2 ^ 32 valores nonce, hay un 36% de posibilidades de que cualquier valor NOnce de encabezado dado cree un hash válido. Eso tiene una dificultad de 1. A medida que aumenta la dificultad, la probabilidad de que ningún nonce en el rango de nonce haga un hash válido solo aumenta.
Muy buena respuesta! Entonces, ¿también puede decir que la dificultad representa la cantidad de 0 que deben estar al comienzo del hash?
Vaya, gran respuesta. Una de las cosas que escuché mucho cuando comencé a aprender fue "resolver un problema realmente difícil" pero sin entender cuál era el problema o por qué era difícil. Esto deja en claro lo que lo hace "difícil" y que fuera de esta aplicación, es un problema esencialmente inútil.
Gracias por esta respuesta. Pregunta rápida: ¿Qué sucede si 2 mineros diferentes encuentran simultáneamente un bloque correcto? Dado que para que el bloque sea "correcto", el hash debe ser más bajo que el objetivo, asumo que es una posibilidad. ¿Cómo maneja esto la red?
No pasa nada especial. Siempre sucede que los últimos bloques de la cadena son inciertos porque algunos mineros podrían estar construyendo sobre otras cadenas igualmente largas. Cuanto más retroceda en la cadena, menor será la probabilidad de que una cadena que no incluya ese bloque alguna vez exceda la longitud de la cadena principal. De ahí la necesidad de múltiples confirmaciones.