Almacenamiento de datos en la blockchain

Hoy traigo un artículo “masticado” (en donde tratamos desde un punto de vista un poquito más técnico) una de las grandes dudas que tenemos algunos cuando hablamos de blockchain, el almacenamiento de información.

Almacenar datos en la blockchain (o cadena de bloques) no es tan simple como parece. Hay muchos problemas que pueden hacer esta tarea bastante difícil.
A lo largo del artículo vamos a echar un vistazo al problema desde el punto de vista del desarrollo. O sea, directo al grano, sin presentación de negocios bonito o palabras de moda.
Veamos como podríamos construir una aplicación sobre la blockchain.
Si, vamos a hablar técnicamente pero no vamos a hablar de código aquí.
En su lugar, discutiremos la arquitectura y las decisiones de diseño que tendríamos que tomar antes de escribir la primera línea de código.
Como veremos, hay muchas soluciones posibles para el problema de almacenar datos en la cadena de bloques.
Ninguno de ellos es mejor o muy superior. Ninguno es absolutamente inútil.
Todo depende del caso de uso que tengamos que resolver.
Después de leer esto, se tendrá una visión general de algunos los enfoques posibles.
Entonces dependerá de cada elegir la solución que mejor aplique al problema al resolver.

¿Por qué alguien querría almacenar datos en la Blockchain?

La primera pregunta que hay que hacerse es: ¿Por qué se quiere usar una cadena de bloques?
Si no se tiene una respuesta clara y rápida en el momento, entonces seguramente no se necesita una cadena de bloques.
¡No hay que dejar que la moda nos lleve a confusiones!
¿Por qué hay que ser tan tajante con esto?
Bueno, voy ponerlo de esta manera. La tecnología blockchain solo sirve para 2 o 3 cosas.
Es lenta, compleja, cara y difícil de trabajar.
Elegir blockchain porque es moderno y está de moda, es como llevar un tanque a una carrera de autos.
Puede parecer impresionante y estarás dentro de algo a prueba de balas, pero al final de todo, perderás la carrera a lo grande.
Siendo claros y yendo al punto, hay que tener en mente que siempre se debe elegir la herramienta adecuada para el trabajo.
Fin del pataleo en contra de la aplicación de blockchain. 😉

Entonces, Donde Blockchain realmente brilla?

Solo debe usar blockchain si uno o más puntos se aplican a su caso de uso:

Alterar evidencia
Cuando se desea poder saber, cuando un conjunto de datos ha cambiado. Cuando se necesita una prueba de que o cuando, fue o no cambiado un conjunto de datos.
Descentralización
Cuando no se quiere tener una autoridad central. En su lugar, se desea otorgar el control sobre los datos a la red, porque no se quiere o no se puede confiar en las partes involucradas.
Transparencia
Cuando se quiere que los datos sean visibles para que todos establezcan su confianza.

Uso de transacciones para almacenar datos en la cadena de bloques

Las cadenas de bloques, especialmente las diseñadas para alojar una moneda, utilizan un modelo de transacción.
Por ejemplo, “Alice envía dinero a Bob” es una transacción. Esta transacción contiene la dirección del remitente (Alice), la dirección del destinatario (Bob) y la cantidad de dinero transferido.

Este enfoque es muy intuitivo cuando se trata de transacciones de dinero, pero ¿cómo se supone que puede almacenar datos con este concepto?
Para almacenar datos personalizados en la cadena de bloques, necesitamos empaquetar estos datos en transacciones para poder resguardarlos en la blockchain.

Usando el Protocolo

Algunas cadenas de bloques ofrecen la posibilidad de agregar datos a una transacción dentro de sus protocolos. En este caso, simplemente podemos adjuntar los datos a una transacción.
Si ese no es el caso, necesitamos ser un poco más creativos.

Ser creativo

Algunas blockchains no tienen esa característica.
En este caso, aún podemos almacenar una pequeña cantidad de datos en la cadena, utilizando direcciones.
Para guardar algunos datos, simplemente lo codificamos (si es necesario) y lo usamos como una dirección para enviar una transacción.
Al hacerlo, los datos se almacenan en la cadena de bloques. En lugar de utilizar algún campo de carga útil dentro de la transacción, los datos se codifican en la dirección de destino.

La desventaja de esta técnica es que la cantidad de datos no puede ser mayor que el tamaño de una dirección en la blockchain (que es muy pequeño).
Además, no solo tenemos que pagar la tarifa por la transacción realizada, sino que también tenemos que quemar un poco de dinero.
Es decir, porque no somos propietarios de la dirección a la que le enviamos la transacción, por lo que el dinero que transferimos se pierde.

¿Por qué es un problema almacenar datos en la blockchain?

El mayor problema de almacenar datos en una cadena de bloques es la cantidad de datos que se pueden almacenar. Esto se debe a que la cantidad está limitada por el protocolo o debido a las enormes tarifas de transacción que tendría que pagar.

El costo de almacenamiento de datos

Entonces, ¿por qué almacenar datos en la cadena es tan caro?
Debido a que la cantidad de datos que se guarda en la cadena debe ser almacenada por cada nodo participante en la red. Todos los nodos, para participar en la red, deben descargar la cadena de bloques completa con lo cual también están descargando nuestros datos almacenados en la blockchain.
Es por eso que incluso almacenar kilobytes puede costar una fortuna.
Cuando almacenamos datos en la cadena de bloques, la mayoría de las veces pagamos un precio base por la transacción más un monto por byte que queremos almacenar.
Si hay contratos inteligentes, también pagamos por el tiempo de ejecución del contrato inteligente.

¿Cuántos datos se pueden almacenar en un Blockchain?

Cuanto menos, la cantidad de datos que podemos almacenar es bastante limitada.
Para dar una idea, la mayoría de las blockchains permiten algo en el rango de kilobytes o menos. A los fines prácticos, almacenar un número con el formato AB-CDEFGHIJ-K similar al que se usa en la identificación tributaria de Argentina, consume al menos 56 bytes. Si tomamos como referencia una de las blockchain más modernas, NEM, las transacciones pueden contener mensajes de hasta 1024 bytes syn encriptar o de hasta 960 bytes si el mismo se encripta. O sea si no se encripta el mensaje se podrían almacenar aproximadamente 18 palabras de 15 caracteres.
En teoría, podríamos sortear esa limitación dividiendo nuestros datos en muchos fragmentos pequeños. Eso nos permitiría almacenar archivos o datos más grandes, pero también aumentaría significativamente nuestros costos.
Esto se debe a que tendríamos que pagar el precio base (grande) de la transacción varias veces.

Así que, después de todo, la cantidad de datos que podemos almacenar es bastante limitada.

Almacenar información sensible en la cadena de bloques

Otro problema al almacenar datos en la cadena de bloques surge cuando consideramos guardar datos personales o confidenciales.
En realidad, hay dos problemas aquí:

  1. Si elegimos una cadena de bloques pública como ethereum, los datos que almacenamos estarán disponibles para todos. Esto se debe a que, en una red blockchain, (casi) todos los participantes tienen una copia de toda la cadena. Pero incluso si se decide construir una blockchain privada, cada participante recibirá una copia. La diferencia aquí es que tenemos control sobre quién se une a la red y obtiene una copia.
  2. La mayoría de la información personal o confidencial debe eliminarse en algún momento. Especialmente teniendo en cuenta el nuevo GDPR. Desafortunadamente, eliminar datos de la cadena no es posible por diseño.

Una solución a este problema podría ser el cifrado de los datos. La desventaja de este enfoque es que ahora tendríamos que lidiar con las claves de cifrado (que deben almacenarse en otro lugar) y su distribución.
Otra solución podría ser almacenar hashes de los datos en lugar de los datos en sí.

¿A dónde fueron mis datos? Consultando datos desde el Blockchain

Bien. Supongamos que a pesar de todos los problemas descritos anteriormente, de alguna manera logramos almacenar nuestros datos en la cadena de bloques…
¿Cómo haríamos para obtener o consultar los mismos, en caso de que los necesitemos?
Una cadena de bloques no es un servidor SQL (como lo es un servidor de Oracle, SQL Server, DB2, MySQL, Mongo, etc) donde podríamos consultar nuestros datos utilizando un lenguaje común y muy conocido.
De hecho, la mayoría de las cadenas de bloques solo permiten la descarga de transacciones por su id (hash).
Entonces, ¿cómo podríamos resolver este problemas?

Cómo almacenar grandes conjuntos de datos en el Blockchain

Entonces, si almacenar datos en la cadena de bloques viene con tantos inconvenientes, ¿tiene sentido almacenar algo en la cadena de bloques?
¡Sí, claro!
Resulta que hay muchas formas de almacenar datos en una cadena de bloques. El almacenamiento de los datos en bruto es uno de ellos.
¿Pero cuáles son las otras opciones?

Almacenando Hashes en el Blockchain

Una forma de obtener los beneficios de una cadena de bloques sin pagar una fortuna por las transacciones es almacenar el hash de los datos en la cadena de bloques.

¿Qué es un hash?

Un hash es una cadena de caracteres generada, que se calcula utilizando nuestros datos para ingresar. Con la misma entrada, el hash de salida siempre será el mismo. Otra entrada da como resultado otro hash.

De esa manera podemos saber si nuestros datos se modificaron con solo mirar el hash.

Utilizando mecanismos de almacenamiento tradicionales.

Lo único que almacenamos en la cadena de bloques es el hash de nuestros datos. En comparación con nuestros datos, el hash es muy pequeño, por lo que el costo de una transacción sería relativamente bajo.
Los datos en bruto se pueden almacenar de la manera que queramos. Por ejemplo, podríamos usar una base de datos relacional o solo un sistema de archivos.
Todo lo que tenemos que hacer es asegurarnos de que asignemos el id (hash) de la transacción de la cadena de bloques a nuestros datos sin procesar. En una base de datos relacional agregaríamos otra columna para almacenar la identificación de la transacción.

De esa manera, podemos utilizar las ventajas de los mecanismos de almacenamiento tradicionales (como las consultas) y al mismo tiempo obtener la evidencia de manipulación indebida desde la cadena de bloques.
Si en cualquier momento, hay dudas sobre los datos, podemos hacer un hash de los datos en bruto y compararlos con el hash en la transacción asignada en la cadena de bloques.
Ahora bien, esto tiene un costo; dependiendo de su mecanismo de almacenamiento, se pierden beneficios como la descentralización y la transparencia.

Almacenamiento de un subconjunto de los datos en la cadena de bloques

Podemos recuperar esos beneficios en cierta medida, almacenando el hash de los datos y partes de los datos en la cadena de bloques.

Dependiendo de cuales datos resguardemos en la blockchain, recuperaremos algo de transparencia; puesto que los datos ahora son de acceso público nuevamente.
Además, el subconjunto de los datos se almacena de manera descentralizada en lugar de almacenarse en una base de datos central.

Opciones para almacenar datos fuera de la cadena

Como ya vimos, probablemente sea una buena idea usar algún tipo de mecanismo fuera de cadena para almacenar grandes cantidades de datos.
Como siempre, hay muchas opciones para elegir. Algunas son totalmente de la vieja escuela y otras se desarrollaron en los últimos años para trabajar especialmente con blockchain.

Base de datos tradicional

Vamos a empezar con la elección obvia. Una base de datos tradicional como MySQL o incluso un poco más moderna, MongoDB.

Pros
  • Capacidades de consulta sólidas
  • Almacenamiento barato para grandes cantidades de datos
Contras
  • Un solo punto de falla
  • Controlado por una autoridad central
  • Falta transparencia

Base de datos distribuida

En una base de datos distribuida, los datos se replican en muchos nodos en muchas ubicaciones. Esto crea una redundancia en caso de fallo de una sola máquina. También puede reducir la latencia para aplicaciones a escala mundial.
Los ejemplos podrían ser MongoDB con conjuntos de réplicas habilitados o soluciones en la nube como Azure CosmosDB.

Pros
  • Capacidad de consulta suficientemente sólida
  • Almacenamiento barato para grandes cantidades de datos en comparación con blockchain
  • Redundancia de los datos
Contras
  • Controlado por una autoridad central
  • Falta transparencia

Sistema de archivos distribuido

Los sistemas de archivos distribuidos también almacenan archivos en muchas máquinas. Nuevamente, esto es crear redundancia en caso de una falla. La diferencia con las bases de datos distribuidas es que un sistema de archivos no tiene capacidades de consulta sólidas. En su lugar, solo se puede acceder a los archivos sabiendo el nombre / ruta del archivo.
Además, algunos sistemas de archivos distribuidos como IPFS (Sistema de archivos interplanetarios) se consideran un esfuerzo de la comunidad. Al igual que con blockchain, hay una red pública donde todos pueden almacenar sus archivos. La diferencia aquí es que no todos tienen que almacenar una copia de los datos. Una redundancia de X copias se considera suficiente.

Pros
  • Almacenamiento de grandes cantidades de datos en comparación con blockchain
  • Redundancia de los datos
  • Transparencia
  • Descentralizado
Contras
  • No hay capacidad de consulta.

 

Conclusión

En este post discutimos y/o planteamos una descripción general de los problemas y soluciones para almacenar datos (pocos o muchos) en la blockchain.
Espero que este escrito brinde una idea de la situación y las posibles direcciones. Ahora bien, al final de todo, dependerá de cada uno elegir la solución que mejor se adecue al caso de uso especial.

Fuente: malcoded.com

Tags:
2 Comentarios
  1. Jorge Luis
    Jorge Luis 12 meses

    Excelente willy! sobre todo el concepto de no usar la “blockchain” solo porque es moda.. ahí puede haber un grave error para las empresas y los puede hacer perder mucho dinero con soluciones que podrían ser muchísimo mas simple!

  2. Domingo Liotta
    Domingo Liotta 12 meses

    Me gustó como desarrollaste cada concepto Creo que la clave esta en pensar bien que problema se quiere resolver y explorar soluciones mas sencillas Sin embargo Blockchain trae muchas opciones para integrar bases de datos preexistentes y NEM en particular es “desarrollador friendly”.
    Vale la pena ver los proyectos a escala global para poder después adecuarlo a nuestra realidad

Contesta

Social BlockChain 2018©

Yes No

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account