Saltar al contenido

Chiccocoin: aprenda qué es una cadena de bloques creando una en NodeJS

Descargo de responsabilidad: chiccocoin no es una verdadera criptomoneda y no la vendemos, este artículo es solo para fines recreativos / educativos

Todos los días en nuestros feeds encontramos noticias sobre nuevas criptomonedas o alguien que dice que son una gran burbuja que pronto explotará y de la que solo quedará la blockchain. Pero, ¿qué es la cadena de bloques?
Por definición :

Es una lista de registros en continuo crecimiento, llamados bloques, que están vinculados y asegurados mediante criptografía.

Entonces, la cadena de bloques es una inmutable, secuencial cadena de registros denominada Bloques. Cada bloque puede contener transacciones, archivos o cualquier dato que desee. Lo importante es que son encadenado juntos usando hashes .
Las cadenas de bloques son seguras por diseño y son un ejemplo de un sistema informático distribuido con alta tolerancia a fallas bizantinas. Esto hace que las cadenas de bloques sean potencialmente adecuadas para el registro de eventos, registros médicos y otras actividades de administración de registros, como la administración de identidades, el procesamiento de transacciones o la votación.

¿Cómo funciona técnicamente una cadena de bloques?

Comprender el artículo de lectura o los tutoriales de Blockchains no es fácil. Deambulando entre las muchas guías en línea encontré este artículo de Daniel van Flymen y mi curiosidad por comprender cómo funcionaba realmente ha crecido tanto para intentar crear una cadena de bloques usando NodeJS.

El primer paso para crear un nuevo proyecto es crear el logotipo. Hace que todo sea real. Para hacer esto utilicé el creador de logotipos de Squarespace y este es el resultado:
Ahora realmente podemos comenzar con nuestro proyecto.

2. Comience con Express

Para facilitar la creación de las API para interactuar con la cadena de bloques comencé el proyecto directamente con ExpressJS usando el paquete npm express-generator


npm install -g express-generator
express ./chiccocoin
cd chiccocoin
yarn

Puede encontrar todo el código en línea en este repositorio:

thecreazy / chiccocoin

3. Crea la cadena de bloques

Ahora vamos a crear nuestro blockchain, releyendo la definición de blockchain podemos resumir que las funciones absolutamente necesarias son:

  • newBlock: función que crea un nuevo bloque
  • newTransaction: función que crea una transacción y la pone en cola para guardarla la próxima vez que se cree un bloque
  • hash: función que cifra un bloque
  • lastBlock: Función que devolverá el último bloque de la cadena

Entonces podemos crear nuestro blockchain.js archivo con esta estructura:
El constructor de nuestra clase creará dos variables importantes, cadena y corrientetransacción. Cadena contendrá, en orden, todo nuestro bloque. ActualLas transacciones contendrán todas las transacciones que se agregarán a un bloque en la siguiente extracción.

3.1 Crear un bloque

Pero, ¿qué es un bloque? La representación que utilizará de un bloque es un objeto javascript que contendrá:

  • Índice
  • Marca de tiempo
  • Lista de transacciones
  • Prueba
  • Hash del bloque anterior

De esta manera, la idea de blockchain ya se vuelve un poco más clara. Es un conjunto de bloques secuenciales. ( índice ) vinculado al anterior y protegido mediante criptografía ( anteriorpicadillo _). El anteriorhash dentro del bloque es el quid de toda la cadena de bloques. Nos permite garantizar la seguridad e inmutabilidad de toda la cadena. Si un atacante pudiera modificar un bloque de una cadena, todos los hash inmediatamente después de ese bloque serían incorrectos. Evidentemente se podría intentar recalcular los hashes de toda la cadena y por eso a más bloques hay más el blockchain es seguro. Además, hay una copia (idéntica) de la cadena de bloques en cada nodo (_instancia de NodeJS en este caso ) esto hace que sea casi imposible que un hacker pueda modificar todas las copias al mismo tiempo.
Entonces, crear un nuevo bloque es muy simple en nuestro caso. Solo necesitamos empujar un nuevo objeto a la cadena. La función recibirá la prueba (luego hablaremos de lo que es) y el hash del bloque anterior y devolverá el bloque. La función también agregará al bloque todas las transacciones que aún no se han guardado y limpiará nuestra variable current_transactions
3.1.1 Función hash
La función hash que utiliza para nuestro Chiccocoin es un SHA256 trivial pero puedes usar la función hash que prefieras. Lo importante es hacer el hash del bloque anterior, para ello haremos el hash del objeto serializado

3.2 Crear una transacción

La función para agregar una nueva transacción es muy trivial. Es agregar a la Actualtransacción arregla la transacción. Una transacción es un objeto formado por _sender, recipiente y Monto . Será la función minera de almacenar transacciones dentro de un bloque. Por utilidad nos aseguraremos de que la función nos devuelva el índice del bloque en el que se guardará

4. La prueba de trabajo

En general, la prueba de trabajo es una función o un protocolo inventado y utilizado para disuadir ataques de denegación de servicio, pero la cadena de bloques la utilizó para determinar cómo se crean o se crean nuevos Bloques. minado sobre ellos mismos . El objetivo de un prisionero de guerra es descubrir un número que resuelva un problema. Este número debe ser Difícil de encontrar pero fácil de verificar, como el cálculo de números primos, cuanto más avancemos más difícil será encontrar uno, pero el esfuerzo por entender si lo es o no siempre será muy banal.
Para extraer una Chiccocoin decidimos crear una c4ff3. Nuestro prisionero de guerra será este:

Encuentre un número p que cuando se le aplica un hash con la solución del bloque anterior, se produce un hash que comienza con c4ff3.

Un ejemplo:


c4ff3e9373e...5e3600155e860

Codifiquémoslo. Las funciones que serán necesarias son dos:

  • validProof: dado el POW anterior y el número de ap comprueba si la solución al problema es correcta
  • proofOfWork: ciclo hasta que se encuentre una solución

5. Sirve a través de API

Haber comenzado el proyecto con expressjs sirviendo nuestra blockchain a través de API será muy simple.
Crearemos tres API:

  • / transacciones / nuevo para crear una nueva transacción en un bloque
  • / mine para decirle a nuestro servidor que extraiga un nuevo bloque.
  • / chain para devolver el Blockchain completo.

Creé una clase de soporte de Chiccocoin, dentro /middleware/chiccocoin.js , que contiene todo el middleware necesario para nuestras API y crea una nueva cadena de bloques

5.1 El Endopoint de la Cadena

Este punto final será muy, muy sencillo. Solo devolverá el cadena matriz almacenada dentro de la cadena de bloques

5.2 El punto final de las transacciones

El punto final de la transacción comprobará los datos pasados ​​y llamará al newTransaction función de la cadena de bloques. En el futuro, podríamos usar este middleware para verificar si realmente el remitente y el destinatario son correctos y / o si se puede realizar la transacción. Usaremos la información devuelta por el newTransaction función para informar al usuario en qué bloque se guardará la transacción.

5.3 El punto final de la minería

Nuestro punto final de minería es donde la chiccocoin se convierte en realidad. Tiene que hacer cuatro cosas:

  1. Calcule la prueba de trabajo
  2. Recompense al minero (nosotros) agregando una transacción que nos otorga 1 moneda
  3. Agregue cualquier transacción pendiente
  4. Forja el nuevo bloque agregándolo a la cadena.

Podemos probar todas nuestras API a través de curl o mediante Postman. Agregué el postman_collection.json dentro del repositorio para simplificarle el uso de cartero.

Conclusiones

La idea detrás de blockchain no es nada nueva ni complicada como hemos visto. Los desarrolladores banalmente usan una cadena de bloques todos los días sin darse cuenta ( git ). Es un concepto muy antiguo que, sin embargo, resucitado bajo un nuevo punto de vista está cambiando la forma de pensar la economía, creando burbujas (en mi opinión) y nuevas posibilidades para una economía “más segura” desde el punto de vista de la economía. vista de conocimiento común. Tener la capacidad de controlar cuándo y cómo se llevó a cabo una transacción es algo que se desarrolla silenciosamente, pero tiene un enorme potencial.
Lo que hemos creado es un blockchain simple que funciona con un solo nodo y en el que solo uno puede hacerlo (hay criptomonedas basadas en esto). Seguramente la gestión del multinodo y de todos los problemas en torno a este tema son igualmente interesantes. Tal vez hagamos un segundo artículo sobre esto, pero coloquemos una estrella en el repositorio para obtener más actualizaciones.

thecreazy / chiccocoin

Espero que este artículo lo haya empujado a mirar más allá de lo que es el comercio de bitcoins y a que se sienta intrigado por lo que realmente puede hacer con blockchain.

Gracias y estad atentos 🙂

Este contenido se publicó originalmente aquí.