Qué es la tecnología blockchain y cómo funciona
Tags: blockchain, beginners
Published: 2021-03-18 08:16:08

Una blockchain es un gran libro de cuentas en el que se almacenan las transacciones que han tenido las distintas partes. Ya existían libros de cuentas antes de la blockchain, pero seguían teniendo los problemas de la posible manipulación y falsificación de datos por parte de quien controlara o tuviera acceso a dicho registro.

Sin embargo un tal Satoshi Nakamoto pensó en hacer una red de nodos P2P que funcionara a efectos prácticos como un libro de cuentas, pero en el que ninguno de esos nodos tuviera el control completo del mismo, sino que todos tuvieran que verificar las transacciones.

Aunque existan varias tecnologías blockchain, cada una con sus peculiaridades, hay algunos conceptos que se comparten entre ellas y son los que explicaré en este artículo:

**Hashing:** 

Se denomina función Hash a aquella que devuelve una cadena (normalmente de longitud fija) para entradas de datos de longitud variable. Además, es una función determinista: La función siempre devolverá el mismo resultado para el mismo valor de entrada, esto expresado de forma matemática quiere decir que el resultado es una función de los parámetros de entrada.

Es matemáticamente inviable revertir dicha función (la capacidad computacional necesaria para calcular la entrada que produce un valor de salida concreto de la función de hash es muy elevada).

En el ecosistema blockchain, se utilizan hashes (llamamos hashes a la cadena que se obtiene como resultado tras aplicar una función de hash) al tratar con las transacciones y con los bloques.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2vz54rq3okmvg2rw24qb.png)
 

**Transacciones:** 

Podemos entender la blockchain como una máquina de estado finito, donde el estado global es compartido por todos los nodos y está compuesto por la cadena de bloques, que contiene en su interior transacciones. Cada transacción o bloque de transacciones corresponde un cambio de estado.

La transacción es una estructura de datos que codifica la transferencia de valor entre 2 participantes de la blockchain. Una transacción va firmada por el emisor con su clave privada y serán los mineros o validadores los que la incluyan en un bloque, según el tipo de blockchain del que se trate.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd8scajvasopox2ce0iw.png)
 

**Bloques:** 

Un bloque es un conjunto de transacciones agrupadas. Los distintos bloques van formando el "libro de cuentas". Se divide en cabecera y cuerpo del bloque.

La cabecera del bloque almacena: 
- Hash de la cabecera del bloque anterior
- Timestamp 
- Merkle root

y otros parámetros según la blockchain en concreto que miremos.

El hash de la cabecera del bloque anterior hace así que estén encadenados, cada bloque con su anterior. El timestamp permite verificar qué bloque fue creado antes que otro.

La merkle root es la raíz de la estructura de datos merkle tree en la que se almacenan las transacciones. Un merkle tree es una estructura de datos en forma de árbol, donde los enlaces entre los nodos son mediante hashes.

La clave de la veracidad de la blockchain es que un pequeño cambio en una transacción altera los valores de los hashes del merkle tree y por lo tanto se propagan cambios hasta la raíz. De la misma forma, un pequeño cambio en la cabecera del bloque (la raíz dek merkle tree o cualquier otro campo) hace que cambie le valor del hash de ese bloque.

Por eso intentar hacer un cambio en un bloque en medio de la blockchain implicaría recalcular todos los hashes de los bloques en adelante, haciendo esto computacionalmente inviable por los algoritmos de consenso que veremos en un par de secciones.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nclwrvbmoqbgnecrjcqc.png)
 
Nota: Ese árbol de Merkle está simplificado teniendo solo 2 datos. Si tuviera más, los datos siempre estarían en los nodos hoja, como se puede ver en esta imagen.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vyvy0auweg4gj6v7lze0.png)
 

**Red P2P:**

La blockchain no es solo tener un libro de cuentas organizado en bloques con hashes, sino que además tiene esa estructura de datos descentralizada, es decir, todos los nodos de una red entre pares (P2P) tienen una copia de esa estructura de datos.

Podemos hablar de tipos de organización de la información:
- Centralizada: Un solo nodo tiene toda la información
- Distribuida: Varios nodos tienen la información, se la reparten según la redundancia que se quiera conseguir.
- Descentralizada: Todos los nodos tienen toda la información. Este es el caso de la blockchain.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h97l4t4hy2k0b3nxoh23.png)
 


**Transaction Pool (o memory pool):**

Las transacciones no son incluidas inmediatamente en la blockchain, sino que necesitan ser validadas, como vemos a continuación. Existe por lo tanto un lugar de memoria donde esperan las transacciones pendientes.

Cuantos más nodos "mineros/validadores" y menor dificultad del bloque, más rápido se incluyen transacciones de este pool a los bloques. Dentro del pool se ordenan según el "valor" que tengan, por ejemplo se ordenan siendo las primeros las que ofrezcan mayor comisión para el minero en una bloockchain Proof of Work.

**Consenso:**

El algoritmo de consenso determina la forma de tomar decisiones en la blockchain, esto es, el criterio para incluir transacciones en bloques e ir formando una cadena de bloques única que compartan todos los nodos.

Si la blockchain fuera un solo nodo (organización centralizada), entonces la decisión de ese nodo es definitiva y los demás confían en él. Pero aquí los nodos tienen que seguir unas reglas para tomar decisiones en conjunto.

Hay diferentes algoritmos que se pueden emplear, el más famoso es Proof of Work porque es el que emplea Bitcoin y Ethereum hasta la fecha (¡con Ethereum 2.0 cambiará a Proof of Stake!). Veamos 3 de ellos:

- Proof of Work: En la cabecera del bloque existe un número entero positivo llamado "nonce" que el nodo minero va variando y calculando el hash para cada variación. Cuando encuentre un hash que cumpla unas condiciones según el parámetro de "dificultad", entonces informa al resto de nodos para incluirlo en la blockchain.

Los nodos mineros se encargan de buscar esos nonces, con el objetivo de llevarse la comisión por cada bloque que crean. Cuando uno ha minado un bloque, el resto que estaban trabajando en minar su bloque lo comprobarán, lo adoptarán y todos pasarán al siguiente bloque.

En la blockchain pueden existir varias ramas a la vez (por ejemplo porque en mismo instante de tiempo un minero mina un bloque y otro mina otro, pero luego una de las dos crece más, de forma que la mayoría de los nodos adoptan esa y al otro no le queda otra opción que abandonar la suya y adoptar la otra.

Calcular esos nonces requiere alta capacidad computacional, por eso te ves granjas de GPUs para minar bitcoins. Es un algoritmo seguro mientras que los nodos buenos supongan más de la mitad de los mineros. Dicho de otra forma, para que un atacante tenga éxito en sus fechorías deberá tener más de la mitad de capacidad de cómputo de la red.

- Proof of Stake: Ahora el nodo no es un "minero" sino un "stakeholder", en vez de invertir su capacidad de cómputo, invierte sus propios fondos de criptomonedas. El stakeholder "invierte" sus criptomonedas a un bloque. Se añade a la blockchain el bloque al que más se haya invertido y finalmente, se recompensa proporcionalmente a la cantidad invertida a cada stakeholder.

También se penaliza a los que inviertan erróneamente, eliminándolos del proceso de validación. Es un algoritmo seguro mientras los nodos buenos tengan más de la mitad de los fondos invertidos, es decir, mientras que un atacante no posea más de la mitad de los fondos para que no pueda engañar al resto y hacer que sus bloques malignos ganen el proceso de validación.

- DBFT (Delegated Byzantine Fault Tolerance): Se le asignan roles a los nodos: ordinarios o de consenso. Los de consenso participan en la validación. Para cada bloque se elige a uno entre los de consenso, llamado en ese momento speaker (portavoz). El speaker propone un bloque, el resto vota. Se incluye el bloque si el el 66% o más de los votantes lo aceptan, si no, se elige otro speaker y se vuelve a empezar.

En todo momento solo hay un nodo que propone, así que es muy ligero computacionalmente. Exige que haya un sistema de reputación entre los nodos para que no hayan nodos de consenso votando siempre de forma negativa y malintencionada.

**Cartera (wallet):**

Necesitas de una aplicación para interactuar con tu cuenta del banco. Una wallet es esa herramienta para interactuar con tu cuenta Ethereum, con la libertad de cambiar de wallet sin cambiar de cuenta. La wallet no tiene los fondos, los tiene tu cuenta.

En Ethereum, una wallet además de envolver a una o varias de tus cuentas, te permite hacer login a aplicaciones descentralizadas. En todas las aplicaciones descentralizadas basadas en Ethereum, podrás hacer login con tu cuenta Ethereum, sin necesidad de crear credenciales para cada una de ellas (aunque puedan además pedirte datos de contacto o información adicional, será cada aplicación particular por su lógica de negocio, no debido a la tecnología blockchain).



Si has llegado hasta aquí, ¡enhorabuena!👏👏
Ahora entiendes cómo funciona la tecnología blockchain, pero hay muchos tipos de blockchains y algunas que dicen que puedes escribir programas en ellas llamados Smart Contracts...

¡Próximamente más artículos al respecto!

Si te ha servido este artículo te invito a compartirlo en tus redes sociales y a dejar algún comentario en él. Es el primero que escribo y me ayudará mucho para continuar escribiéndolos ✌️