Decentralized apps are a new type of software program designed to exist on the Internet in a way that is not controlled by any single entity. They are similar to smart contracts but different in two key ways.
First of all, a decentralized application has an unlimited number of participants on all sides of the market. Second, a decentralized application need not be necessarily financial. Because of this second requirement, decentralized applications are some of the easiest things to write (or at least, were the easiest before generalized digital consensus platforms came along). For example, BitTorrent qualifies as a decentralized application, as do Popcorn Time, BitMessage, Tor, and Maidsafe (note that Maidsafe is also itself a platform for other decentralized applications).
Generally, decentralized applications fall into two classes, likely with a substantial gray area between the two. The first class is a fully anonymous decentralized application. Here, it does not matter who the nodes are; every participant is essentially anonymous, and the system is made up of a series of instant atomic interactions. BitTorrent and BitMessage are examples of this. The second class is a reputation-based decentralized application, where the system (or at least nodes in the system) keep track of nodes, and nodes maintain status inside of the application with a mechanism that is purely drawn up for the purpose of ensuring trust. Status should not be transferable or have de-facto monetary value. Maidsafe is an example of this. Of course, purity is impossible – even a BitTorrent-like system needs to have peers maintain reputation-like statistics of other peers for anti-DDoS purposes; however, the role that these statistics play is purely in the background and very limited in scope.
An interesting gray area between decentralized applications and “something else” is applications like Bitcoin and Namecoin. These differ from traditional applications because they create ecosystems and there is a concept of virtual property that has value inside the context of this ecosystem, in Bitcoin’s case bitcoins and in Namecoin’s case namecoins and domain names. As we’ll see below, the classification of decentralized autonomous organizations touches on such concepts, and it is not entirely clear exactly where they sit.
For an application to be considered a dApp it must meet the following criteria:
# 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 the consensus of its users must decide all changes.
# 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.
# 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 with the application’s tokens.
# 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).
# Type I decentralized applications have their own blockchain. Bitcoin is the most famous example of a type I decentralized application, as it is an open-source token and uses the blockchain, a peer-to-peer and public distributed ledger, to form a trustless system. Litecoin and other “alt-coins” are of the same type.
# Type II decentralized applications use the block chain of a type I decentralized application. Type II decentralized applications are protocols and have tokens that are necessary for their function. The Omni Layer which is built over the Bitcoin blockchain 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.
A useful analogy for a type I Dapp is a computer operating system (like Windows, Mac OS X, Linux, Android, iOS) for a type II Dapp a general purpose software program (like a word processor, a spreadsheet software, a file synchronization system such as Dropbox) and for type III Dapp, a specialized software solution (like a mail-merge tool that uses a word processor, an expense report macro that uses a spreadsheet, or a blogging platform that uses Dropbox).
Formation & Development Of A Dapp
Development of decentralized applications takes place in three steps.
# First Step: A whitepaper is published describing the Dapp and its features
# Second Step: Initial tokens are distributed
# Third Step: The ownership stake of the Dapp is spread
Legal model for the operation of Dapps
Operating under open-source licenses allows Dapps to be open for innovation without restrictions of copyright or patent. Also, by being completely open-source, decentralized applications can operate under the legal model of open-source software. Bitcoin, for example, uses the MIT open-source software license.
The intent of Ethereum is to create a protocol for building decentralized applications. Ethereum provides developers with a foundational layer: a blockchain with a built-in Turing-complete programming language, allowing anyone to write smart contracts and decentralized applications where they can create their own arbitrary rules for ownership, transaction formats, and state transition functions. In general, there are three types of applications on top of Ethereum.
# Financial applications, providing users with more powerful ways of managing and entering into contracts using their money.
# Semi-financial applications, where money is involved but there is also a heavy non-monetary side to what is being done
# Applications such as online voting and decentralized governance that are not financial at all.
# Token Systems
on-blockchain token systems have many applications ranging from sub-currencies representing assets such as USD or gold to company stocks, individual tokens representing smart property, secure unforgeable coupons, and even token systems with no ties to conventional value at all, used as point systems for incentivization.
# Financial derivatives and Stable-Value Currencies
for example, a very desirable application is a smart contract that hedges against the volatility of ether with respect to the US dollar by using the data feed from eg. NASDAQ.
# Identity and Reputation Systems
a contract stating the name of the owner of a land tile can be added to the Ethereum network but not modified or removed from. Anyone can register a name with some value, and that registration then sticks forever.
# Decentralized File Storage
a Dropbox-like Dapp where a smart contract splits the desired data up into blocks, encrypting each block for privacy, and builds a Merkle tree out of it, then the whole data gets distributed across the network
#Decentralized Autonomous Organizations(DAOs)
a virtual entity that has a certain set of members or shareholders who, perhaps with a 67% majority, have the right to spend the entity’s funds and modify its code. The members would collectively decide on how the organization should allocate its resources.
Steps for developing Dapps on Ethereum
# Read up on the basic concepts: Ethereum whitepaper is good place to start
# Pick a language: Solidity the one language that has most extensive documentation
# Pick a framework and test rpc: Solidity frameworks Embark and Truffle and use Ethersim as test rpc
# Look at example projects: eg. Consensys on Github
# Join a community & ask questions
# Ethereum official documentation
# Dapps basic terminology
# ConsenSys Dapps tutorial
# Ethereum Dapps for beginners
# Ethereum reading list for prospective Dapp developers
# Full sack “Hello World” voting Ethereum dapp tutorial
# List of all Dapps developed on Ethereum