What are true DApps? – Dmytro Zarezenko – Medium
All future minds and conclusions is my own opinion based on different sources and do not claim to be true!
According to the definition given by Wikipedia…
A decentralized application (dapp, Dapp, dApp or DApp) is a computer application that runs on a distributed computing system. DApps have been mostly popularized by distributed ledger technologies (DLT), namely the Ethereum Blockchain, where dApps are often referred to as smart contracts.
But not so long time ago the definition was…
A decentralized application (Dapp, dApp or DApp) is an application run by many users on a decentralized network with trustless protocols. They are designed to avoid any single point of failure. They typically have tokens to reward users for providing computing power.
The previous definition was not so restricted and assumed PoW consensus as a typical attribute for reward supporters of the decentralized network. Ethereum smart-contract is given as the most popular example of the DApp in a new definition.
So what are DApps? Are only pure smart-contracts DApps, or smart-contract based applications with web UI are DApps as well? And what web application can be called DApp and what can’t? Are common designed web-application with frontend, backend and smart-contracts DApps?
Let’s look closer at the DApps and find out what are true DApps.
The General Theory
According to the definition provided in The General Theory of Decentralized Applications, Dapps the DApp should meet the following criteria:
- The application must be completely open-source, it must operate autonomously, and with no entity controlling the majority of its tokens. The application may adapt its protocol in response to proposed improvements and market feedback but all changes must be decided by consensus of its users.
- The application’s data and records of operation must be cryptographically stored in a public, decentralized blockchain in order to avoid any central points of failure.
- The application must use a cryptographic token (bitcoin or a token native to its system) which is necessary for access to the application and any contribution of value from (miners / farmers) should be rewarded in the application’s tokens.
- The application must generate tokens according to a standard cryptographic algorithm acting as a proof of the value nodes are contributing to the application (Bitcoin uses the Proof of Work Algorithm).
In other words
- Open Source — Source code of application is available to everyone.
- Decentralized — Uses a blockchain-like cryptographic technology.
- Incentive (stimulate) — App has crypto-tokens/digital assets for fueling itself.
- Algorithm/Protocol — Generates tokens and has an inbuilt consensus mechanism.
The last three criteria tell us that DApps are Blockchain apps and the 1st one tells us that DApp sources should be public and all changes should be monitored and controlled by some consensus. The most popular example that matches to all above — Ethereum smart-contracts. So, according to this criteria smart-contracts are DApps. But if we build some web application in-top of a smart-contract (with web3.js lib for example and MetaMask plugin), will it be a DApp? According to criterial list provided above this app should correspond to the next conditions:
- All smart contracts sources should be public and verified (with Etherscan blockchain explorer for example)
- All web-part sources should be public (public repository on GitHub for example)
- All contract addresses (factory contracts, libs etc) should be provided in web-based sources to be sure that it works with corresponded contracts.
But in this case we have few problem questions:
- If this application will have not only frontend but backend as well, and on server side we will use some centralized address to make some actions and private key from this address will be only known by app creator, will it be a DApp?
- How can we be sure that provided in the public repository sources correspond real sources of the launched app, especially if we will have backend part?
- Should we trust 3rd party centralized services like Etherscan and GitHub where we make our code public and open-source?
Looks like these things violate the first criteria from this list and such application is not a DApp. Even more, smart-contract — is not a DApp separately in case when they don’t have to be Open Source!
Let’s investigate more…
Classification of DApps
According to the same document we have the next classification of DApps:
- Type I — decentralized applications have their own blockchain. Bitcoin is the most famous example of a type I decentralized application but Litecoin and other “alt-coins” are of the same type.
- Type II — decentralized applications use the blockchain of a type I decentralized application. Type II decentralized applications are protocols and have tokens that are necessary for their function. The Omni Protocol is an example of a type II decentralized application.
- Type III — decentralized applications use the protocol of a type II decentralized application. Type III decentralized applications are protocols and have tokens that are necessary for their function. For example the SAFE Network that uses the Omni Protocol to issue ‘safecoins’ that can be used to acquire distributed file storage is an example of a type III decentralized application.
In the Ethereum infrastructure we can say that Ethereum is the DApp of the type I, smart-contract is the DApp of the type II and DApps on top of tokenomics (games like CryptoKitties, government solutions, property solutions) are DApps of the type III.
From my side I propose to add one more classification type:
- Type IV — decentralized applications based on level III and use the 3rd party oracles to receive or store data outside the blockchain (off-chain data).
DApps by Vitalik Buterin
According to DAOs, DACs, DAs and More: An Incomplete Terminology Guide posted by Vitalik Buterin on May 6, 2014:
A decentralized application is similar to a smart contract, but different in two key ways:
- DApps has an unbounded number of participants on all sides of the market
- DApps need not be necessarily financial. Because of this second requirement, decentralized applications are actually some of the easiest things to write (or at least, were the easiest before generalized digital consensus platforms came along).
The Ethereum white paper splits DApps into three types:
- Apps that manage money
- Apps where money is involved (but also requires another piece)
- Apps in the “other” category, which includes voting and governance systems.
The 1st type DApps are DEX (Decentralized Exchanges), wallets for example. The 2nd type of app mixes money with information from outside the blockchain (oracles). The 3rd type apps are something like DAOs, DACs.
More flexible definition
According to this answer
- A DApp has its backend code running on a decentralized peer-to-peer network. Contrast this with an app where the backend code is running on centralized servers.
- A DApp can have frontend code and user interfaces written in any language (just like an app) that can make calls to its backend. Furthermore, its frontend can be hosted on decentralized storage.
So if we have some backend logic — it should be hosted not on the centralized server, but running on a decentralized peer-to-peer network. In other case our app is not a DApp according to this definition.
What is true DApp?
No answer yet!
The definition of a decentralized application is still in the process of development and is under debate.
Are smart-contracts DApps?
Smart-contract is not a DApp separately in case when they don’t have to be Open Source.
Who should use DApps?
- People who don’t want to fall under some governmental jurisdiction
- People who don’t want to fall under some restrictions connected with corporations (banks, ministers, etc.) with CEO, presidents, managers etc.
- Not human beings (Nodes, Servers, IoT devices, robotic systems, household appliances)
How simple is it for an average user?
- DApps of type III usually look like regular applications so anyone can use it easily (these apps use servers, backend and frontend for UI/UX).
- DApps of types I and II need more expertise.
What are the use cases?
- Banking & Financial Services (wallets, exchanges (DEX), pools)
- Voting and Governance solutions (DAOs, DACs)
- ICOs or DAICOs (DAICO = DAO + ICO)
- Prediction Markets (Examples: Gnosis, Augur)
- Law and property (Legal contracts)
- Digital Identity Management
- Games (P2P games without central server and smart-contracts logic)
Is it possible to implement absolutely true DApp? Or why not?
- The definition of a decentralized application is still in the process of development and is under debate.
- There are a lot of problems connected with sales and end-user service delivery. In any case we use Internet, servers and browsers (manipulation is possible).
- The General Theory of Decentralized Applications, Dapps (https://github.com/DavidJohnstonCEO/DecentralizedApplications)
- DAOs, DACs, DAs and More: An Incomplete Terminology Guide (https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/)
- Decentralized application (https://en.wikipedia.org/wiki/Decentralized_application)
- Decentralized apps (dapps) (https://github.com/ethereum/wiki/wiki/Decentralized-apps-(dapps))
- Dapp Developer Resources (https://github.com/ethereum/wiki/wiki/Dapp-Developer-Resources)
- What are DApps (Decentralized Applications)? — The Beginner’s Guide (https://coinsutra.com/dapps-decentralized-applications/)
- These Are The 5 Best Use Cases Of Ethereum Smart Contracts (https://coinsutra.com/ethereum-smart-contract-usecases/)
- 9 Best DApps On Ethereum Platform That You Can Use Right now (https://coinsutra.com/ethereum-dapps/)