Saltar al contenido

¿Qué es la «Prueba de Trabajo»?

Si estás en el mundo Bitcoin seguro habrás escuchado alguna vez el término «Prueba de Trabajo» (o «Proof of Work» en inglés). O tal vez hayas leído que «los bitcoins se descubren luego de resolver problemas matemáticos completos». Pues bien, de eso vamos a hablar hoy.

Antes de comenzar vamos a dejar en claro que los bitcoins no son el resultado de resolver problemas matemáticos complejos como se suele decir cuando se explica Bitcoin a principiantes. Ok… técnicamente si entramos en detalle podríamos argumentar que sí, pero no de la forma que se trata de transmitir al menos. Este concepto de los problemas matemáticos complejos puede servir para explicar a alguien que recién comienza, pero también puede dejar ideas equivocadas sobre el funcionamiento de Bitcoin y de cómo se generan nuevas unidades (la emisión monetaria).

El Trabajo

Primero lo primero, ¿a qué llamamos «trabajo» en este mundo digital? Le llamamos trabajo al cómputo, a la ejecución sucesiva de instrucciones computacionales. Es decir, que cuando un software o aplicación que utilizamos realiza una acción está trabajando. Ese trabajo digital se realiza sobre hardware, que requiere energía para funcionar.

¿Para qué nos sirve ese trabajo?

Cuando pensamos en Bitcoin y su funcionamiento se cruzan diversos problemas a resolver para que el sistema en su totalidad funcione, y dicho funcionamiento sea sustentable en el tiempo. Entre esos problemas podemos identificar los siguientes: ¿cómo logramos una participación abierta y a la vez sin abuso? y ¿cómo se genera cada nuevo bitcoin?

Para lograr una participación abierta y pública necesitamos que cualquier entidad (persona o empresa) pueda unirse a la red en igualdad de condiciones. Esto incluye la tarea de ordenar transacciones (una de las funciones principales de la tecnología llamada blockchain, tema para otro artículo 😉) y así lograr que una persona no pueda gastar sus mismos bitcoin dos veces. Pero, siguiendo con nuestra premisa, cualquiera debería poder ordenar esas transacciones. Si dejamos que cualquiera lo haga podríamos ser víctimas de alguien que quiera atacar a la red con intenciones maliciosas. Sumado a eso hay un factor de tiempo y sincronización a considerar (después de todo, estamos intentando ordenar información, ¿no?); lo cual no es sencillo en una red distribuida alrededor del mundo con diferentes computadores y conexiones, cada una operando a diferente capacidad.

Por otro lado, la respuesta a cómo y cuándo se genera cada nuevo bitcoin no es algo menor si, a fin de cuentas, estamos creando un nuevo sistema monetario. La emisión de este nuevo activo va a determinar su comportamiento económico y sus virtudes o fallas como dinero. Una vez más, nuestros problemas deben poder resolverse de una manera abierta y pública sin elegir unilateralmente actores con más poder o autoridad que otros, ya que sino volveríamos al sistema que intentamos superar.

La forma que Bitcoin muy ingeniosamente eligió para resolver estos problemas fue la de exigir a los miembros de la red que realicen una determinada cantidad de trabajo para ganarse así el derecho a ordenar operaciones. Como recompensa por dicho trabajo no sólo cada miembro que elija participar tendrá la posibilidad de ordenar transacciones, sino que también recibirá una recompensa en forma de nuevos bitcoins (y hay más para explicar aquí, pero también es contenido para otro artículo 😮). De esta manera hay costo en forma de trabajo para quien quiera participar de esta tarea haciendo que no sea gratis atacar a la red; y también hay una recompensa por participar de manera virtuosa, lo que genera incentivos por actuar de esta forma. A fin de cuentas, todo se trata de incentivos en este mundo de homo sapiens.

Como beneficio adicional, ese trabajo a realizar lo pensaremos de tal forma que indefectiblemente lleve tiempo para completarse. Aquí resolvemos varios problemas de sincronicidad y coordinación también.

Pero entonces…

¿Cómo comprobamos el trabajo?

¡Gran pregunta! ¿Cómo hacemos para verificar que un miembro de la red al que no conocemos ni tenemos acceso realmente realizó el trabajo que le dijimos que haga?

Por ejemplo, si la tarea en cuestión fuese sumar diez millones de veces el número 8 entonces un computador tendría que realizar diez millones de operaciones y luego nos devolvería como resultado el valor 80,000,000. Sin embargo, otro computador podría simplemente realizar una única operación de multiplicación de 8 por 10,000,000. Ambos llegarían al mismo resultado, y el resultado es lo único que nosotros podemos ver y validar ya que no tenemos forma de saber cómo hizo cada computador su tarea. Después de todo, no nos olvidemos que estamos frente a una red abierta y pública distribuida globalmente sin una autoridad central y, por supuesto, sin requisitos de identidad o registración. La única herramienta que tenemos para verificar un trabajo realizado es el resultado del mismo.

Esto se presta a que tengamos escenarios en donde algunas partes puedan «hacer trampa». Incluso las soluciones que se nos podrían ocurrir para resolver esto deberían mantener un determinismo y consistencia en el tiempo para que la verificación del trabajo realizado pueda hacerse por cualquier miembro de la red de manera sencilla sin depender de terceros. Eso nos hace descartar soluciones complicadas o incluso utilizando problemas complejos y aleatorios.

La Prueba de Trabajo

Nuestro objetivo entonces es encontrar esa prueba de que un trabajo fue realizado. Y ahí es donde aparece la «Prueba de Trabajo» en Bitcoin, que no se trata de resolver problemas matemáticos complejos… sino de repetición de tareas y de un juego de probabilidades. Así es, repetición y probabilidad.

Vamos con una analogía:

Supongamos que Uds. me piden que haga una tirada de 8 dados 🎲 en donde 4 de ellos sean el número «1», y que luego les muestre el video que lo prueba. Cada vez que lo logre me van a dar un premio (ver incentivo económico).

Para lograrlo, probablemente tenga que hacer decenas de tiradas hasta que logre filmar una que cumpla la condición. Todo esto podría llevarme, por ejemplo, 10 minutos. Motivado por el premio que me van a dar me compro 16 dados más, ya que con 24 dados en total voy a poder hacer 3 tiradas de 8 en paralelo (ver hashpower). Así voy a poder encontrar la tirada buscada en unos 3 o 4 minutos promedio en lugar de 10.

Viendo esto me exigen que en lugar de 4 dados con el números «1», tenga que encontrar 6 dados con el número «1» (ver incremento de dificultad). Entonces, aún de a 3 tiradas por vez, probablemente siga demorando 10 minutos en cumplir la nueva condición. Lo interesante de todo esto es que Uds., y cualquiera que observe, siempre van a demorar apenas 4 segundos ver el video (aquí la prueba de trabajo) para verificar fácil y rápidamente lo que a mi me costó mucho trabajo conseguir.

La realidad de Bitcoin

Siguiendo la analogía anterior, las tiradas de dados son las operaciones computacionales que deben hacer los miembros de la red de Bitcoin. Esto lo hacen en la forma de una función de hash. Una función de hash toma un contenido y devuelve un código pequeño calculado a partir de dicho contenido que lo representa prácticamente unívocamente, como una huella digital. El truco es que no hay forma práctica de lograr adivinar cual será el contenido que genera una huella digital (también llamada hash). Entonces la única forma de encontrar un hash determinado es simplemente probar con múltiples contenidos hasta encontrarlo.

Si exigimos a los miembros de la red que presenten un contenido cuyo hash sea menor a cierto valor (a esto le llamamos dificultad), entonces esos miembros de la red no tendrán otra opción que probar una y otra vez con diferentes contenidos hasta que el resultado sea un código hash que cumpla con la condición predefinida. Claro que, una vez encontrado, es muy sencillo para cualquiera revisar si ese contenido dado realmente produce el hash requerido.

En Bitcoin la función de hash utilizada para esto es SHA256, y el contenido en cuestión se trata nada más ni nada menos que de un bloque de la cadena de bloques, que contiene algunos valores que pueden ser arbitrariamente alterados para ir produciendo códigos hash diferentes hasta encontrar el deseado. Llamaremos mineros a aquellos miembros de la red que realizan este trabajo y generan códigos hash para probarlo, por lo cual luego reciben sus recompensas. ¿Por qué mineros?… otra de esas cosas que son para otro artículo, aunque podrían intentar adivinarlo.

Para muchos será evidente que un minero podría tener suerte y encontrar el hash buscado al primer o segundo intento, habiendo efectivamente trabajado poco para lograrlo. Eso es cierto, y por eso dijimos hace un rato que esto es un juego de probabilidad también. En el largo plazo la probabilidad de encontrar resultados que cumplan con las reglas dependerá de la dificultad de las mismas y, sumado al poder de cómputo en conjunto de todos los mineros de la red, nos permiten encasillar la duración total de ese trabajo en, aproximadamente, 10 minutos entre resultado y resultado. En otras palabras, entre bloque y bloque.

Y ahora.. ¿qué más?

En este artículo nos concentramos exclusivamente en cómo arribar a esa prueba que nos demuestre que alguien efectivamente había invertido energía en realizar un trabajo. Y también hablamos de algunas cosillas más.

Pero la compleja e interesante realidad tecnológica y económica nos muestra que de este aparentemente simple mecanismo se desprenden muchas consecuencias y comportamientos en este sistema que llamamos Bitcoin. Existen muchos papers, artículos y debates sobre las diferentes aristas de la Prueba de Trabajo como mecanismo de consenso, la minería, el uso de energía, las recompensas, la emisión monetaria, los diversos incentivos económicos y como cada una de estas cosas se relacionan y afectan entre sí.

Aún queda mucho por aprender. Pero espero que cuando escuches o leas «Prueba de Trabajo» ahora sepas a qué se refiere realmente.


Artículo escrito por Diego H. Gurpegui

Apasionado por la tecnología y la evolución humana. Fascinado con Bitcoin como tecnología y como dinero.
Co-fundador y Responsable de Operaciones y Tecnología en Improve-in – Ingeniero en Sistemas de Información – Desarrollador de Software – Voluntario en la ONG Bitcoin Argentina – A veces orador y a veces profesor.

Paynyms (Samourai Wallet)

PM8TJRGGUudN15qFJ5CuK2Re9DzhnLH8o9yGb1dQXQNQobW6mB5ZEEzqSpzD95nsVTPUGbHf3QPgA3NyFMDvufNz47DHaNFrQH1YE4XU8Xb3djisK3DB
+darkheart7a7