CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
Intro: BlockChain con [Link]
Veremos paso a paso como crear desde cero una Blockchain simple para entender su
funcionamiento y arquitectura detrás de la tecnología sobre la que se funda Bitcoin,
Ethereum y todo el mundo Crypto.
Para ello vamos a utilizar JavaScript y el entorno de [Link].
En pocas palabras, BlockChain es un sistema de gestión de cadena de bloques que
contiene información. Este sistema fue creado en 1991 para marcar el tiempo de
creación de documentos y sellar la fecha de los documentos digitales de manera que no
sea posible manipular esta fecha.
Fue adoptado por Satoshi Nakamoto en 2009 para crear la criptomoneda Bitcoin.
La información de los bloques de la cadena una vez ha sido registrada, es muy difícil
cambiarla. Para ello cada bloque contiene tres partes:
- Data (Información): depende del tipo de bloque. Por ejemplo, en bitcoin
contiene la información del remitente, destinatario y cantidad de la transacción.
- Hash (codificación): comparable con una huella digital, sirve para identificar el
bloque. Esta huella se calcula en el momento de creación del bloque.
Si hay cambios en el bloque, esta huella cambia por lo que es muy útil para
detectar cambios en bloques.
- Hash del bloque previo: útil para crear una cadena.
Hash: 1Z8F Hash: 6BQ1 Hash: 3H4Q
Prev Hash: 0000 Prev Hash: 1Z8F Prev Hash: 6BQ1
El bloque 0000 es el bloque génesis. Si el hash del segundo bloque cambia debe
actualizar el hash del bloque previo del tercero En Bitcoin se mide en unos 10
minutos el recálculo del hash y añadirlo a un nuevo bloque de la cadena. La
modificación de un hash implica recalcular la prueba de trabajos de todos los
bloques siguientes.
Toda la seguridad de este sistema proviene del uso creativos de la técnica de
codificación (hash) y de la prueba de trabajo.
1
CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
Esta técnica en vez de usar mecanismos centralizados en forma de estrella se
basa en el uso de redes P2P donde cualquiera puede unirse con las credenciales
oportunas. Cuando alguien se une, obtiene una copia completa del blockchain.
Si alguien crea un nuevo bloque éste es enviado a todos los miembros/nodos de
la red. Todos los nodos de la red crean un consenso para determinar qué bloque
son válidos.
Para validar qué se puede hacer con los bloques tenemos los “Smart contracts”
que son pequeños programas que se almacenan dentro de cada bloque que se
utilizan para intercambiar monedas bajo ciertas condiciones.
Esta tecnología se está extendiendo cada vez en más ámbitos de negocio como
los historiales médicos, documentos notariales, impuestos, etc.
2
CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
1. Creación de un blockChain en JavaScript.
1.1. Backend.
En esta parte del tutorial aprenderemos como crear nuestra propia cadena de
bloques con JavaScript. Veremos los entresijos de una cadena de bloques usando
código simple.
No es una implementación completa, pero lo suficiente para entender cómo las
cadenas de bloques funcionan y cómo estas garantizan que los bloques en la cadena
nunca pueden ser cambiados.
Después de crear nuestra propia cadena de bloques (blockchain), intentaremos
manipularla y alterar uno de los bloques para demostrar como la cadena es capaz
de detectar el fraude.
Vamos a Visual Studio Code y creamos una clase Block en un fichero [Link]:
Vamos a crear un método para calcular el hash que utilizará sha-256 como una
función de hash que no está disponible por defecto en javascript por lo que es
necesario instalar la siguiente librería:
La tenemos en la carpeta de node_modules:
3
CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
Una vez creada la función calculateHash, la invocamos en el contructor:
Creamos ahora una nueva clase para nuestro Blockchain:
Vamos a crear ahora unos métodos que nos permitan manejar la cadena:
Para probar esto debemos crear varios objetos de tipo Blockchain:
4
CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
Ejecutamos en la consola:
Esta configuración no nos permite si el bloque actual es válido. Para ello creamos el
siguiente método isChainValid:
Vamos a probarlo introduciendo este código:
Resultado:
5
CONSTRUYENDO UN BLOCKCHAIN EN JAVASCRIPT
Si ahora cambiamos el contenido del bloque veremos qué cambia:
Probamos y vemos como ahora detecta que el blockchain no es válido por modificar la
data:
Si modificamos el hash:
Probamos:
Sigue siendo falso porque la relación con el bloque previo está rota. Los bloques no se
eliminan. Si hay algún problema con la cadena debemos retornarlos a un estado donde
se restauren los enlaces. Eso lo haremos en el siguiente apartado “Prueba de trabajo”.