¿Qué significa prueba de trabajo?
La prueba de trabajo describe un sistema que requiere un esfuerzo no insignificante pero factible para disuadir los usos frívolos o maliciosos de la potencia informática, como enviar correos electrónicos no deseados o lanzar ataques de denegación de servicio. El concepto fue adaptado al dinero por Hal Finney en 2004 a través de la idea de "prueba de trabajo reutilizable". Tras su introducción en 2009, bitcoin se convirtió en la primera aplicación ampliamente adoptada de la idea de Finney (Finney también fue el destinatario de la primera transacción de bitcoin). La prueba de trabajo forma la base de muchas otras criptomonedas también.
Prueba de trabajo explicada
Esta explicación se centrará en la prueba de trabajo, ya que funciona en la red bitcoin. Bitcoin es una moneda digital que se basa en una especie de libro mayor distribuido conocido como "blockchain". Este libro mayor contiene un registro de todas las transacciones de bitcoins, organizadas en "bloques" secuenciales, de modo que ningún usuario pueda gastar ninguna de sus tenencias dos veces. Para evitar la manipulación, el libro mayor es público o "distribuido"; Una versión alterada sería rápidamente rechazada por otros usuarios.
La forma en que los usuarios detectan la manipulación en la práctica es a través de hashes, largas cadenas de números que sirven como prueba de trabajo. Ponga un conjunto de datos determinado a través de una función hash (bitcoin usa SHA-256), y solo generará un hash. Sin embargo, debido al "efecto de avalancha", incluso un pequeño cambio en cualquier parte de los datos originales dará como resultado un hash totalmente irreconocible. Cualquiera que sea el tamaño del conjunto de datos original, el hash generado por una función determinada tendrá la misma longitud. El hash es una función unidireccional: no se puede usar para obtener los datos originales, solo para verificar que los datos que generaron el hash coinciden con los datos originales.
Generar cualquier hash para un conjunto de transacciones de bitcoin sería trivial para una computadora moderna, por lo que para convertir el proceso en "trabajo", la red de bitcoin establece un cierto nivel de "dificultad". Esta configuración se ajusta de modo que se "extrae" un nuevo bloque, que se agrega a la cadena de bloques al generar un hash válido, aproximadamente cada 10 minutos. Establecer la dificultad se logra estableciendo un "objetivo" para el hash: cuanto más bajo es el objetivo, más pequeño es el conjunto de hashes válidos y más difícil es generar uno. En la práctica, esto significa un hash que comienza con una larga cadena de ceros: el hash para el bloque # 429818, por ejemplo, es 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Ese bloque contiene 2, 012 transacciones que involucran poco más de 1, 000 bitcoin, así como el encabezado del bloque anterior. Si un usuario cambiara el monto de una transacción en 0.0001 bitcoin, el hash resultante sería irreconocible y la red rechazaría el fraude.
Dado que un conjunto de datos dado solo puede generar un hash, ¿cómo se aseguran los mineros de generar un hash por debajo del objetivo? Alteran la entrada agregando un número entero, llamado nonce ("número usado una vez"). Una vez que se encuentra un hash válido, se transmite a la red y el bloque se agrega a la cadena de bloques.
La minería es un proceso competitivo, pero es más una lotería que una carrera. En promedio, alguien generará una prueba aceptable de trabajo cada diez minutos, pero quién lo hará es una incógnita. Los mineros se agrupan para aumentar sus posibilidades de extraer bloques, lo que genera tarifas de transacción y, por un tiempo limitado, una recompensa de bitcoins recién creados.
La prueba de trabajo hace que sea extremadamente difícil alterar cualquier aspecto de la cadena de bloques, ya que dicha modificación requeriría volver a minar todos los bloques posteriores. También dificulta que un usuario o grupo de usuarios monopolice la potencia informática de la red, ya que la maquinaria y la potencia necesarias para completar las funciones hash son caras.