Esta aplicación descentralizada (dApp) está basada en Ethereum, IPFS y React. Consiste en que los usuarios permitan la venta de sus datos médicos, además de que estos mismos compren lotes de datos de otros usuarios. La moneda utilizada es el Ether.
Este proyecto se ha realizado como Trabajo Fin de Grado para el Grado en Ingeniería Informática de la Universidad de Cádiz.
La aplicación simula un entorno clínico, donde una entidad (custodian) tiene registrada información clínica de sus pacientes (owner). Los owner deciden, de todos sus datos clínicos, cuáles se pueden poner a la venta en la aplicación y cuáles no. Entonces, la entidad custodian puede crear lotes de datos (ofertas) con los datos validados por los owner; estas ofertas serán vendidas en la aplicación.
Los usuarios (customer) pueden comprar esas ofertas, gastándose Ether, que se repartirán entre todos los usuarios que tuvieran sus datos en las ofertas compradas. Al comprar una oferta, los customer tendrán acceso a todos los registros contenidos en la misma.
Todo esto, guardando la información en IPFS y las ofertas en una cadena de bloques Ethereum.
Al crear una oferta la entidad custodian, esta se sube a IPFS, resultando un hash criptográfico. Ese hash, junto a la firma de la entidad custodian, conforman un claim file, el cual también se sube a IPFS. El hash de este fichero es lo que finalmente se sube a la cadena de bloques, junto con unos metadatos que dan información sobre los registros que aglutina la oferta.
El uso de IPFS permite abaratar considerablemente los costes de almacenamiento de información en la cadena de bloques Ethereum. Se utilizan 20.000 de gas para 256 bit/8 bytes (una palabra). Cada gas cuesta 4 gwei. Realizando cálculos:
-
20.000 gas por una transacción de 8 bytes x 4 gwei/gas = 80.000 gwei para 8 bytes.
-
80.000 gwei para 8 bytes x 1000bytes/8 = 10.000.000 gwei/kB = .01 Ether.
-
.01 Ether/kB x 1000kB = 10 Ether para almacenar 1Mb, costando unos 164€ cada Ether, costaría 1.640€.
Con estos cálculos, se puede observar como almacenar 1GB, en una cadena de bloques de Ethereum, costaría 1.640.000€.
Por tanto, subiendo la información a IPFS y almacenando en la cadena de bloques únicamente el hash criptográfico, el espacio ahorrado es indispensable.
Para poder usar la aplicación, será necesario instalar todo lo que necesita la misma para funcionar, dentro de un sistema operativo basado en Linux:
-
Navegador web que permita el uso de almacenamiento local (local storage) y el uso de la extensión MetaMask. Se recomienda usar Google Chrome.
-
NodeJS (versión 8.9.4 o posterior) como gestor de paquetes.
-
Ganache. Este programa crea una cadena de bloques Ethereum de prueba cada vez que se abre, proporcionando hasta 10 cuentas distintas con 100 ETH de prueba cada una. Será la cadena de bloques sobre la que corra la aplicación.
-
MetaMask. Esta extensión de navegador web permite conectar una cadena de bloques con el navegador, permitiendo la interacción entre aplicación y cadena de bloques. Además, es necesario importar la red creada por Ganache (normalmente en la dirección http://127.0.0.1:7545), así como las cuentas Ethereum que se deseen usar en la aplicación.
-
Truffle. Para descargar el framework de desarrollo de contratos inteligentes, bastará con escribir en una consola de comandos:
npm install -g truffle
Una vez instalado todo lo anterior, hay que descargar la aplicación clonando o descargando este repositorio.
Es importante elegir una cuenta de las que ofrece MetaMask para que actúe como custodian en la aplicación. Para ello, basta con copiar la dirección de una de las cuentas y pegarla en los siguientes ficheros de la carpeta /client/src:
-
App.js, línea 31. Con mayúsculas y minúsculas igual que en Ganache.
-
Dentro de la carpeta indicada, en la carpeta /components, en el fichero BuyOffers.js, línea 35. Todas las letras en minúsculas.
Una vez hecho todo lo anterior, será necesario seguir los siguientes pasos:
-
Abrir Ganache.
-
Abrir una terminal en la carpeta raíz del proyecto.
-
Desplegar el contrato inteligente mediante los siguientes comandos:
truffle compile
truffle migrate
-
Copiar el fichero IPFSInbox.json generado en la carpeta /build/contracts y pegarlo en la carpeta /client/src.
-
Abrir la carpeta /client en una terminal.
-
Instalar dependencias necesarias con el comando:
sudo npm install
- Iniciar la aplicación con el comando:
sudo npm start
Si MetaMask ya está sincronizado con Ganache, y se han importado las cuentas, será cuestión de acceder a la dirección localhost:3000 para acceder a la aplicación.