Source: https://masterblockchain.net/dapps-master-blockchain-online/
Timestamp: 2020-08-09 11:08:47+00:00

Document:
DApps - Master Ingeniería Blockchain
Jul 1, 2020 | Ethereum, Sin categoría | 0 Comentarios
Las DApps (Aplicaciones Descentralizadas) son aplicaciones de código abierto, escalables, flexibles, transparentes, resilientes y de naturaleza distribuida, cuyo principal objetivo es descentralizar los componentes que la forman, entre los cuales están la lógica de control de negocio, el almacenamiento, la mensajería, la resolución de nombres, y las funciones de pago, entre otras.
En el presente artículo, exponemos los entornos, herramientas y plataformas que permiten construir DApps con el apoyo de la tecnología Blockchain.
Una DApp es un aplicación, que independientemente de su desempeño, utiliza tecnologías que la permiten descentralizar los componentes que la forman. Entre estos componentes se encuentran el Frontend, el Backend, el sistema de resolución de nombres, el almacenamiento de datos, el sistema de comunicación de mensajes, y las funciones de pago.
Es frecuente asociar el concepto de DApp con aplicaciones que utilizan Smart Contracts, pero es erróneo, ya que pueden existir aplicaciones centralizadas que usen Smart Contracts para gestionar parte de su lógica de negocio, pero que el resto de aspectos los implementen de forma centralizada.
En palabras de Vitalik Buterin, las aplicaciones descentralizadas se dividen en dos clases, probablemente con un área gris sustancial entre ambas. La primera clase se refiere a aplicaciones descentralizadas totalmente anónimas en las que no importa quiénes son los nodos. Cada participante es esencialmente anónimo y el sistema está formado por una serie de interacciones atómicas instantáneas. BitTorrent y BitMessage son ejemplos de esta clase. La segunda clase se refiere a aplicaciones descentralizadas basadas en la reputación, donde el sistema (o al menos los nodos en el sistema) realiza un seguimiento de los nodos, y los nodos mantienen el estado dentro de la aplicación con un mecanismo que se mantiene puramente para garantizar la confianza. El estado no debe ser transferible o tener un valor monetario de facto. Maidsafe es un ejemplo de esta clase. Por supuesto, la pureza es imposible e incluso un sistema similar a BitTorrent necesita que sus pares mantengan estadísticas similares a las de otros pares para fines anti DDoS, sin embargo, el papel que desempeñan estas estadísticas es puramente de fondo y de alcance muy limitado.
En la actualidad existen multitud de DApps correspondientes a diferentes sectores como el de las finanzas, juegos, salud, seguros, almacenamiento, mercados, identidad, energía, seguridad, propiedad, etc. Dichas DApps pueden estar implementadas no sólo en Ethereum, sino en otras plataformas como EOS, NEO, ICON, y TRON, entre otras. Para ver un listado de las DApps más importantes que existen y de sus características principales, se puede consultar el siguiente enlace.
Para profundizar más respecto al concepto de DApp y su desarrollo mediante la tecnología Blockchain, recomendamos consultar el proyecto «La teoría general de aplicaciones descentralizadas, DApps» del autor David Johnston, entre otros, que se encuentra en el siguiente enlace. En dicho proyecto se puede ahondar en cuestiones como: clasificación de las DApps, modelo legal y funcionamiento, entre otras.
En los próximos apartados vamos a ver con qué tecnologías se pueden descentralizar cada uno de estos aspectos que conforman las aplicaciones, centrándonos principalmente en el ecosistema Ethereum (Figura 1).
Figura 1. Componentes de una DApp desplegada en Ethereum. Fuente
Para implementar el Frontend (Interfaz de Cliente) de una DApp, como norma general, se pueden utilizar las herramientas, entornos de desarrollo, y lenguajes de programación tradicionales como son: JavaScript, PHP, HTML, Java, CSS, etc. Estos lenguajes, por si sólos, no son capaces de conectar con el Backend de las DApps. Para ello, necesitan de librerías o aplicaciones especiales que les sirvan de puente entre le interfaz de usuario y la lógica de control de negocio de la aplicación. En el caso de que se decida utilizar Ethereum para implementar el Backend, se dispone de las librerías web3.js, web3j, web3.py, web3.php, web3j-scala, hs-web3, ethereum.rb, que realizan esta labor de puente, y pueden ser usadas por los lenguajes Javascript, Java, Python, PHP, Scala, Haskell, Ruby respectivamente.
Además, Ethereum dispone de aplicaciones como Metamask, que también realizan la labor de puente entre el Frontend y el Backend. Metamask es una wallet que se instala mediante un add-on en los navegadores web Chrome, Firefox, y Brave (teniendo también una versión para iOS y Android), y que permite conectarse a una gran variedad de nodos de Ethereum y de blockchains de testing. Permite ejecutar DApps de Ethereum directamente sin tener que ejecutar un nodo completo. Incluye un almacén seguro de identidad, y proporciona una interfaz de usuario para administrar las identidades de diferentes sitios y firmar transacciones dentro de la blockchain. La misión de MetaMask es hacer que Ethereum sea lo más fácil de utilizar para el mayor número de personas posible. Se puede decir que Metamask es un puente que permite visitar la red distribuida del mañana con su navegador de hoy.
En una DApp, los Smart Contracts se encargan de implementar el Backend, es decir, la lógica de negocio, asi como el estado de la aplicación. Debido al alto coste que tiene la implementación de Smart Contracts, y a otras características intrinsecas a los mismos, como son la inmutabilidad, es muy importante realizar un estudio para saber qué partes de la aplicación necesitan de una plataforma descentraliza y de confianza basada en la tecnología Blockchain, y cuales no. Como consecuencia de lo anterior, es común desarrollar aplicaciones en las que sólo el núcleo del modelo de negocio se gestiona mediante Smart Contracts, optando por tener computación y almacenamiento de información offchain.
Ethereum permite crear una arquitectura de Backend mediante la implementación de una red de Smart Contracts que interactuan entre ellos compartiendo su estado y valor. Para su definición existen diferentes herramientas, y entornos de programación como Remix, Truffle Suite, y OpenZeppelin SDK, entre otros.
Al igual que las CApps (Aplicaciones Centralizadas) utilizan sistemas de resolución de nombres tradicionales centralizados como es el DNS (Domain Name System), las DApps utilizan sistemas de resolución de nombres descentralizados, distribuidos, abiertos, y extensibles, como es, por ejemplo, el ENS (Ethereum Name Service), el cual es implementado en el ecosistema Ethereum.
Del mismo modo que el DNS (Domain Name Server), el ENS tiene como objetivo asignar nombres legibles para los humanos, como “uah.eth”, a identificadores legibles por las máquinas, pero con una arquitectura diferente debido a las características de la tecnología Blockchain.
Para saber más sobre el funcionamiento del ENS se puede consultar el artículo que publicamos en el blog del máster tratando esta cuestión, y que se encuentra en el siguiente enlace.
El sistema IPFS, que veremos en el siguiente apartado, también trabaja con un sistema de resolución de nombres descentralizado llamado IPNS, el cual asigna un identificador legible por los humanos al hash correspondiente del recurso. El identificador IPNS puede publicarse por la red ya que siempre apuntará a la última versión del recurso. Para profundizar más sobre IPNS se puede consultar el siguiente enlace.
Debido al alto coste que tiene almacenar datos e información en las cadenas de bloques, es común que a la hora de desarrollar una DApp, se opte por utilizar alternativas decentralizadas fuera de la cadena (off-chain). Dos de las opciones más utilizadas es el sistema IPFS, y el sistema Swarm. Pasemos ahora a describir cada uno de ellos.
El sistema IPFS (Inter-Planetary File System) es un protocolo peer-to-peer distribuido que sirve para almacenar y acceder a archivos, datos, aplicaciones, emails, webs, etc. Pretende sustiuir a HTTP y hacer una web distribuida.
IPFS tiene las siguientes característias que lo hacen idea para desarrollar DApps:
Cada archivo recibe una huella digital única llamada hash criptográfico, de esta manera se eliminan las duplicaciones dentro de la red.
Cada nodo de la red IPFS almacena sólo el contenido en el que está interesado, y cierta información de indexación que permite determinar quién está almacenando qué.
Cada archivo puede ser encontrado por nombres legibles por lo humanos usando el sistema resolución de nombres descentralizado IPNS.
Evita que un sitio web se desconecte, ya que los contenidos se pueden obtener desde diferentes peers.
Hace difícil que se pueda censurar el contenido por parte de terceros debido a que los ficheros pueden ser almacenados en diferentes lugares (peers) del mundo.
Puede acelerar el acceso a los recursos cuando están lejos geográficamente o desconectados.
Permite distribuir grandes volúmenes de datos con alta eficiencia.
Conserva cada versión de los archivos.
El sistema Swarm se define como una plataforma de almacenamiento distribuido, además de un servicio de distribución de contenido.
Swarm forma parte de las suite de herramientas Go-Ethereum desarrollada por la Ethereum Foundation para la blockchain de Ethereum. Se trata de un servicio de capa base nativo de la pila de Ethereum web3.
Swarm tiene las siguientes características principales:
Proporciona un almacenamiento descentralizado y redundante del registro público de Ethereum, que permite almacenar y distribuir código y datos.
Permirte la integración con la capa de red devp2p de Ethereum, asi como con el servicio de resolución de nombres ENS (Erthereum Name Service).
Es resistente a ataques DDOS, tiempo de inactividad cero, tolerante a fallas, y resistente a la censura.
Es autosuficiente debido a un sistema de incentivos incorporado que permite el intercambio de recursos para el pago.
Otro de los aspectos que deben implementar muchas de las aplicaciones que se desarrollan es un sistema de comunicación de mensajes que permita intercambiar mensajes entre procesos, aplicaciones, y usuarios de las mismas.
En el caso de las DApps deben usar sistemas descentralizados de gestión de mensajes basados principalmente en redes P2P.
Uno de estos sistemas es Whisper, el cual forma parte de las suite de herramientas Go-Ethereum desarrollada por la Ethereum Foundation para la blockchain de Ethereum.
Entre las características que tiene Whisper destacan las siguientes:
Es un sistema de mensajería basado en la identidad.
Proporciona una API de bajo nivel sin estar basada o influenciada por los atributos y características de hardware.
La comunicación punto a punto entre los nodos de la red Whisper utiliza el protocolo subyacente WireVp2p.
Proporciona una transmisión fácil y eficiente, y también comunicaciones asincrónicas de bajo nivel.
Proporciona privacidad y seguridad, permitiendo a los usuarios configurar el nivel de privacidad.
Para evitar un ataque DDoS, se utiliza el algoritmo de prueba de trabajo (PoW). Los mensajes se procesarán solo si se supera una PoW, de lo contrario, se eliminarán.
Además de Whisper, existen otras soluciones de comunicación de mensajes descentralizadas como son Bitmessage, o Telehash, en los que no vamos a entrar en profundidad, pero cuyos enlaces dejaremos en el apartado de referencias por si el lector quiere ahondar en ellas.
Ventajas de las DApps respecto a las CApps
El desarrollo de DApps, utilizando la blockchain de Ethereum, implica una serie de ventajas respecto a las CApps que pasamos a describir a continuación:
Resistencia a la censura: una vez que se han desplegado los Smart Contracts en Ethereum, el código que ellos contienen es inmutable, por lo que no puede ser censurado por terceras partes interesadas.
Trasparencia: el código de las DApps desarrolladas en Ethereum es abierto a cualquiera que lo quiera revisar. Además, las interacciones que se producen por parte de los usuarios son registradas para siempre, y visibles por cualquiera.
Resiliencia: la DApps implementadas en Ethereum estarán disponibles hasta que Ethereum esté disponible al estar la lógica del negocio controlada por Smart Contracts desplegados en la blockchain.
Las DApps son aplicaciones descentralizadas que carecen de un punto central de autoridad, carecen de un punto central de fallo, y expresan la visión de la web3: una internet descentralizada, donde los usuarios tienen el control de sus propios datos, identidad y destino.
Aunque en la actualidad existen muchas Apps que tienen cierto grado de descentralización, queda aún camino por recorrer para que estas aplicaciones se conviertan en auténticas DApps, en las que todos sus procesos, módulos, y funciones estén descentralizados. A medida que vaya madurando la tecnología, veremos cada vez más DApps que logran alcanzar un mayor grado de resiliencia, transparencia, y resistencia a la censura.
Los Dapps tienen el potencial de convertirse en autosuficientes porque empoderan a sus partes interesadas para invertir en el desarrollo las mismas. Como consecuencia, es posible que las DApps lleguen a competir en un futuro no muy lejano con las empresas y corporaciones con modelos centralizados que en la actualidad son punteras en el desarrollo de aplicaciones en el espacio tecnológico.
Mastering Ethereum, Building Smart Contracts and DApps. Andreas M. Antonopoulos, Gavin Wood.
State Of The Dapps: https://www.stateofthedapps.com
La teoría general de las aplicaciones descentralizadas, DApps: https://github.com/DavidJohnstonCEO/DecentralizedApplications
DAO, DAC, DA, y más: una guía de terminología incompleta: https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/
IPNS: https://docs.ipfs.io/concepts/ipns/
Swarm: https://swarm.ethereum.org
ENS Medium: https://medium.com/the-ethereum-name-service
Whisper: https://eth.wiki/concepts/whisper/whisper
Bitmessage: https://wiki.bitmessage.org/Main_Page
Telehash: https://github.com/telehash/telehash.github.io

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución