Author: w1nt3r.eth
Compiled by: Deep Tide TechFlow
Perhaps the blockchain will endure forever, but the lifespan of decentralized applications (dApps) is quite short.
On Halloween 2024, I tried to open dApps I used in 2021, and the results were terrifying: expired domain names, suspended deployments, pages not found, services unavailable.
Wait, shouldn't these applications be decentralized? They should be applications that do not rely on centralized entities, free like beer, and free and resistant to censorship like speech. They are the applications that make Web3 the new internet.
But these applications have almost all disappeared, and most of those I used two years ago no longer exist. Their 'ghosts' may still linger somewhere on the blockchain, as long as you can find the right contract address and guess the correct call data.
Why did this happen? Where is the problem? What can we do to change this situation?
So, what exactly is a 'dApp'?
Let’s flip through the ancient documents we found from prehistoric times (2016).
"dApp" is short for "decentralized application." The idea is that you can create a web application using open technologies (like HTML/CSS/JS) and host it on decentralized and permissionless infrastructure (like IPFS). dApps interact with the blockchain through your wallet. You can access the latest data and send transactions without relying on centralized companies.
This makes dApps nearly unstoppable. Free, permissionless, decentralized. This is the dream that those truly pursuing the punk spirit seek.
Beautiful landing page
However, most people do not care about the features of decentralization and permissionlessness. They are more concerned about whether the application is practical (and whether the numbers can go up).
Web3 developers quickly realize they are competing for users’ attention with beautifully designed, fast, and engaging Web2 applications, and decentralization has not given them much of an advantage on this battlefield.
Those who understand the technology know that blockchain is a real paradigm shift. But everything on the blockchain is 'open source' and can be replicated, turning it into a commodity. There are no competitive barriers. Anyone can deploy Uniswap contracts anywhere. In fact, anyone can create their own L2!
The real differentiators are brand, distribution channels, network effects, and user experience. Among billions of Uniswap deployments, users will choose those they trust (brand), are easily accessible (distribution), that everyone is using (network effects), and that have user-friendly interfaces (user experience).
Although I mention user experience last, it is by no means the least important. Poor user experience can have negative effects. Every e-commerce store owner knows that for every additional 100 milliseconds of delay, they may lose 10% of users. If the user experience is poor, you cannot build a high-end brand. If your application frustrates users, you cannot retain them.
Deploying to Vercel is simpler than deploying to IPFS
Doing good is not easy
Even if most users are not interested in decentralization, true crypto punks still care. It's not about 'everyone should be a decentralized enthusiast', but because 'it is the right thing to do'. Even when centralized entities become hostile or face censorship, decentralization empowers people and grants them autonomy.
That’s the problem. Making an application that is both decentralized and has a good user experience is not easy. But the difficulty arises because we (developers) have become lazy.
Anatomy of BasePaint
Let’s take a look at a typical 'dApp' today and the technologies it relies on. I will use my own developed BasePaint as an example. In a sense, it should be a 'Web3 dApp': it uses the blockchain (Base L2) and relies on users' wallets for interaction. But that is not enough to provide a good user experience, so I had to integrate some non-decentralized elements. In fact, many.
Technical services composition of BasePaint
Here are the centralized technologies I had to adopt during development:
Domain name. I hope users can easily find us and access the website. Because the browser does not support ENS, I had to purchase a domain name from a registrar and configure DNS to point to the correct server.
Hosting services. I need to host the application (including HTML/CSS/JS files) somewhere and ensure fast and stable access. Although IPFS has great potential, most browsers do not support it, gateways are slow, and URLs are not user-friendly.
(Have you tried typing on your phone?
QmRxM6Fz3jYBNLTNn59Whtj8uiFodC53Z5nEep6eSkwf8V?
Database. The blockchain is a good database in some cases, but it is not suitable for all scenarios. For example, we store chat messages in a Postgres database because it is cheaper and faster. While we could try to put it on-chain, it can never match the speed of centralized databases.
Backend services. BasePaint also needs to perform some computations that are not suitable to handle on Ethereum. For example, generating videos, synchronizing multiple users’ cursor positions, verifying chat permissions, etc. Additionally, we need to protect some sensitive information, such as database connection credentials and private tokens.
Ethereum JSON-RPC providers. In theory, we can access the blockchain through users' wallets. But this means users without a 'Web3-supported' browser will not see anything. What's more, there are subtle differences between RPC providers of different wallets. For instance, QuickNode limits log queries to 10,000 entries, while Alchemy uses its own computing units to limit requests. Using wallet RPC means dealing with these subtle differences.
Indexer. Storing data on the blockchain is expensive. BasePaint solves this problem by not storing pixels in contracts. Instead, it sends all necessary data through Painted events. You can reconstruct any canvas by querying smart contract events. But imagine doing this on the BasePaint gallery page (where we display hundreds of canvases!). To provide a smooth user experience, we run an indexer to track blockchain events and store data in a way that allows for fast querying.
Other services. We use Reservoir to get secondary market data and perform cross-chain minting, Cloudflare as a CDN, R2 for video storage and caching, DataDog for logging, PostHog for analytics, and Neynar to find the wallet addresses of Farcaster users. Each service saves us weeks or even months of development time, but also makes our application less decentralized. Moreover, many tools lack sustainable business models and could shut down at any time.
Credit cards. This issue always makes me laugh and cry. Did you know that most crypto SaaS products cannot be paid for with cryptocurrency? If my credit card balance is insufficient or expired, my domain name, database, server, RPC endpoints, and other SaaS products go offline.
How to achieve decentralization of applications?
As a Web3 developer, the options I currently see are:
Abandon centralized technologies and build a hardcore dApp that relies entirely on decentralized services. While this may work for projects like Tornado Cash, it poses user experience barriers for ordinary consumer products, which may deter most users.
Retain centralized applications while developing a simplified dApp that relies solely on a decentralized technology stack. This means maintaining two separate applications, increasing engineering workload and costs.
Adopt a 'progressive enhancement' strategy. Start with a simplified dApp, and if the server is available, use it to enhance speed. This requires strict management, and the time saved is not much compared to the second option.
Open source code, allowing users to run it themselves (this is the direction we have chosen). But in reality, launching the entire system requires quite high software engineering capabilities, which is much more complex than loading a page from IPFS.
All the above options require considerable effort and are not the default choice. Look at any dApp tutorial or template; these issues are hardly mentioned. In fact, developing decentralized applications doesn't have to be that difficult. If we can shift complexity to the infrastructure layer, making dApps should be simpler.
Perhaps we should tackle those tricky problems?
We can try to achieve decentralization at the infrastructure level. For example, integrating ENS support into getaddrinfo, allowing all browsers to natively support IPFS, and enhancing IPFS’s speed to rival the current state-of-the-art CDNs. We can also improve Ethereum's JSON-RPC to make it more practical for decentralized applications (dApps). But this is just the simple part.
To replace centralized databases and servers, we need to develop a series of technologies that currently do not exist. Perhaps a zero-knowledge proof (ZK)-based distributed computing system that rewards you for running code, or a super Ethereum capable of efficiently executing general x86 instructions.
Additionally, we need to find decentralized solutions for all services built around cryptocurrencies. We need to design new incentive mechanisms—who will pay for these computing resources? In a truly decentralized system, existing SaaS business models will not work. (But hopefully, the fees for these services can be paid in cryptocurrency without needing credit cards.)
Moreover, we must ensure that the development experience of this new system is at least as good as current centralized platforms. Those platforms have invested billions of dollars in engineering time to refine, and poured money into marketing to flood the web with tutorials trying to convince everyone that their solutions are optimal.
Does this really matter?
"Your scientists were so preoccupied with whether or not they could, they didn’t stop to think if they should." — from (Jurassic Park)
But does the application layer really need to be decentralized?
Nouns have shown us that perhaps merely decentralizing on the blockchain is sufficient. Nouns have a thriving application ecosystem, all applications interact with the same contract. You can vote through Camp or Agora; it doesn't matter, just choose the interface you like.
To attract billions of users, cryptocurrency may need to become a seamlessly integrated component of existing systems. This means the ideal crypto experience is where users may not even know they are using cryptocurrency because it has been abstracted to a trivial level. For example, just tap your phone to buy coffee, and it doesn't matter whether it's using USDC or the Visa network; users don't care.
The market has found a local optimal solution:
The blockchain as a foundational layer is decentralized, securing trillions of dollars in assets and providing strong support for ownership and resistance to censorship.
The application layer, however, is centralized. Companies develop centralized applications to provide the best user experience. Their closed-source systems form barriers to competition, but these applications still interact with the same blockchain.
Missing tools
I hope this balance can tilt more toward decentralization. I want to run my own Nouns Camp or Agora version as simply as clicking a link. I hope we can have tools that make building these decentralized applications simple without compromising user experience.
BasePaint is stunning. It is a self-sustaining ecosystem: artists create works, collectors buy and profit in the secondary market, and owners can influence daily affairs through voting. This model works, and we have distributed over a million dollars to creators this way.
However, the weakest link in the entire system is our team. Maintaining the application requires significant effort, such as fixing bugs and enhancing user experience. At the same time, we are also working to make the system more decentralized, such as making the application easier to self-host, abandoning permission controls rather than setting thresholds.
Conclusion
Decentralized applications (dApps) seem to have lost their vitality because the advantages of 'decentralization' are not currently what users care about, so developers need to make adjustments. We have stopped developing tools aimed at making applications decentralized.
Fortunately, the underlying infrastructure of blockchain is more solid than ever. The foundational technology is more robust, and the development roadmap is promising. We actually have the opportunity to build a global computing platform.
However, unfortunately, discussions about how to enhance the user interface have not received enough attention. The concept of dApps has been temporarily shelved...