Algunas aclaraciones
El propósito de la minería es probablemente un poco confuso al principio. Mantendré la cadena de bloques Bitcoin como ejemplo a lo largo de este artículo. La minería NO consiste en crear nuevas bitcoins. La minería es el mecanismo que permite que la cadena de bloques sea una seguridad descentralizada. Asegura el sistema bitcoin y permite un sistema sin autoridad central. No confundir las recompensas dadas a los mineros («new bitcoin») con el proceso en sí.
Minería en Bitcoin
Los mineros validan las nuevas transacciones y las registran en el libro mayor global («blockchain»). En promedio, se extrae un bloque («la estructura que contiene las transaciones») cada 10 minutos. Los mineros compiten para resolver un difícil problema matemático basado en un algoritmo de hash criptográfico. La solución encontrada se llama Prueba de Trabajo. Esta prueba demuestra que un minero gastó mucho tiempo y recursos para resolver el problema. Cuando un bloque es `resuelto’, las transacciones contenidas se consideran confirmadas, y el bitcoin involucrado en las transacciones puede ser gastado. Por lo tanto, si reibes un poco de bitcoin en su billetera, le tomará aproximadamente 10 minutos para que su transacción sea confirmada.
Los mineros reciben una recompensa cuando resuelven el complejo problema matemático. Hay dos tipos de recompensas: nuevos bitcoins o comisiones de transacción. La cantidad de bitcoins creados disminuye cada 4 años (cada 210.000 bloques para ser exactos). Hoy en día, un bloque de nueva creación crea 12.5 bitcoins. Este número seguirá bajando hasta que no se emita más bitcoin. Esto ocurrirá alrededor de 2140, cuando se habrán creado alrededor de 21 millones de bitcoins. Después de esta fecha, no se emitirán más bitcoins.
Los mineros también pueden recibir recompensas en forma de honorarios de transacción. El minero ganador puede `guardar el cambio’ en las transacciones del bloque. A medida que la cantidad de bitcoin creada con cada bloque disminuye, las tarifas de transacción recibidas por el minero aumentarán. Después de 2140, el minero ganador sólo recibirá comisiones de transacción como recompensa.
La cantidad de bitcoin emitida con cada bloque se divide por 2 cada 210 000 bloques. Así que podemos calcular la cantidad máxima de bitcoin con algún código. Así que, sí, 21 millones serán probablemente la cantidad máxima de bitcoin emitida al final!
¿Cómo funciona, de todos modos?
La pregunta es, ¿cómo pueden todos en la red estar de acuerdo en una’verdad’ universal sobre la propiedad de bitcoin, sin tener que confiar en nadie en dicha red? La cadena de bloques no es creada ni gestionada por ninguna autoridad central. Cada nodo tiene acceso al libro mayor de transacciones que actúa como un registro autorizado. De alguna manera, cada nodo de la red, actuando sobre esas informaciones inseguras, llega a las mismas conclusiones y es capaz de replicar el mismo libro mayor. Tratemos de explorar cómo funciona esto.
Probablemente ayudará si tomamos un ejemplo de la vida real. Encuentra el bloque #502426. Seguiremos el ciclo de vida de este bloque desde su construcción hasta su validación final. Digamos que el minero ganador se llamaba Joe.
El bloque anterior
En el mundo de Bitcoin, se tarda aproximadamente 10 minutos en validar un nuevo bloque. Nuestro minero Joe estaba compitiendo para validar el bloque 502425, el anterior. Desafortunadamente, alguien más resolvió el problema antes que él. Pero, el final de la competencia de un bloque significa el comienzo de uno nuevo. Tan pronto como se extrajo el bloque 502425, Joe actualizó su copia local de la cadena de bloques y comenzó a crear un bloque candidato, el bloque 502426. Mientras el ordenador de Joe (o nodo) buscaba la Prueba de Trabajo para el bloque anterior, también buscaba nuevas transacciones. Estas nuevas transacciones se añaden al grupo de memoria o al grupo de transacciones. Aquí es donde las transacciones esperan hasta que pueden ser incluidas en un nuevo bloque y validadas.
Creación del bloque de candidatos
Cuando el nodo de Joe recibe una notificación de que el bloque actual tiene una prueba de trabajo válida, comienza a construir un bloque de candidato al reunir las transacciones en el grupo de transacciones. Elimina las operaciones ya presentes en el bloque anterior, si las hay. El bloque se llama bloque candidato porque aún no tiene una prueba de trabajo válida.
Así, podemos ver que el bloque #502426 tiene 3189 transacciones dentro de él. Este fue el número de transacciones presentes en el grupo de transacciones de Joe cuando creó su bloque de candidatos.
Transacción de base de monedas
Lo primero que hace el nodo de Joe es crear la transacción de la base de monedas. En pocas palabras, esta es su recompensa por minar el bloque. Esta transacción dice => Pague la dirección de la billetera de Joe xxx BTC para recompensarlo por encontrar una prueba de trabajo válida. Esta transacción es diferente de las otras porque, como expliqué antes, los bitcoins en la recompensa son creados de la nada. No provienen de la cartera de alguien. El nodo de Joe también calcula los honorarios de transacción en el bloque.
La recompensa de Joe = Recompensa por el bloque minero + cargos por transacciones
En este caso, podemos ver que la recompensa en bloque es de 12.5 BTC («Block Reward» en la columna de la izquierda) y las comisiones de transacción son iguales a 4.86507997 BTC («Transaction fees» en la columna de la izquierda).
12.5 + 4.86507997 = 17.36507997 BTC
Puedes ver los detalles de esta transacción en la siguiente lista.
Construcción de la cabecera del bloque
El nodo de Joe tiene la responsabilidad de crear un encabezado de bloque apropiado para el bloque que está extrayendo. Centrándose en el árbol de merkle, un resumen de las transacciones y mencioné que hay tres conjuntos diferentes de datos en un encabezado de bloque: el hash del bloque anterior, la raíz del árbol de merkle y datos para la competencia minera. Profundizaremos más en el último.
Campos de datos
Este conjunto de metadatos contiene:
- La versión: Este es un número de versión para rastrear las actualizaciones de software y/o protocolos.
- Marca de tiempo: Segundos de la época de Unix. Cuando se creó el bloque.
- Objetivo: Prueba de trabajo del algoritmo de destino para este bloque
- Nonce: Contador utilizado para el algoritmo de Prueba de Trabajo
Cuando se extrajo el bloque #502426, el número de versión era 2. Se convierte en 0x20000000 cuando se convierte en formato little-endian en 4 bytes. ( Versión en la columna de la izquierda)
A continuación, obtenemos la marca de tiempo de 4 bytes. Este es el número de segundos transcurridos desde el 1 de enero de 1970. Vemos que la marca de tiempo para este bloque es 2018-01-03 21:12:39 («Timestamp in left column»). Si convertimos esto en segundos, obtenemos 1515013959 segundos.
El campo de destino define el Comprobante de Trabajo necesario para que éste sea un bloque válido. En pocas palabras, el objetivo es generado por la red y define lo que hace que el hash de un bloque sea válido o no. Si su hash es superior al objetivo, no es válido. Esto es lo que se utiliza para calcular la dificultad. En nuestro bloque, la dificultad es de 1.931.136.454.487,72. Echa un vistazo al hachís del bloque:
000000000000000000000020c60222099aaebc6e7795784f74628ec640b223d3d339
Hay 18 ceros a la izquierda. Esta es nuestra dificultad. Cada hash con menos de 18 ceros a la izquierda es inválido (cada hash con 17 ceros a la derecha y menos sería menor que el objetivo requerido).
El último campo es el nonce. Se inicializa a cero.
Todo está listo para que el nodo de Joe explote el bloque. El objetivo es encontrar un valor para el valor que resulte en un hash inferior al objetivo. Por lo tanto, el nodo minero probará miles de millones o trillones de valores de nonce antes de obtener un hash.
Minería
Como puedes ver, la minería es como una lotería. No hay manera de predecir cuál de los dos resolverá el problema.
En el caso de Bitcoin, la función hash utilizada se denomina SHA256. Un algoritmo hash siempre produce los mismos datos de longitud arbitraria con las mismas entradas. Es imposible calcular el mismo hash con dos entradas diferentes («collision»). También es imposible predecir de antemano la salida de cualquier dato dado.
SHA256 siempre produce una salida de 256 bits de longitud. La minería es encontrar el nonce, la única entrada que cambia cada vez que ejecutamos la función hash. Es muy fácil probar que el nonce encontrado produce un hash válido. Todas las informaciones están disponibles, todos pueden ejecutar la función de hash y confirmar si el hash es válido o no. Debido a que también es imposible predecir cuál será el valor del nonce, también actúa como una prueba de que el minero trabajó para obtener un hash válido («De ahí que» =>»Prueba de Trabajo»).
Ajuste del objetivo
En Bitcoin, se extrae un bloque cada 10 minutos aproximadamente. La dificultad se calcula de manera que nunca se desvíe demasiado de este límite. Si la dificultad sigue siendo la misma a largo plazo, mientras que la potencia del ordenador aumenta, cada vez llevará menos tiempo extraer un bloque. Para asegurarse de que esto no suceda, el objetivo Prueba de trabajo es un parámetro dinámico. En el mundo Bitcoin, el objetivo se ajusta cada 2016 bloques. Luego, comprobamos la cantidad de tiempo que se tardó en minar esos bloques de 2016. Debería haber tomado 20160 minutos ( 2016 * 10 minutos). La dificultad aumenta o disminuye dependiendo del tiempo que se tardó en explotar esos bloques.
¡Éxito!
El nodo de Joe se está poniendo a trabajar y empieza a cortar el encabezado del bloque. Después de aproximadamente 10 minutos, descubre un hash válido. Podemos ver que el nonce utilizado fue 2469953656 («Nonce» en la columna de la izquierda).
El nodo de Joe transmite inmediatamente el bloque a todos sus pares. Necesitan validar el nuevo bloque antes de propagarlo a sus pares. Esta es la parte donde un minero deshonesto puede ser descubierto. Si los datos no son válidos, el minero habría perdido su tiempo y su capacidad de cálculo. Los datos válidos incluyen:
- El hash del encabezado del bloque es menor que el objetivo
- El tamaño del bloque está dentro de los límites aceptables
- La marca de tiempo de bloqueo es de menos de dos horas en el futuro.
- La primera transacción es una transacción de base de monedas (y sólo la primera)
- La transacción de coinbase tiene una recompensa válida.
Todas las operaciones dentro de los bloques son válidas (también tienen una lista de verificación propia).
Cada nodo valida independientemente los nuevos bloques siguiendo exactamente las mismas reglas. Esto asegura que los mineros no pueden hacer trampa. Este es un componente clave del consenso descentralizado.
Si el bloque es válido, los otros mineros actualizarán su propia copia de la cadena de bloques con el nuevo bloque 502246. El hash de bloques de Joe es usado ahora por todos los mineros para extraer el bloque 502247.