I have been studying DApps (Distributed apps) lately. They turn out to be super interesting.
First, I am amazed by the grand vision behind the design of the Ethereum ecosystems where dApps are built in, as well as that of the so-called Web3:
The key idea is that DApps are “Distributed”, i.e., without a central administrator or arbitrator. Let’s take the concrete example of running an auction. An DApp will just open up a virtual auction, invite bids, review the bids, announce the winner, and execute the transfer of money and auctioned item, all without any human intervention! Vive la democratie!
But here is the problem. What if something goes wrong?
What if, say, the code is not written 100% correct, and resulted in a dispute?
Or, more simply, what if someone just wants to contest the results for whatever reason?
In a traditional centralized app, there is almost always customer service, because there is an owner and usually the owner likes to take care of its customers. But what about a DApp?
In a DApp, there is not a central owner. True, the DApp was written by someone, but there is no incentive for the author of the dApp to take on the role of customer service (unless such a responsibility is written in the smart contract).
Gavin Wood, one of the founders of the Ethereum readily admits such a governance problem. In the aforementioned book, he wrote:
“The issue of governance is a particularly difficult one to solve, as it represents a double-edged sword. On the one hand, privileged accounts are dangerous; if compromised, they can subvert the security of the DApp. On the other side, without any privileged account, there are no recovery options of a bug is found. We have seen both of these risks manifest in Ethereum DApps.”
(Page 275, Mastering Ethereum)
So what is the takeaway? DApps are not good for every business applications. We need to come up with a theory and a set of guiding principle in helping people decide whether a DApp is a good way to go.
Below is an excellent discussion on smart contracts and DApps:
The discussion led by Professor Larry Lessig raise an incredible important point: No contract can codify all contingencies, and therefore there does not exist a smart contract that can incorporate every possible contingencies around the contract. So at the end of day, we still need a “state of law” to decide who gets what when an unspecified condition happens.