A estas alturas y gracias al auge de criptodivisas como Bitcoin, la mayoría de los que nos dedicamos al mundo de la tecnología tenemos más o menos claro de que va esto de las redes Blockchain, si no en profundidad por lo menos a nivel conceptual. Si no es así, antes de seguir leyendo os recomiendo que le echéis un vistazo a este artículo publicado por el equipo de Xataka, con los conceptos más importantes.
¿Qué tal?, es perfecto para establecer las bases y los fundamentos de esto llamado Blockchain. Ahora iremos un poco más allá y os explicaremos que estamos haciendo en nuestro banco de pruebas con esta tecnología, que en un principio parece tener aplicaciones infinitas y nos promete una vida sin intermediarios.
Para meternos en harina, en esta primera entrega empezaremos comentando el «stack tecnológico” que hemos seleccionado para nuestros desarrollos, empezando por la base de todo el sistema: Ethereum.
La plataforma: Ethereum
Como muchos ya sabréis, Ethereum es, en esencia, una plataforma blockchain pública, global y descentralizada con criptomoneda propia, el Ether. Hasta aquí ninguna diferencia con la archiconocida red Bitcoin.
Pero las hay y son fundamentales, la más importante es el propósito y la capacidad de cada una de ellas: Mientras que Bitcoin ofrece una aplicación particular y única de la tecnología blockchain (un sistema de dinero electrónico peer to peer que permite los pagos en línea mediante el uso de su moneda, el Bitcoin), Ethereum es una plataforma abierta que permite ejecutar aplicaciones descentralizadas de todo tipo aprovechando la propia infraestructura de nodos de la red.
¿Aplicaciones?, así es: la innovación principal de Ethereum respecto a Bitcoin es que permite ejecutar casi cualquier aplicación (DApp). Gracias a la Ethereum Virtual Machine (EVM) y los llamados Smart Contracts, en lugar de tener que construir una cadena de bloques completamente original y específica para cada nueva función, Ethereum permite el desarrollo de cualquier aplicación sobre la misma plataforma.
Ya tenemos dos grandes ventajas de la red Ethereum respecto a Bitcoin: Los Smart Contracts y la capacidad de ejecutar aplicaciones (DApps).
Ethereum Virtual Machine
Antes de nada, tengamos claro lo que es una máquina virtual: básicamente es un software diseñado para crear una capa de abstracción que emula un ordenador completo: procesador, RAM, discos duros, tarjetas de red, etc. con la capacidad de ejecutar todo tipo de software. O sea, tenemos un ordenador completo y aislado dentro de otro.
Las máquinas virtuales aíslan todas sus funciones en un contenedor y solo interactuaremos con ellas mediante una interfaz de control. Esto nos ofrece varias ventajas: Por un lado, todo lo que sea ejecutado dentro de esta máquina virtual estará aislado del resto del sistema (el hardware real), que permanece protegido. Por otro, permite una gran portabilidad. Nos podemos llevar esta máquina virtual a otros sistemas y configuraciones hardware.
EVM es una capa importante dentro de Ethereum ya que es el entorno seguro en el que se ejecutan los poderosos smart contracts. Pero nos tendréis que disculpar, el tema resulta árido, aburrido y además es irrelevante para el objetivo de este artículo, por lo cual lo aparcaremos un buen rato: EVM existe dentro de Ethereum y permite la ejecución segura de los Smart contracts. De momento eso es todo.
Evidentemente, Bitcoin también tiene su propia máquina virtual, la diferencia está en que EVM lleva mucho más allá sus capacidades, y nos permite realizar operaciones que en Bitcoin resultan muy complejas o directamente imposibles. Todo ello gracias a los Smart Contracts.
Smart Contracts
La primera gran baza de Ethereum. son aplicaciones capaces de ejecutar acuerdos establecidos previamente y rigen el comportamiento entre dos o más partes cuando se da una condición programada.
Es decir, son contratos que funcionan exactamente igual que lo tradicionales, con la diferencia de que no necesitan intervención humana para ejecutarse: se activan y se hacen cumplir a sí mismos de manera automática, autónoma y totalmente segura, ya que existen en un entorno no controlado por ninguna de las partes implicadas: la red blockchain.
Esa es su gran virtud: no requiere de un intermediario (p.ej. un notario o un supervisor) ya que el contrato en sí es el intermediario de confianza.
Algún ejemplo sencillo:
Imaginemos la industria discográfica o, mejor dicho, musical: Se podría grabar la propiedad intelectual de la música en una cadena de bloques. Así, podemos escribir un smart contract que supervise la reproducción de determinados temas musicales y asigne los beneficios por derecho de autor al propietario cuando una canción se utiliza con fines comerciales. ¿SGAE?
Otro ejemplo casi obvio lo tenemos en las Elecciones. Un sistema no muy complejo podría permitir el voto por internet mediante una web que nos identifique de una forma segura (DNI electrónico, clave pública de la Seguridad Social, etc.). Una vez autentificados realizamos nuestro voto que se escribe en la blockchain mediante un smart contract, lo que nos asegura que nuestro voto permanecerá inalterable y secreto y asegura al resto de usuarios que has votado y solo lo has hecho una vez.
Estos dos sencillos ejemplos son funcionalmente muy diferentes, pero tienen un factor común básico y que es la principal fortaleza de Blockchain… ¡Los intermediarios desaparecen! Sería posible, por ejemplo, un nuevo Airbnb sin mediación ni comisiones (o sea, sin Airbnb). O un nuevo Uber o JustEat o Glovo, o…
Actuar directamente entre la gente interesada (relaciones p2p, peer-to-peer, entre iguales), mediante un contrato inteligente, nos ahorra comisiones de intermediarios, tiempo de gestión y la seguridad de que nuestros datos no son guardados o alterados por terceros.
Pero…
- No existe legislación centrada en blockchain y sus tecnologías (como los smart contracts, la minería o las criptomonedas), lo que complica su supervisión
- Los smart contracts suelen ser complicados de implementar porque aún son un concepto relativamente nuevo, que maneja lenguajes muy específicos en continua evolución
- Desconocemos sus posibles implicaciones a largo plazo (versiones, forks, etc.)
- Son monolitos, prácticamente inmutables y esa es su fortaleza, pero también su debilidad: Cada vez que queramos incorporar un cambio o una mejora en nuestro smart contract, deberemos hacer uno nuevo y anular el anterior. Destruir el monolito para colocar el nuevo
DApp
Un poco más arriba os contábamos que la otra gran ventaja de Ethereum sobre Bitcoin es que Ethereum permite implementar aplicaciones descentralizadas (DApps) de todo tipo: desde servicios bancarios como préstamos o depósitos hasta registros de títulos de propiedad, sistemas de votación, o cumplimiento de normativas públicas. Veamos cómo.
Una Decentralized Application o DApp es una de aplicación cuyo funcionamiento no depende de puntos de control en la red o de un servidor central, sino que funciona en base a una red peer-to-peer o descentralizada en la que sus usuarios tienen el control total.
¿A quién no le suena BitTorrent, e-Mule o incluso (para los más veteranos) el mítico Napster? Todos estos clásicos son aplicaciones que ya permitían hace más de veinte años compartir archivos mediante redes peer-to-per con alta resistencia a la censura o el seguimiento.
Pero les faltaba algo: Si bien se ejecutan en redes descentralizadas, no lo hacían (ni lo hacen) en un entorno blockchain. Eso no cambió hasta la llegada del Bitcoin, la primera DApp que usó blockchain, y su éxito ha sido más que demostrado. Pero la cosa no avanzó de verdad hasta la llegada de Ethereum y su capacidad de crear smart contracts mediante su lenguaje Solidity. A partir de ese momento ya podíamos ejecutar aplicaciones aprovechando todas las ventajas de una red blockchain.
Veamos como
Tanto una APP como una DApp pueden (y deben) separarse en las dos capas básicas de siempre: Front-end, Back-end, aunque, a diferencia de una APP, el concepto DApp incluye aplicaciones instalables y webs.
El front-end es el encargado de gestionar la interacción con el usuario y no existen diferencias entre un desarrollo App o DApp. En ambos casos podemos utilizar los lenguajes, frameworks y librerías que prefiramos: JavaScript, CSS, HTML5, React, Angular, etc.
Hasta ahora no existen diferencias. ¿Qué pasa con el back-end? Pues como sabemos esta capa integra la lógica de negocio de la aplicación. En una App, esta lógica está centralizada, pero en una DApp, el back-end debe estar obligatoriamente relacionado a un smart contract único.
De hecho, en muchos casos, una parte importante de la lógica de negocio de la DApp reside en el propio smart contract garantizando su fiabilidad
Los usuarios de la red pueden estar seguros de que la DApp no hará nada distinto a lo que se especifica en su smart contract.
Ya tenemos una diferencia clara: Una DApp debe tener obligatoriamente un back-end pensado para redes blockchain. Pero toda aplicación maneja datos que deben ser guardados y protegidos de destrucción o copiado…
¿Qué pasa con ellos?
En una App tradicional el almacenamiento de datos está centralizado: Los datos son almacenados en la máquina del usuario o en servidores controlados por terceros.
En una DApp, cada usuario almacena un historial completo de las acciones que se realizan en la red. De manera que si el portátil o smartphone de un usuario se daña, basta con instalar la DApp en un nuevo dispositivo para recuperar toda su información. Además estos datos resultan muy difícil de modificar dado que deberían modificarse todas las copias de la red
Cómo funciona
Conceptualmente cada usuario de la DApp es un nodo dentro de la red y vela por el correcto funcionamiento de las operaciones que se realizan en dicha red.
El canal de comunicaciones que usa la DApp es la blockchain, donde quedará registrada cada operación que pasa por su smart contract. La aceptación o no de las operaciones realizadas por los usuarios de la DApp se encuentra escrita en la programación de este smart contract. Así se garantiza que todos los participantes actúen en el marco indicado.
Por otro lado hay que tener en cuenta que cada operación se registra y almacena en todos y cada uno de los nodos (usuarios) de la red, con lo que tenemos un montón creciente de datos que debe almacenarse de forma redundante en miles de discos duros, provocando un consumo de recursos (sobre todo eléctricos) muy poco sostenibles en el tiempo.
En resumidas cuentas, al ejecutarse sobre una blockchain, las DApps resultan un gran avance, ya que gozan de la versatilidad de una web o una APP y de la seguridad y privacidad de una red blockchain.
Pero…
- La evolución de la DApp está supeditado a la evolución y mejora de las estructuras blockchain. Una DApp puede tener un plan de evolución y mejoras muy activo y estar en basado en frameworks en constante evolución, pero si el desarrollo de la blockchain y herramientas como el Smart contract van más lentos o tiene otros objetivos, poco podremos hacer
- Por ese motivo puede haber funcionalidades concretas que resulten imposibles o muy difíciles de implementar. Algunas DApps son muy sencillas en sus requerimientos funcionales y otras no lo son tanto. Esto puede resultar un problema importante según el road-map evolutivo que tenga la red blockchain
- Muchas veces resulta difícil depurar el código debido a la complejidad de la DApp, ya que la programación de los smart contracts es especialmente crítica y se hace en otro lenguaje específico (Solidity en nuestro caso)
- Por último, una posible vulnerabilidad en el smart Contract afectará a todos los usuarios de la DApp al mismo tiempo