# Aplicación descentralizada

Una aplicación descentralizada (también conocida por su acrónimo DApp) es una aplicación informática que funciona en un sistema de computación distribuido.
Las aplicaciones descentralizadas han proliferado gracias a la creciente pujanza de tecnologías DLT (Distributed Ledger Technologies) como blockchain o Ethereum, donde las "DApps" sirven habitualmente para implementar contratos inteligentes.

## Características

Según el libro blanco The General Theory of Decentralized Applications, una aplicación puede considerarse una "DApp" cuando cumple 4 criterios:
* La aplicación debe ser de código abierto y operar de forma autónoma, de modo que ninguna entidad controle la mayoría de los tokens.
* Los datos de la aplicación deben almacenarse en una cadena de bloques (blockchain) pública.
* La aplicación utiliza algún token criptográfico, necesario para obtener acceso a la DApp y para recompensar las contribuciones de sus usuarios.
* La aplicación debe generar tokens, mediante algún algoritmo criptográfico, que certifiquen el valor de las contribuciones de los usuarios del sistema.
El modelo de descentralización de las DApps ofrece ciertas ventajas sobre las aplicaciones centralizadas tradicionales. Por ejemplo, su funcionamiento no depende de entidades centrales, por lo que es menos vulnerable ante posibles fallos en servidores o centros de datos, y dado que los elementos de la aplicación se hallan distribuidos en una blockchain, los propios usuarios tienen acceso a su contenido de forma transparente y pueden participar en el proceso de verificación de su autenticidad, dificultando que cualquier agente malicioso pueda atacar la red. Asimismo, la descentralización del sistema hace extremadamente difícil que su contenido sea censurado o restringido por las empresas o el gobierno.
No obstante, el desarrollo de DApps exige conocimientos avanzados sobre cifrado y blockchain, lo que constituye una barrera de entrada a la creación de nuevas aplicaciones. Además, las DApps heredan una serie de problemas y limitaciones de la tecnología blockchain, como el costo que conlleva realizar operaciones en la cadena, la necesidad de una red lo suficientemente grande y robusta para que la aplicación funcione correctamente, y el problema de la escalabilidad, por el que la cadena se ralentiza y aumenta el costo de las operaciones cuando la red crece más de lo previsto. Las aplicaciones descentralizadas también son vulnerables al llamado «ataque del 51%», que se produce cuando alguna entidad o grupo toma el control de más de la mitad de los nodos encargados de verificar la autenticidad de las transacciones en la blockchain, lo que permitiría realizar operaciones fraudulentas en la red.

## Terminología técnica
### Blockchain

La cadena de bloques o blockchain es una tecnología que organiza los datos en una estructura llamada bloque y emplea técnicas criptográficas para conectar los bloques entre sí, formando una "cadena". Antes de añadir un bloque a la cadena, este debe propagarse a través de la red de blockchain para ser validado por los propios usuarios del sistema. Este proceso, denominado "minería", es el que acredita la alta fiabilidad de esta tecnología. El contenido de la cadena de bloques es público y los usuarios mantienen una copia íntegra de la cadena, de modo que su integridad y mantenimiento no dependen de un servidor o entidad central.
Las aplicaciones descentralizadas utilizan mecanismos de consenso como la prueba de trabajo y la prueba de participación para garantizar la autenticidad de los datos introducidos en la cadena de bloques. A través del mecanismo de prueba de trabajo, los usuarios que participan en el proceso de minería de la cadena intentan resolver un problema criptográfico que verifica la autenticidad de un bloque, donde el primer usuario en resolver el problema es premiado con un valor de la criptomoneda asociada a la blockchain. Este proceso es repetitivo, lento y muy costoso computacionalmente. El mecanismo de prueba de participación delega la tarea de minería en los usuarios con una probabilidad relativa a la cantidad de criptomonedas que posean.

### Contrato inteligente

Las aplicaciones descentralizadas interactúan con la blockchain a través de contratos inteligentes, protocolos autoejecutables codificados directamente en la blockchain que establecen un conjunto de reglas para que la interacción se produzca de forma autónoma y transparente. Protocolos como Ethereum y EOS cuentan con una implementación de contratos inteligentes que permiten el desarrollo de sofisticados programas que operan en sus respectivas blockchains, funcionando como plataformas que abren espacio para que los desarrolladores produzcan DApps que operen sobre la blockchain del protocolo.