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:
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.
- No te acercas más a minar un bloque con cada intento. El resultado de la función de hash es completamente impredecible, así que cada resultado es independiente del anterior. Tienes la misma probabilidad de minar con un nonce de 0 o de 4294967295.
- No necesitas incrementar el nonce. Podrías ir hacia atrás, o incluso probar valores aleatorios. No importa, siempre que no repitas los mismos valores.
- No todo bloque tiene un nonce "mágico". De hecho, es probable que no exista ningún nonce que produzca un hash por debajo del objetivo. Si agotas el nonce, tienes que empezar de nuevo con un nuevo encabezado.
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:
Y aquí hay otro que muestra una visualización aproximada del proceso de minería: