Nonce

El campo comodín usado en la minería

El nonce es un campo extra al final del encabezado del bloque usado para la minería.

Nonce es una abreviatura de number used once (número usado una vez).

Me gusta llamarlo "campo de minería". La forma más fácil de entender su propósito es ajustar el nonce en un encabezado de bloque y ver cómo afecta el hash del bloque:

Encabezado de Bloque

Decodifique y codifique un encabezado de bloque.

0 bytes
Encabezado de Bloque (Campos)

Versión

Versión: 0
0d
0d

Uso

¿Para qué sirve el campo nonce?

El nonce es un campo de 4 bytes que puede contener números entre 0 y 4294967295 (0x0 a 0xffffffff).

Los mineros incrementan el nonce al minar, para obtener resultados de hash completamente diferentes para el encabezado del bloque candidato. Esperan tropezar con un valor de nonce "mágico" que produzca un hash de bloque por debajo del objetivo actual.

Así que no hay ninguna habilidad especial en intentar encontrar un nonce que funcione. Es solo un campo extra que permite a los mineros volver a hashear rápidamente el encabezado sin tener que reconstruir el bloque completo.

Limitaciones

¿Todo bloque tiene un nonce "mágico"?

No. Los mineros suelen agotar el campo nonce de 4 bytes sin encontrar un nonce mágico. Cuando eso sucede, el paso obvio es ajustar el campo de tiempo. Pero los mineros son tan rápidos que agotan el nonce en menos de 1 segundo, así que el campo de tiempo no ayuda mucho. Por eso, buscan otras formas de modificar el encabezado sin reconstruir el bloque completo…

Tener un campo nonce tan pequeño (4 bytes) en el encabezado fue posiblemente un error de diseño de Satoshi.

ExtraNonce

Si un minero agota el campo nonce, pasa a ajustar lo que se llama "ExtraNonce".

El ExtraNonce está dentro del scriptSig de la transacción coinbase. Los mineros pueden poner cualquier dato en el scriptSig, así que pueden modificarlo para que funcione como un campo no oficial para un valor de nonce adicional. Como cambiar el scriptSig cambia el TXID de la coinbase, eso cambia la raíz de Merkle, que cambia el encabezado del bloque: es una forma rápida de modificar el encabezado.

Terminología

¿Por qué se llama nonce?

Es un término usado en criptografía para "número usado una vez", y se refiere a cualquier momento en que necesitas usar un número aleatorio de uso único para algún propósito criptográfico.

Gifs

¿Cómo funciona el nonce, visualmente?

Aquí hay un gif que Greg hizo en 2016 mostrando cómo se usa el nonce para cambiar el hash del bloque:

Gif animado del nonce siendo usado para cambiar el hash del bloque.

Y aquí hay otro que muestra una visualización aproximada del proceso de minería:

Gif animado del nonce siendo usado durante el proceso de minería.

Recursos