There are two main flavors of decentralized apps:
- Ethereum decentralized apps
- Blockstack decentralized apps
The model for development for Ethereum apps features a web frontend with a smart contract backend. On the frontend you have your typical application that uses a library called web3.js to make read calls (getting state) and write calls (transaction sending) to Ethereum nodes. On the backend you have a smart contract that stores global application state. This could be a token with balances for each user (or key), or it could be a naming system with the domain name that each user (or key) owns.
Key takeaways from this model is that there’s often a heavy reliance of putting state on the blockchain. There are advantages to this, in that it makes decentralization fairly simple and smart contracts are very expressive. But unfortunately it comes with several major drawbacks. It’s very hard to scale, and each individual user will have to spend a large amount of money just to be able to handle the transaction fees. Further, it’s very easy to shoot yourself in the foot with smart contracts.
The model for development on Blockstack, meanwhile, features a web frontend and a simple, reliable backend for a core set of services. Blockstack simplifies the process of building decentralized applications by cutting out the complexity of having to program smart contracts and introducing common API’s and libraries for identity, authentication, storage, payments and tokens. With this model, apps can be built out in a much more scalable, reliable, and secure way. And users don’t have to foot an enormous bill simply to use the application.