Introducción

La creación de Ethereum y sus interesantes características, entre ellas la Ethereum Virtual Machine y su lenguaje de programación Solidity, le permitió a la comunidad cripto tener la capacidad de diseñar las DApps o aplicaciones descentralizadas.

Las DApps son un tipo de aplicación cuyo funcionamiento depende enteramente por una red descentralizada. En ellas no hay servidores centrales que almacenen información. Una característica única que es posible de lograr gracias a la tecnología blockchain y la creación de sistemas computacionales complejos y con capacidad de Turing Completo.

Pero ¿Para qué crear este tipo de aplicaciones? ¿Qué ventajas reales nos ofrecen frente a las aplicaciones centralizadas? Estas y otras preguntas las contestaremos a continuación.

Conoce a las DApps o aplicaciones descentralizadas

Las DApps o aplicaciones descentralizadas, son aplicaciones cuyo funcionamiento tiene se base en una red descentralizada de computadoras. La responsabilidad de mantener los datos de los usuarios y permitir las distintas interacciones es esta red, a la que podemos acceder por medio de una interfaz de usuarios que podemos instalar en nuestros smartphones o usar desde un sitio web. Del resto, los datos que generemos están en esta red de computadoras y siempre podremos acceder a ellos de forma segura gracias al uso de la tecnología blockchain y la criptografía asimétrica.

En tal sentido podemos ver a una DApp como una aplicación hospedada en una red de computadoras. Y podemos interactuar con ella tal cual lo hacemos en la actualidad con aplicaciones web como Facebook o Twitter. La diferencia es que estos dos servicios mencionados son del tipo centralizado, por lo que un error en sus servidores tiene una repercusión mundial. Por el contrario, las DApps pueden fallar en un punto o nodo, pero esto no afecta al resto de nodos y nuestra capacidad de seguir interactuando con la misma.

En tal sentido, las DApps muestran una capacidad de resiliencia única que otros servicios centralizados carecen. Y al mismo tiempo ofrecen una experiencia de uso uniforme. Esto se debe a que sin importar si la interacción se realiza vía Web o por aplicación para smartphone, los resultados serán siempre los mismos. Además, ofrecen una seguridad sin igual debido a la forma en cómo están estructuradas. Esto gracias a que el código de estas aplicaciones descentralizadas puede ser públicamente revisado en la blockchain, y cada acción que se realiza queda grabada de forma permanente en los bloques de la blockchain.

Sin duda, las DApps son una revolucionaria aproximación para crear aplicaciones accesibles desde cualquier parte del mundo. Pero ¿Es nueva este tipo de aproximación?

Relacionado: ¿Quíen es Vitalik Buterin?

Origen de las DApps

El origen de las DApps podemos ubicarlo en la creación de las primeras aplicaciones de redes P2P como Napster, BitTorrent o protocolos tan curiosos como DC o eMule. Si bien, estas aplicaciones deben instalarse en un computador para poder usarlas, la información que estas pueden manejar se haya descentralizada. Es decir, la información a la que acceden está en la red de nodos que forman parte de su red. Así, por ejemplo, al obtener un archivo torrent o enlace magnet, podemos compartir información de cualquier archivo referenciado por el mismo, y dicho archivo se encuentra ubicado en distintos nodos de esa red. Y esto ya era posible de hacerse en años cómo 2001.

Sin embargo, el concepto fue evolucionando aún más y dio un salto enorme con la aparición del Bitcoin en 2009. De hecho, Bitcoin es realmente la primera DApp del mundo y todo gracias a la creación de la tecnología blockchain. Sin embargo, Bitcoin tiene ciertas limitaciones debido a su lenguaje de programación interno, el Bitcoin Script. Hizo falta un poco más de tiempo, para que en 2014, Vitalik Buterin hiciera la presentación de Ethereum.

Ethereum es una blockchain tal cual como Bitcoin, pero internamente es mucho más. Con una máquina virtual ejecutándose en cada uno de sus nodos, la Máquina Virtual de Ethereum (Ethereum Virtual Machine - EVM), esta nueva blockchain abre las puertas para un potencial de desarrollo mucho mayor. Junto a la EVM nace Solidity, un lenguaje de programación de alto nivel con el cual podrás crear complejos contratos inteligentes (smart contracts) con los cuales se podía interactuar.

La unión de la blockchain de Ethereum, su EVM y Solidity hizo posible el sueño de Nick Szabo (el creador del concepto de smart contracts) de ver un mundo donde los smart contracts podían ser el punto de interacción de toda acción digital. Fue así como nacieron las DApps que todos conocemos ahora.

¿Cómo funciona una DApp?

El funcionamiento de una DApp depende especialmente de dos elementos: una blockchain y un elemento de ejecución. La blockchain es la que permite que la DApp pueda contar con una infraestructura de red descentralizada. Una red que garantice recursos en todo momento, además de servir de medio para el almacenamiento de información, así como un medio para que los usuarios puedan interactuar con la misma. El segundo elemento (elemento o ambiente de ejecución), es el que permitirá que las DApps puedan ser diseñadas y ejecutadas bajo un marco de trabajo y comportamiento definido.

Para dar un ejemplo claro de estos elementos usaremos a la blockchain de Ethereum. La blockchain de Ethereum, sería la infraestructura que permite a la DApp contar con una red descentralizadas y los recursos que necesita para su funcionamiento. Esto incluye memoria, poder de procesamiento y almacenamiento que son vitales para que una app funcione de forma correcta. El segundo elemento viene dado por la Ethereum Virtual Machine y Solidity. La unión de estos elementos permite crear el punto de ejecución de las DApps. Esto ya que podemos programar el smart contract usando Solidity, compilarlo y hacer que la EVM ejecute dicho código cada vez que sea invocado.

Ahora bien ¿Cómo es esto posible? Pues bien veamos las etapas intermedias que hacen que una DApp funcione:

Desarrollo

En primer lugar, las DApps como toda aplicación debe ser desarrollada. Esto significa que debemos escribir en lenguaje de programación toda la lógica de la aplicación y plasmarla en un smart contract o contrato inteligente. Pero para esto, no podemos usar cualquier lenguaje de programación. En Ethereum, por ejemplo, debemos usar Solidity o algún lenguaje compatible que genere bytecode que pueda ser ejecutado por la Ethereum Virtual Machine.

En la actualidad, el lenguaje más usado para esta tarea es Solidity. Esto debido a que es el lenguaje oficial. El uso de Solidity se centra en la creación de los llamados smart contracts, que harán funcionar a la futura DApp. En estos smart contracts está asentada toda la lógica de la DApps. Es decir, tienen todo lo necesario para que el programa funcione sin contar la interfaz gráfica.

Para crear esta interfaz se usan otros lenguajes de programación como por ejemplo HTML5 o Python. Un buen ejemplo puede ser la librería web3.js de JavaScript, la cual nos permite interactuar con smart contract locales o remotos. Usando esta librería y HTML5, podemos crear aplicaciones web que interactúen con los smart contracts en la blockchain de Ethereum.

Por ejemplo, la popular aplicación CryptoKitties usa Solidity para programar su smart contracts, y para el resto de funciones usa web3.js para crear una interfaz gráfica web que permite a sus usuarios utilizar esta interesante DApp.

Adicional en este punto, los desarrolladores pueden usar nodos locales para revisar cómo funciona el smart contract y depurarlo, hasta el punto en que finalmente pueda ser desplegado y puesto en producción.

https://lh3.googleusercontent.com/SCDZRx2DOy-LqVtzRX7Tb8dBfPgToD-YzDVJoXhwHmjhnTVCRU2sEoA1s0Tf2O2zbCmPqd0S__kPWX2xM9DKF4gNatCh9nf4kKpNLrmB9zfdqywLn3KReqCTW1UZHH2zvLssZL4K

Despliegue

En este punto, los desarrolladores ya han terminado de crear y estabilizar su smart contract y la interfaz gráfica para interactuar con el mismo. Sin embargo, estas funcionalidades son desarrolladas usando nodos locales ajenos a la red principal de Ethereum.

Así que la segunda etapa para el funcionamiento de una DApp pasa por el despliegue de la misma.  Esto es llevar el smart contract desde nuestro entorno de desarrollo a la blockchain. Este proceso es posible gracias a la creación de contratos de Ethereum.

La creación de estos contratos funciona como una transacción normal, solo que, en este caso, esta transacción incluirá el bytecode de nuestro smart contract. Así que lo primero que los desarrolladores deben hacer es compilar su smart contract usando algún IDE de desarrollo, y desde allí usar un nodo como Geth o una wallet como MetaMask para desplegar el resultado dentro de la blockchain de Ethereum. De hecho, acá puedes elegir si desplegarlo en la red principal (Mainnet) o alguna de las redes de prueba de Ethereum (como Ropsten).

En cualquier caso, el resultado será el mismo, tu smart contract y su código formará parte de la red y tendrá una dirección única, con la cual podrás interactuar.

https://lh4.googleusercontent.com/dgaA1pZeyNrsMpaIa4fJ4FsZaUk5QBPT4la0-FstnnybRVQGrE5ImhHt5MULWwfOucet69ihQaVjJeI0qodTumaaXqTDOHknb1-O1q1qQ50ZyjKxcHQ3xP9H3Q_c2hdCGf_hQTGk

Interacción

En esta última etapa nuestra DApp ya cuenta con todos los elementos necesarios para su funcionamiento. Tenemos la lógica de la aplicación o smart contract. También tenemos dicha lógica ya puesta en la blockchain de Ethereum y tenemos la dirección para interactuar con dicho contrato. Así que, en este último caso, solo necesitamos reconfigurar nuestra interfaz para que interactúe con el smart contract de Ethereum.

Dicho de otra forma, lo que hacemos es redirigir todas nuestras acciones a la dirección del smart contract. Así cada vez que realizamos una acción, esta se vuelve una transacción que llega al smart contract de la DApp. Dicho smart contract, toma esta interacción y la procesa, una funcionalidad que es posible gracias a la Ethereum Virtual Machine.

Básicamente lo que pasa en este punto se puede enumerar así:

  1. El usuario abre la interfaz de la DApps (web o app de smartphone).
  2. Usando la interfaz el usuario puede realizar distintas acciones. Cada una de estas acciones se transforma en una transacción que es enviada a la blockchain de Ethereum.
  3. La red Ethereum toma cada una de estas acciones y al encontrarse con una operación que va dirigida a un smart contract en específico, prepara el espacio de su ejecución. Debido a que estas acciones son una transacción blockchain, estas tienen un costo asociado. Dicho costo incluye pago de los mineros y el gas usado para que la transacción sea minada y se pague por el poder computo necesario para realizar dicha acción.
  4. Se hace la carga del smart contract y se introducen los datos de la interacción realizada por el usuario. De acuerdo a la programación del smart contract, este genera una respuesta.
  5. La transacción del usuario (la interacción) como la respuesta del smart contract (la respuesta) son almacenadas en la blockchain.
  6. Finalmente, el usuario puede ver la interacción realizada y los resultados de su respuesta en la blockchain.

Relacionado: ¿Qué son los smart contracts o contratos inteligentes?

Características de las DApps

Por supuesto todo lo anterior le otorga a las DApps una serie de características únicas. Entre estas podemos mencionar

Seguridad

La programación de las DApps está incrustada en la blockchain, y una vez llega a ella es imposible afectarla. Esto garantiza que el entorno de ejecución de la DApp es inmodificable y toda acción que se realice quedará grabada en la blockchain en todo momento. Además al estar ejecutándose sobre blockchain las DApps heredan sus ventajas en términos de seguridad, como lo es la alta integración con criptografía de las mismas, así como la resistencia a la censura y a otros problemas de seguridad, como los ataques de denegación de servicios.

Adicional a esto, los datos que maneja la aplicación están en todo momento bajo posesión del usuario. Esto es posible porque las interacciones que realiza el usuario solo son posible si se tienen las claves públicas y privadas correctas. Además, las DApps no almacenan ningún tipo de datos en servidores externos. Esto minimiza las fugas y robos de información, protege la privacidad y mantiene la seguridad en todo momento.

Software libre

Uno de los grandes pilares de la tecnología blockchain es que su construcción se asienta sobre el desarrollo de software libre. Lo mismo se repite en las DApps, puesto que sus smart contracts son públicamente visible y pueden ser auditados en todo momento. Esto permite que las DApps alcancen altos niveles de transparencia en cuanto a su programación y funcionamiento.

Descentralización

Otra de las principales características de la DApps es su descentralización. O lo que es lo mismo, la capacidad de funcionar sin servidores centrales. Esto resulta especialmente útil si lo que deseamos es crear aplicaciones con un alto nivel de tolerancia a fallas. Recordemos que por ejemplo Bitcoin ha estado en funcionamiento por más de 11 años continuos. Y en ningún momento, Bitcoin ha estado fuera de servicio.

Pues bien, lo mismo pasaría con las DApps, ya que estas dependen para su funcionamiento de los nodos y mineros que formen parte de la red. Mientras más nodos tenga la red menos probable es que las DApps puedan sufrir algún problema.

Limitaciones de las DApps

Algunas de las limitaciones más importantes de las DApps son las siguientes:

  1. No son capaces de sacar provecho del potencial del hardware de los dispositivos de los usuarios. Esto se debe a que la ejecución de la DApp se hace en los nodos de la blockchain y no en el computador o dispositivo del usuario.
  2. Depurar y auditar smart contracts no es una tarea fácil, lo que puede llevar a que estos tengan graves problemas de seguridad que no fáciles de ver. Un ejemplo de esto lo podemos ver en el robo que se realizó en The DAO y los problemas reciente con los flash loans del ecosistema DeFi.
  3. Tienen graves problemas de escalabilidad. Las DApps han sacado rápidamente a la luz los graves problemas de escalabilidad de la blockchain. Esto debido a que, si millones de usuarios interactúan con las DApps, esto significa millones de transacciones en la blockchain y debido a la baja escalabilidad de las mismas, estas acciones pueden tomar horas en completarse. De allí que el desarrollo de las blockchain se centra especialmente en resolver este problema.

Ejemplo de algunas DApps

CryptoKitties

Este fue uno de los primeros juegos del mundo que se ha creado basándose en la tecnología blockchain. CryptoKitties, va de coleccionar “gatitos virtuales únicos”. Cada uno de estos gatitos tienen características y propiedades que le hacen distintos al resto. Es precisamente su extrema rareza, lo que les da valor y vendría a ser la criptomoneda del juego. Los gatitos pueden ser comprados y vendidos, obteniendo así su propiedad de forma virtual.

Adicionalmente a esto, podemos hacer “cría” de gatitos en CryptoKitties. Es decir, podemos unir a dos gatitos para obtener una descendencia genética única. el cual podremos mantener, criar más adelante o vender para hacer negocio.

https://lh3.googleusercontent.com/Cw0xgj_H7cc4wV2A5fkkvqCbKSIL9FlEbSEOnUCCwbMokDAnr_E0TBbd_TXFNSoDjE-OnTxVPYs1unC_vNsazInk4j-1jxzqBu3NCq_cbHnuwnas0yqHOq7QBAjj2qA4t-GFo0t5 

Steemit

Steemit es una DApp construida sobre la cadena de bloques Steem, y que utiliza la criptomoneda homónima STEEM para recompensar a los usuarios por el contenido que crean. Al votar sobre publicaciones y comentarios, los usuarios pueden decidir el pago de esas publicaciones. Los usuarios también reciben las llamadas "Recompensas de curación" por buscar y votar por contenido que otros usuarios votaron después.

https://lh3.googleusercontent.com/q-bRJVSa3DR0Nh0P-ug56_dXtqwAohWtVWJ6_7qYOfsuVZkCtwUNGdghA3PDbANbd4WtIWx0LVdcpXiv3TKeF_eayJ52gMLsGCb6N3ttlqYl0y5iqgNwrBYbqrKjLh_AsT3nzGt_

DTube

DTube es una plataforma para compartir vídeos que respeta a los usuarios sin seguimiento, sin recopilación de datos, sin censura y sin anuncios. La comunidad vota para clasificar vídeos, moderar y ganar incentivos de criptomonedas.

https://lh4.googleusercontent.com/xxWBFxvrmvbheWkFR9xHFaChYpY-LmKUrwg3cQCavr7ynVZYFCH51eCShlaJpi3-WHwR92ivrR1x1IcdnZOhvcbfLiU-UUK7eYc0Q4aQsvOJXQYQ7EgQOCWoVGfXoWK7rvSOPoVn

Kyber Network

Kyber es un protocolo de liquidez que permite la integración de intercambios de tokens descentralizados en cualquier aplicación, lo que permite que el intercambio de valor se realice sin problemas entre todas las partes del ecosistema. Al aprovechar el protocolo, los desarrolladores pueden crear flujos de pago y aplicaciones financieras, incluidos los servicios de intercambio instantáneo de tokens, pagos ERC-20 y DApps financieras innovadoras, lo que ayuda a construir un mundo donde cualquier token se pueda utilizar en cualquier lugar.

https://lh5.googleusercontent.com/hgbGxB4sdu73jHNJ5Q0hGBoFSOGvPZ0y8dZqIqoZalr6Ei0fuOIjiJB0BdzAz62eHpVUNWpoBDQQq2uWhg41rItxdEVfnRwGwA_fZEkJol7xVcNQ_tcablbZ8tMF-rzsm27ZHerl

Si deseas obtener una lista más completa de DApps clasificadas por tipos y redes sobre las que funciona, puedes entrar en este enlace para navegar por las mismas.