Para un puñado de bitcoins: validando transacciones en una cadena de bloques… (1/2)

Nota: Este artículo es muy teórico y, por lo tanto, bastante extenso. Sin embargo, le permitirá comprender el protocolo para validar transacciones en una cadena de bloques, que es absolutamente esencial si está interesado en el tema y desea comprender todos los debates actuales relacionados con las criptomonedas y blockchain.

Hay una cosa que omitimos intencionalmente en nuestro primer artículo popular sobre blockchain: esta tecnología es en realidad una red Peer-to-Peer que proporciona una solución al “problema de los generales bizantinos”.

Concretamente: ¿cómo estar seguro de que la información transmitida es veraz, sin necesariamente confiar en quien la transmite?

Por eso, hoy nos interesa el proceso técnico que permite certificar la validez de una transacción (ya sea un intercambio de moneda, datos, información …) y registrarlas sin pasar por un tercero de confianza , ya que este es el principio mismo de blockchain.

Introducción: la función Hash

Esta introducción será breve pero esencial para comprender el flujo de una transacción.

Una función hash criptográfica ( función hash en inglés) es una función que, con un determinado de tamaño arbitrario, asocia una imagen de tamaño fijo, y de la cual una propiedad esencial es que es prácticamente imposible de invertir, es decir que si la imagen de un dato por la función se calcula de manera muy eficiente, el cálculo inverso de un dato La entrada que tiene un cierto valor como imagen resulta prácticamente imposible. Por esta razón, se dice que dicha función es unidireccional . (Wikipedia)

Proporcionaremos información sobre las diferentes etapas de la “validación” de una transacción y explicaremos por qué estas etapas son necesarias.

Suponga que A quiere transferir cierta cantidad de moneda criptográfica llamada Futurscoin a B.

Emitir la transacción

Este sistema de firma digital permite verificar que nadie se haga pasar por A para iniciar una transacción en su nombre.

Esta firma digital se basa en un método criptográfico llamado ECDSA (obtenga más información aquí).

Los pares verifican que las Futurscoins que A quiere gastar provienen de una transacción anterior registrada en la cadena de bloques, y que aún no se han reutilizado para otra transacción.

La transacción entonces se vuelve “elegible” (o válida) y entra en lo que se llama “grupo pendiente”, es decir, una lista de transacciones que esperan ser registradas en un bloque.

Gracias al sistema “Merkle Tree” (más información aquí), es imposible modificar una transacción en esta lista sin que sea detectada directamente por todos los nodos.

Esta lista de transacciones pendientes se difunde por toda la red. Por tanto, cada nodo de la red tiene una lista local de transacciones pendientes.

La constitución de un bloque

Un bloque consta de un encabezado y la lista de transacciones (la raíz merkle) que contiene (entre otras cosas). En el encabezado se ingresan varios datos: la versión del bloque (las reglas que lo definen), el identificador (o Hash) del bloque anterior, la fecha y la dificultad de realizar la prueba de trabajo.

Aquí es donde vemos aparecer el concepto de “cadena”: el identificador de un bloque depende del del bloque anterior. Así, si se modifica un elemento de un bloque, será necesario volver a validarlo, lo que modificará su ID, por lo que será necesario volver a validar todos los bloques siguientes porque todos dependen de este ID. Por eso se dice que es imposible modificar lo que hay en la cadena de bloques.

El bloque se valida y se agrega a la cadena de bloques solo si está asociado con una prueba de trabajo.

Estamos hablando de prueba de trabajo aquí, pero ¿qué es y para qué sirve?

La validación de un bloque

Un nodo que desee agregar un bloque a la cadena, por lo tanto, selecciona parte de su lista de transacciones pendientes locales para incorporarlo en un bloque.

Por otro lado, existe un límite: no se puede integrar una cantidad infinita de transacciones en un bloque.

La definición de este límite varía entre blockchains. Por ejemplo, en la cadena de bloques de Bitcoin, el tamaño de un bloque está limitado a 1 MB. (24/07/2017)

Por tanto, cada nodo puede obtener un bloque diferente pero solo uno logrará validar su bloque: el que proporcionará su prueba de trabajo primero.

Una vez que tiene su bloque, no puede validarlo (enviarlo a la cadena de bloques) en un instante …

Si este fuera el caso, la cantidad de bloques para agregar al mismo tiempo sería demasiado alta: solo puede agregar un bloque a la vez.

Los mineros también deben acordar qué bloque agregar.

Por tanto, es el nodo que proporciona una prueba de trabajo primero el que validará su bloque.

Esta prueba de trabajo es la solución de una ecuación muy complicada.

Por lo tanto, resuelve una ecuación compleja que comprende varias variables, incluido el identificador del bloque anterior y el identificador de la lista de transacciones incluida en el bloque.

La única forma de resolverlo es probar como un fastidio las diferentes posibilidades hasta que encuentres una solución. Por tanto, utiliza parte de su potencia informática para realizar esta tarea.

Al principio solo era posible “minar” con un procesador. Ahora es posible hacerlo con tarjetas gráficas, que está demostrando ser más económico / ecológico y sobre todo rentable.

Por tanto, es un problema difícil de resolver pero es fácil verificar que la solución dada es correcta: basta con verificar que la igualdad se verifica reemplazando la incógnita por la solución propuesta.

Detalles técnicos: ¿te gustan las matemáticas? ¡Tanto mejor!

En realidad, es una ecuación de la forma f (H, T, N) & lt; b con f una función hash, H el identificador del bloque anterior (su hash), T un hash de la lista de transacciones, y N un desconocido: el nonce . La única forma de resolver esta ecuación es experimentar con las diferentes posibilidades una por una para N hasta que encuentres una que funcione (y sí, recuerda, ¡las funciones hash son unidireccionales! Incluso sabiendo b, es imposible encontrar N directamente) . El nonce aparecerá en el encabezado del bloque: esta es una prueba de trabajo.

¡b representa la dificultad aquí!

Este último se ajusta según las capacidades de la red para que siempre haya un bloque codificado a intervalos de tiempo regulares.

El identificador de bloque (o hash) será, por tanto, f (H, T, N), siendo N una solución válida.

Cuando un nodo encuentra la solución, la comunica a toda la red, que verifica su respuesta. Si es correcto, todas las copias de la cadena de bloques se actualizan con este nuevo bloque.

Y así sucesivamente: cada minero toma una nueva lista de transacciones e intenta validar un nuevo bloque proporcionando su prueba de trabajo.

Por tanto, existe una competencia real entre los miembros de la red: cada vez que se valida un bloque, todos comienzan desde cero en un nuevo bloque.

Sin embargo, ¿por qué los nodos soportarían los costos (electricidad, energía de la computadora, etc.) para validar las transacciones y así hacer que la red funcione? Una razón, por unos pocos dólares…

Los nodos que validan correctamente los bloques generan una cierta cantidad de monedas futuras que se les debe.

Por ejemplo, un nodo que logra validar un bloque en la cadena de bloques bitcoin crea 12.5 bitcoins, o … $ 33,000 que van directamente a su bolsillo (“billetera”) . Durante el 20/07/2017 a las 5:30 p.m., eso es $ 2,460 / BTC. Por cierto, esta es la única forma de crear bitcoins. La cantidad de bitcoins creados por un minero se divide por 2 cada 4 años.

Por eso los nodos que validan los bloques se denominan “ menores ” en referencia a mineros de la fiebre del oro que extraían el metal para enriquecerse y entraron aumentar la oferta monetaria existente.

Por lo tanto, se alienta a los menores a validar bloques de transacciones porque se les paga por esta acción.

Se te debe ocurrir una pregunta: y si DOS mineros encuentran la solución al mismo tiempo, es decir, cada uno valida su bloque simultáneamente, ¿cómo se regula esto en la red?

Bifurcaciones en cadena, o “bifurcaciones”: la teoría de los seis bloques

Si alguna vez ha realizado transacciones con criptomonedas, sabe que debe esperar (en promedio) a que se validen seis bloques después de que se haya registrado su transacción para considerarla completada.

/ strong> ¿Pero sabes por qué?

Es posible que dos mineros validen su bloque al mismo tiempo. Por lo tanto, ambos se considerarán válidos en la cadena de bloques y se aplicará la regla de oro.

Regla de oro: siempre se validará la cadena más larga.

Aquí, la cadena verde finalmente se ha vuelto más corta que la azul. Por tanto, es la cadena azul la que se ha incorporado a la cadena de bloques, invalidando los bloques (y por tanto las transacciones) de la cadena verde.

Entonces es posible, si el bloque en el que se encuentra su transacción es parte de una bifurcación, que se registre en un momento dado y luego se invalide después de : por ejemplo, si su transacción estaba en el bloque 92bis.

Esto significa que su bloque estaba en la cadena que se ha acortado.

Es por este motivo que es recomendable esperar seis bloques después de aquel en el que se registró el pago para considerarlo efectivo.

Seis bloques son una hora en la cadena de bloques de Bitcoin y un poco más de un minuto en la cadena de bloques de Ethereum.

Y ahí lo tienes, la transacción de A se ha registrado en la cadena de bloques y las monedas futuras han pasado de A a B.

Resumamos las diferentes etapas:

No… Cierra esta pestaña sobre las mejores técnicas de minería de bitcoins… ¿Qué? ¿$ 33,000 es nada? Y pensaste que eras el primero en entenderlo…

Grupos de mineros, granjas de bitcoins y ataques a la red

Hoy en día hay grandes fábricas de bitcoins, que se ven más o menos de esta manera:

O incluso cooperaciones de mineros (grupos) que centralizan su poder de cómputo. Tanto para decirte que la probabilidad de que extraigas un bloque con tu pequeña computadora portátil tan poderosa como es, es muy, muy baja o incluso nula.

El problema es que esto podría hacer posibles ciertos ataques contra la red, incluso establecer alguna forma de autoridad central , lo cual es contrario al principio mismo de blockchain.

Continuará…