¿Por qué cambiar el nonce en lugar de simplemente repetir?

¿Por qué los mineros aumentan el tiempo para calcular un hash de bloque en lugar de generar un hash de bloque aleatorio? Me parece que ambos enfoques tendrían la misma probabilidad de encontrar un resultado por debajo del objetivo.

Si la respuesta es que es más rápido aumentar el nonce en lugar de simplemente generar un hash aleatorio para encontrar un resultado válido, ¿podría mostrar esto de una manera matemática/estadística?

Respuestas (1)

La función hash utilizada en Bitcoin es determinista, es decir, hash la misma entrada, es decir, el encabezado del bloque, siempre dará como resultado la misma salida. Esto es necesario para que otros también puedan comprobar que una Prueba de trabajo es válida.

Esto significa que para calcular un nuevo hash, la entrada a la función hash debe modificarse. La forma más sencilla de modificar la entrada es cambiar el nonce, ya que se trata de un campo de formato libre que puede tomar cualquier valor. Otras formas de modificar la entrada son, por ejemplo, intercambiar transacciones o modificar la transacción de la base de monedas, lo que requeriría que la raíz Merkle se vuelva a calcular en el encabezado. La marca de tiempo también es una opción popular, sin embargo, sus valores están limitados por un rango de tiempos aceptables.

En caso de que se pregunte por qué no volvemos a repetir la salida de la función hash anterior para obtener el siguiente valor: esto destruiría el mecanismo de prueba de trabajo, que requiere una prueba fácil de verificar de que el emisor ha realizado algún trabajo. . La clave aquí es fácil: si procesamos iterativamente los resultados de la solución anterior, la parte verificadora también tendría que realizar este trabajo para verificar que el emisor haya realizado el trabajo. al variar la entrada esto no sucede ya que dada la entrada el verificador puede realizar una única operación hash y comprobar el resultado.

Gracias @cdecker. Eso tiene sentido. ¿Podría explicar qué quiere decir con "al variar la entrada, esto no sucede ya que, dada la entrada, el verificador puede realizar una sola operación hash y verificar el resultado"? ¿No es siempre suficiente una sola operación hash para la verificación?
Exactamente, esa es la diferencia entre alterar la entrada (el verificador solo toma PoW, procesa y verifica la salida) y el caso iterativo (el verificador tendría que tomar el encabezado del bloque y procesarlo exactamente la misma cantidad de veces que lo hizo el emisor).
Gracias cdecker. Solo trato de entender la posible verificación En el caso iterativo ... RE: su comentario anterior: si el verificador toma el encabezado del bloque y el hash final del emisor, ¿no sería suficiente una operación de hash? En ese caso, el verificador tendría todas las entradas necesarias (blockheader + el hash final del emisor) y una sola operación de hash permitiría al verificador verificar la salida resultante y ver si es válida, ¿no?
No pudo conectar el encabezado a la imagen previa que se está transmitiendo, esto permitiría que un nodo intermediario modificara el encabezado arbitrariamente sin invalidar la prueba de trabajo. Así que digamos que SHA256(...n-1 veces...(encabezado)...) es la preimagen de SHA256(...n veces...(encabezado)...) que es un PoW, entonces el El verificador podría verificar que SHA256 (imagen previa) es un PoW, pero no que esta imagen previa es n-1 llamadas SHA256 anidadas en el encabezado sin realmente hacer estas llamadas.
Gracias cdecker. Pensé que verificar un PoW consistía en realizar solo una sola operación hash para verificar si la 'solución' del emisor resultó en una salida válida (en cuyo caso, ambos escenarios, la alteración de la entrada y el caso iterativo, requerirían la misma cantidad de trabajo para verificar). De su respuesta, deduzco que todo el trabajo (o al menos la lógica detrás de la 'solución') también debe verificarse.
@Glenn Podría verificar el PoW con un solo hash. Pero eso no verificaría que el PoW de hecho asegure el bloque reclamado, que es lo que debe verificar.
@DavidSchwartz Gracias por opinar sobre David. ¿Podría explicar a qué se refiere? No había leído sobre el PoW que asegura el bloque reclamado es lo que debe verificarse (al menos no en esas palabras).
El objetivo del PoW es asegurar la cadena de bloques. El solo hecho de probar que hizo el trabajo no es útil, ese trabajo debe estar vinculado al bloque en particular que está asegurando.
Muchas gracias @DavidSchwartz. Con esta pregunta, siento que podría haberme aventurado en los detalles específicos de blockchain demasiado pronto en mi contexto de comprensión como para estar haciendo preguntas de "qué pasaría si". Pero esto contribuyó a mi comprensión. Muchas gracias tanto a cdecker como a ti.