# Aplicativo descentralizado

Um aplicativo descentralizado, também conhecido como DApp, é um aplicativo de computador que funciona em uma rede peer-to-peer descentralizada. DApps possuem código aberto e operam de forma autônoma, independentemente de autoridades centrais.

## Características

De acordo com o livro branco "The General Theory of Decentralized Applications", um aplicativo pode ser considerado um DApp quando obedece a quatro critérios:
* O aplicativo deve possuir código aberto, operar de maneira autônoma sem que alguma entidade controle a maioria de seus tokens. Adaptações ao aplicativo devem ocorrer mediante a consenso entre seus usuários.
* Dados relativos ao aplicativo devem ser armazenados em uma blockchain pública.
* O aplicativo utiliza algum token criptográfico, necessário para obter acesso ao DApp e para recompensar contribuições de seus usuários.
* O aplicativo deve gerar tokens de acordo com algum algoritmo criptográfico que atuam como prova do valor da contribuição de usuários do sistema.
O modelo de descentralização dos DApps os proporciona vantagens em relação a aplicativos centralizados tradicionais. O funcionamento dos aplicativos descentralizados não depende de entidades centrais, assim, seu sistema não é sujeito a possíveis falhas em servidores ou datacenters. Por conta da distribuição de elementos do aplicativo em uma blockchain, os próprios usuários tem acesso a seu conteúdo de maneira transparente e podem participar do processo de verificação de sua autenticidade, fator que é responsável pela dificuldade de que algum agente malicioso consiga atacar a rede. A descentralização também acarreta no aumento exponencial da dificuldade para que seu conteúdo seja censurado ou seu acesso restringido por corporações ou pelo governo.
Porém, o desenvolvimento de DApps requer conhecimento sobre o funcionamento e a estrutura da blockchain e de criptografia, fator proibitivo na criação de novos aplicativos. Além disso, DApps herdam uma série de problemas e limitações da tecnologia blockchain, como a necessidade de que seja pago um custo para realizar operações na cadeia, a necessidade de uma rede suficientemente grande e robusta para que o aplicativo opere adequadamente e o problema da escalabilidade, que causa a diminuição da velocidade e o aumento do custo de operações na blockchain uma vez que a rede cresce mais do que o esperado. Aplicativos descentralizados também são vulneráveis ao chamado ataque dos 51%, que ocorre quando alguma entidade ou grupo assume o controle de mais da metade dos nós responsáveis pela verificação da autenticidade de transações na blockchain, tornando possível a realização de operações fraudulentas na rede.

## Informações técnicas
### Blockchain

A blockchain é uma tecnologia que organiza dados em uma estrutura chamada de bloco e utiliza técnicas de criptografia para ligar os blocos uns aos outros, formando uma cadeia de blocos. Para que um novo bloco seja adicionado à cadeia, é necessário que ele seja propagado pela rede da blockchain e validado pelos próprios usuários do sistema, este processo é chamado de mineração e é responsável pela alta confiabilidade da tecnologia. O conteúdo da blockchain é público e a tecnologia permite que usuários mantenham uma cópia integral da cadeia, assim, sua integridade e manutenção não dependem de um servidor ou entidade central, garantindo a descentralização do serviço que usa a tecnologia.
Aplicativos descentralizados usam mecanismos de consenso como o de prova de trabalho e o de prova de participação para garantir a autenticidade dos dados inseridos na blockchain. Através do mecanismo de prova de trabalho, usuários que estão participando do processo de mineração da blockchain tentam resolver um problema criptográfico que verifica a autenticidade de um bloco, onde o primeiro usuário a solucionar o problema é remunerado com um valor da criptomoeda associada à blockchain. Este processo é repetitivo, lento e computacionalmente custoso. O mecanismo de prova de participação delega a tarefa de mineração a usuários com probabilidade proporcional à quantidade da criptomoeda que eles possuem.

### Contrato inteligente

Aplicativos descentralizados interagem com a blockchain por meio de contratos inteligentes, protocolos auto-executáveis codificados diretamente na blockchain que estabelecem um conjunto de regras para que ocorra a interação de maneira autônoma e transparente. Protocolos como o Ethereum e o EOS dispõem de uma implementação de contratos inteligentes que permite o desenvolvimento de programas sofisticados que operam em suas respectivas blockchains, funcionando como plataformas que abrem espaço para que desenvolvedores produzam DApps que operem sobre a blockchain do protocolo.

## Considerações

Um dos maiores problemas que afetam o mercado de criptomoedas e aplicativos descentralizados, é o fato de que o interesse em aspectos especulatórios da tecnologia atrai um grande número de esquemas maliciosos, como esquemas Ponzi e ICOs fraudulentas.
Atualmente, por conta das limitações de desempenho da tecnologia blockchain, aplicativos descentralizados utilizam contratos inteligentes apenas para operar dados que devem ser resistentes a modificações. Os aplicativos necessitam de programas locais para atender os requerimentos de suas especificações, abrindo espaço para que funções maliciosas sejam escondidas na parte local do DApp.
Os próprios contratos inteligentes também estão sujeitos a vulnerabilidades que permitem que o sistema de um aplicativo descentralizado seja atacado, em parte por conta da ausência de um padrão de normas suficientemente robusto para guiar seu desenvolvimento por desenvolvedores menos experientes, e também pela possibilidade de que haja implantação maliciosa de uma backdoor por desenvolvedores mal-intencionados. Fatores agravados pela dificuldade da solução de problemas com contratos inteligentes, já que alterações no programa requerem consenso entre os usuários. Em junho de 2016, vulnerabilidades em contratos inteligentes foram responsáveis pelo roubo do equivalente a 50 milhões de dólares do fundo de investimento descentralizado DAO, resultando na queda do valor do ether.
Outro problema enfrentado por DApps é a alta quantide de aplicativos não são bem sucedidos, seja por conta da complexidade de desenvolvimento ou por tratarem-se de aplicativos fraudulentos, resultando em grandes perdas de investimento.

## Exemplos
### Bitcoin

O Bitcoin é uma criptomoeda originalmente proposta por uma pessoa ou grupo anônimo que usa o pseudônimo Satoshi Nakamoto. Sua popularização foi responsável pelo aumento do interesse na exploração de aplicações da tecnologia blockchain e aplicativos descentralizados. O protocolo Bitcoin realiza transações de sua criptomoeda de maneira descentralizada através de sua blockchain, usando o mecanismo de prova de trabalho para que usuários verifiquem a autenticidade das transações.

### Ethereum

O Ethereum provê uma plataforma para o desenvolvimento de aplicativos descentralizados. A plataforma utiliza uma blockchain com uma linguagem de programação turing completa que permite o desenvolvimento rápido e simples de contratos inteligentes e DApps. Os tokens gerados pelo Ethereum são chamados ether, que podem ser vendidos, utilizados para o pagamento de taxas de transação ou a utilização de serviços computacionais na rede do Ethereum.

### Golem

Golem é um aplicativo descentralizado que fornece acesso a uma rede de computadores distribuída ao permitir que usuários aluguem seus recursos computacionais não utilizados. O DApp usa um sistema de transação baseado em Ethereum para gerenciar e alcançar consenso em transações de seu token, o GNT. A primeira versão do Golem opera com a renderização de imagens geradas por computador. Os desenvolvedores do aplicativo pretendem que versões futuras operem com modelos de aprendizagem de máquina.

### CryptoKitties

Desenvolvido pela Axiom Zen, CryptoKitties é um jogo eletrônico que opera na blockchain do Ethereum. O jogo permite que usuários comprem, vendam, colecionem e procriem gatos virtuais chamados de CryptoKitties. Cada CryptoKitty é único, possui um número único e um genoma de 256 bits definido por atributos herdados de seus parentes. CryptoKitties são tokens não-fungíveis únicos na blockchain do Ethereum, portanto pertencem únicamente ao seu dono e podem ser vendidos em mercados apropriados. O CryptoKitty mais caro chegou a ser vendido pelo equivalente a USD$117.712 em ETH. O jogo tornou-se tão popular que chegou a congestionar a rede do Ethereum, diminuindo sua velocidade significativamente.

### Peppeth

Peppeth é uma rede social descentralizada que registra todo seu conteúdo na blockchain do Ethereum, o aplicativo promove a permanência do seu conteúdo e sua resistência à censura. Para registrar-se e realizar operações no DApp, usuários devem pagar uma pequena taxa em Ether.

### Augur

Augur é um mercado descentralizado criado na plataforma Ethereum que permite que sejam criados mercados de aposta relacionados a eventos escolhidos pelos próprios usuários. O sistema permite que o usuário compre ações correspondentes a os possíveis desfechos do evento em questão, recompensando os apostadores proporcionalmente à sua quantidade de ações referentes ao desfecho ocorrido.