Puntos básicos de la Blockchain - Prueba de trabajo
En este artículo, vamos a hablar de una de las tecnologías o componentes más importantes de la blockchain, Proof-of-Work (Proof of Work). La prueba de trabajo es el componente revolucionario de la blockchain que evita el doble gasto.
¿Qué es el doble gasto?
Para entender qué problema resuelve la Prueba de Trabajo, primero hay que entender cuál es el problema real.
El Doble gasto es una acción ilegal en la blockchain, donde un Bitcoin se gasta más de una vez.
En un mundo físico, Bob le da a Alice una foto. Desde que Bob le dio la foto a Alice, ya no es dueño de la foto. Bob no puede dar la misma foto a Juan ya que Alice es la dueña ahora.
En un mundo digital, Bob envía un correo electrónico con la foto a Alice. Bob sigue siendo dueño de la imagen en su ordenador y puede enviar la misma imagen a John. De esta forma, envió la imagen dos veces y puede seguir haciéndolo indefinidamente.
Este era un gran problema con las monedas digitales en el pasado. Cómo evitar que se envíe la misma moneda digital dos veces? Y cómo evitar que alguien simplemente copie y pegue sus monedas virtuales indefinidamente. La prueba de trabajo resolvió esto.

¿Qué es la prueba de trabajo?
La prueba de trabajo o PoW, en pocas palabras, es un método de confirmación de transacciones en la blockchain también llamado minería.
Blockchain es un libro de contabilidad distribuido (base de datos) de bloques pasados. Blockchain se distribuye por todo el mundo mediante nodos que permiten la descentralización. Una de las funcionalidades de los nodos es añadir nuevos bloques a la blockchain, estos nodos se llaman mineros. Sólo los nodos que están dispuestos a gastar recursos computacionales son capaces de añadir nuevos bloques a la blockchain.
¿Cómo funciona realmente la prueba de trabajo?
Con PoW, los mineros están resolviendo funciones matemáticas de un solo sentido. Varios mineros compiten simultáneamente entre sí. Quien resuelve la función primero, obtiene una recompensa económica y su solución se difunde a todos los demás nodos.
Con SHA256, uno puede obtener Y a partir de X, pero no puede recuperar X a partir de Y. Esto se llama una función unidireccional y se utiliza a menudo en la criptografía. La dirección del monedero de Bitcoin, por ejemplo, es una salida de una clave privada, que se convierte en hash en una salida SHA256.
Ejemplo de palabra con hash SHA256 "NiceHash":
D22df564d771ed4e6785029de215e9f9e2affe9bbe37bacc8544c32f0a162ba3
La palabra NiceHash actúa como clave privada y la salida es una clave pública. Sería prácticamente imposible invertir la función y averiguar su significado sin la clave privada o los datos de entrada.
Nótese que Sha256 se puede utilizar con una cantidad infinita de datos, incluso se puede utilizar con imágenes.
Prueba tú mismo:
Si un minero tiene algunos datos de entrada, obtendrá una larga cadena aleatoria, que no puede ser revertida. Pero blockchain utiliza otra cadena llamada nonce (número que sólo se utiliza una vez). Usando un nonce, un minero puede manipular la salida de SHA256 para adivinar la salida deseada.
La red blockchain, por ejemplo, establecerá una salida deseada que comience con 6 ceros, por ejemplo: 000000c49ede7f965ba8e7e6419d6efb0afc99e7ecd10095b286310ca55a6355
El minero adivinará literalmente el nonce hasta que la salida del hash del bloque comience con 000000. Esto es lo que hacen los mineros, combinan transacciones de bloques como entrada de datos y luego adivinan el nonce, hasta que la salida SHA256 comienza con 000000.
Introduce datos aleatorios en el siguiente formulario e intenta encontrar un hash que empiece por cuatro ceros (0000) adivinando el nonce:
O simplemente pulsa MINE para encontrar el nonce correcto automáticamente.
Nota que esta es una versión simplificada. Un minero también debe incluir la salida del hash del bloque anterior en la entrada de datos junto con los datos de la transacción. Además, con el aumento de la dificultad, el número de ceros aumenta, lo que hace que sea menos probable adivinar el nonce correcto, por lo que es más difícil adivinar el hash de salida correcto. Es más fácil encontrar la salida con un cero (0) que con cuatro ceros (0000).