El objetivo de este artículo es explicar de manera sencilla los fundamentos de la tecnología blockchain y ver, mediante un ejemplo básico aunque didáctico, el modo de crear bloques y como vincularlos a una cadena.

Blockchain (cadena de bloques en castellano) es un nuevo paradigma tecnológico que está jugando un papel muy relevante en la actualidad y que según se estima lo tendrá en mucha mayor medida en el futuro. Su aplicación más conocida actualmente es la de ser la base de las criptomonedas y de hecho apareció con el bitcoin en 2009.

Podemos definir a una cadena de bloques como un sistema de registro de información distribuida, descentralizado y altamente seguro.

El carácter descentralizado radica en que la información se encuentra distribuida en infinidad de nodos independientes. Cada uno de de los nodos alberga una réplica exacta de la cadena siendo poseedor de la información sin la necesidad de la existencia de ningún sistema intermedio.

La información va encriptada no pudiendo ser posible la modificación ni eliminación de ningún bloque de la cadena. Cada nodo debe validar la cadena siendo necesario el consenso de la mayoría de los nodos para considerarla válida. Por otro lado el hecho de que la cadena esté replicada en numerosos nodos independientes hace que un posible falseamiento suponga el alterar la cadena (reconstruyéndola desde el bloque genesis…) en la mayoría de los nodos, lo cual se puede considerar practicamente imposible o altamente improbable. Todo ésto dota al sistema de un alto nivel de ciberseguridad.

Cada boque de una cadena está constituido por 3 elementos:

  • La información del bloque
  • El hash del bloque
  • El hash del bloque previo en la cadena

De éste modo un nuevo bloque que se añada a una cadena quedará vinculado a la misma mediante el hash del bloque previo y se caracterizará por su hash, estando éste constituido por la información del bloque y por el hash del bloque previo.

¡Veamos un ejemplo!

Podeis descargar el código mediante el siguiente enlace de github https://github.com/AlvaroTorrresB/BlockChainAtbNinja.git

El bean Block contiene los siguientes atributos:

El atributo Data contiene la información del bloque, en este ejemplo y para simplificar sólo está constituido por el atributo reference (que representa una referencia de algún sistema externo…) pero puede tener todo lo que sea necesario para establecer la información a registrar con el bloque.

El atributo linkHash es el hash del bloque previo en la cadena, necesario para poder vincular ambos bloques. En el caso del primer bloque de la cadena, denonimado génesis, el linkHash es 0 como veremos más adelante.

El atributo hash representa al hash característico del bloque y que será necesario para la inclusión del próximo bloque en la cadena pero en este caso como linkHash.

Para el ejemplo he utilzado encriptación SHA-256 para la creación del hash.

El hash del bloque se constituye con todos los elementos del mismo: Hash del bloque previo en la cadena, la información del bloque serializada y el timestamp para sellar el instante de tiempo.

Pues con todos estos elementos vamos a construir una cadena con 3 bloques.

Si ejecutamos, vemos que en la consola aparece la información de los bloques de la cadena.

Podemos observar como el bloque genesis tiene un hash previo 0 y a partir de ahí el resto de bloques se relaciona entre sí mediante el hash del bloque previo. Si volvemos a ejecutar veremos que no podemos reproducir la cadena tal y como debe ser ya que lo único que está permitido es añadir nuevos bloques.

Por último vamos a vincular un nuevo bloque a la cadena.