A year ago I illustrated the Web3 stack as I understood it at the time. More recently, I published Multicoin’s crypto mega theses, detailing the investment thesis for Web3. As I highlighted, one of the key implications of Web3 is that data ownership and application logic will be unbundled.
In this essay, I’ll explain the specific problems inherent in this unbundling, and how we’ve been thinking about making investments in the Web3 stack.
For practical purposes, the vast majority of modern applications can be thought of as a UX on top of a database. While there are some exceptions (e.g., video streaming and video games), this is generally true. Virtually every major consumer service—Facebook, Reddit, Evernote, Twitter, Google Docs, Gmail, iMessage, etc—can be simplified to a UX on top of a database.
In the Web2 model, application providers store and manage user data so that users don’t have to. Moreover, Web2 application providers are always online because they’re running servers 24/7, whereas users frequently go offline (subways, poor connectivity, battery challenges, etc). In the Web3 model, there is no centralized application provider, and so the entire data ownership paradigm needs to change.
This begs a couple of questions:
Naturally, the answer must be: store the content somewhere that’s always online and accessible, and make sure that when Alice comes back online Alice knows where to find the content addressed to her. This paradigm encapsulates both P2P applications like messaging and traditional database applications like newspapers, social media, and note-taking apps.
To execute on this, there are a few mechanical challenges:
By solving these problems, data ownership and application logic can be unbundled, enabling Web3 to prosper.
Before exploring how modern Web3 entrepreneurs are solving these problems, it’s worth considering how others have tried to solve these problems in the past.
There have been a handful of teams—including but not limited to Zeronet, Freenet, and Scuttlebutt—that have tried to, as they would describe it, “decentralize the Internet.” They tried to do this before the modern crypto era as we know it today. Most of these efforts were focused on supporting narrow use cases; for example, censorship-resistant messaging and message boards targeted at users in countries with authoritarian regimes.
If you’re curious, I recommend trying each of these systems. You’ll find that the UXs leave much to be desired. Although there are many UX problems with these systems, the biggest problem by far is speed. Everything is just painfully slow.
What gives? Why are they so slow?
Because they’re all logically decentralized.
These systems adopted some variation of the following architecture. I’ll describe their architectures in the context of an encrypted, P2P messaging app:
Zeronet and Freenet, which are more generalized than just P2P social networking, use a similar model, except there is not a double-opt in friend model. This adds quite a few complexities to the system, and makes things even slower. Unlike the Scuttlebutt model, in which friends agree to help each other for defined information pathways, users of Freenet and Zeronet have to randomly ping other users and ask them about what information they know about. This is the crux of why these systems are so slow.
These problems are non-trivial. Decentralizing the Internet is hard.
The root cause of all the problems described above is the lack of logically centralized storage and indexing. What is logically centralized storage? To answer that, it helps to understand the three vectors of decentralization in distributed systems:
For a more robust explanation of these concepts, I recommend this essay by Vitalik Buterin.
Web2 monopolies solved all of the problems outlined in the previous section because they rely on logically centralized storage. That is, when Alice comes back online, she just asks the centralized web service, which maintains centralized storage, what messages she missed since she was last online. The web service queries a database that it controls containing all user messages, and returns the correct messages.
The problem with this model is that these Web2 systems bundle all forms of centralization: They’re logically centralized, politically centralized, and (other than for scaling purposes) architecturally centralized.
So are there storage systems that are logically centralized, but architecturally and politically decentralized?
Fortunately, the answer is a resounding yes: interplanetary filesystem(IPFS) for contract-based storage, and Arweave for permanent storage (contract-based storage: store X bytes of data for Y period of time with Z retrievability guarantees. AWS, GCP, Azure, Filecoin, and Sia are all contract-based storage systems).
What exactly does it mean for the system to be logically centralized but architecturally and politically decentralized? The best way to understand this is to consider how a computer retrieves basic files from another server on the web today (location-based addressing), and then compare that to the IPFS/Arweave approach (content-based-addressing).
In the Web2 architecture, if Alice wants to download a picture from a server, Alice will go to a URL that looks something like: website.com/image.png. What exactly happens when Alice tries to go to that URL?
Using DNS, Alice knows where to find the server at website.com, and she will ask the server for the image it’s hosting located on its local filesystem at “/image.png.” Assuming the server wants to cooperate, it will check its directory for /image.png and return that file if it exists.
Note how fragile this system is: If the file moves, is changed, the server is busy, or the server is uncooperative for any reason, the request will fail.
This is the foundation on which the web is built today.
In a content-based addressing system like the one used in IPFS and Arweave, the URL that Alice visits is something like this: QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D.
Although it’s not human-readable, it’s deterministically generated from the content that it’s derived from. That is, there is only a single piece of content in the universe which, when hashed, will produce that exact string. The magic of IPFS and Arweave is that they handle all of the complexity that allows a computer to resolve QmTkzDwW… into this webpage.
(If you’d like to learn more about IPFS works, this 6-part series is an excellent starting point).
The content on the IPFS and Arweave networks is stored across many machines. Regardless of how many machines the content is stored on or where those machines are located in the world, these protocols resolve addresses like QmTkzDwW… regardless of where the actual content is stored.
That’s the magic of content-based addressing. It exposes a single logical interface – the content-based address – that will always resolve correctly regardless of where the underlying data is stored across a vast network of computers that are architecturally and politically decentralized.
Of the four major technical challenges outlined at the beginning of this essay, content-based addressing solves #1, #3, and #4 (storing the content, making the content available for download, and ensuring that the host cannot read private information). But what about #2: knowing where to look for the data?
While IPFS and Arweave act as a logically-centralized but architecturally and politically-decentralized filesystems, these systems are not databases. That is, there is no way to query them and ask “please show me all of the messages sent from Bob to Alice between dates X and Y.”
Fortunately, there are a few ways to solve this problem.
One approach is to store the index of messages of on blockchains directly. Blockchains themselves are logically centralized but architecturally and politically decentralized databases. Using a decentralized service like The Graph or centralized service like dFuse, Alice can query indices stored on blockchains. The blockchain doesn’t store the underlying data, but rather just a hash of the data. That hash is just a pointer to the content stored in IPFS or Arweave. Both the Graph and dFuse are live today, and many applications have adopted this model of storing hashes on chain that point to data stored in content-addressed systems.
A second approach is to leverage Textile. Textile has built a unique technology that they call Threads, which act as a private, encrypted, personal database on top of IPFS. Because this database is built on IPFS, it’s logically centralized but architecturally and politically decentralized. As a logically centralized database, senders and receivers know where to send and read information from. Moreover, Textile recently launched Cafes, enabling users to establish a server to host their Threads (rather than hosting Threads locally). The next step for Textile is to build an economic layer to incentivize validators to host cafes for other users, which is analogous to how Filecoin is the economic layer for IPFS.
A third approach is to leverage OrbitDB. OrbitDB is similar to Textile’s Threads, except that OrbitDB is designed primarily for public data (e.g. for building decentralized Twitter), whereas Textile’s Threads natively integrate encryption and key management for private information (e.g. P2P messaging). Like Textile, OrbitDB is available today, and the OrbitDB team is working on an economic layer on top of the underlying technology.
We are skeptical of the idea of adding a BFT layer on top of traditional databases given the work that smart contract teams are doing to solve the data availability problem at scale, such as Solana’s Replicators. Instead, we have opted to make investments in “crypto-native” databases like Textile, and at the developer API layer in the form of The Graph and dFuse.
With the protocols and services described above – IPFS, Filecoin, Arweave, The Graph, dFuse, Textile, and OrbitDB – there is a clear path by which Web3 can come to fruition. All of these services exist today, albeit not quite in production-ready and web-scale form with battle-tested crypto-economics. Nevertheless, there are known solutions to the most important problem – exposing a single logically centralized interface for politically and architecturally decentralized systems.
Is there anything left?
Now that we have solutions for logically centralized but architecturally decentralized storage, indexing, and retrieval, we can afford to think about higher-level logic. Some examples:
While these are distinct technical challenges, I broadly bucket all of these as “higher-level logic” problems.
Textile’s Threads address precisely these kinds of problems. In many ways, one can think of Textile as iCloud for IPFS. While this analogy isn’t perfect, it generally works: In the same way that iCloud abstracts cross-device syncing and data back up for applications (providing both a better user and developer experience), Textile provides all of the higher order logical tools on top of IPFS to make application development seamless for developers while ensuring seamless cross-device syncing and backup for users on IPFS.
The Web3 ecosystem is incredibly diverse on many dimensions, on the types of problems being solved, locations of the teams, economic models they’re employing, and more. That the Web3 stack is coming together despite the fact that there isn’t a single logically centralized entity coordinating the whole thing is remarkable. However, this also means there is a lot of entropy in the system, and as such it’s difficult to understand the higher-level themes. In this essay, I distilled that as follows:
The greatest challenge in the transition from Web2 to Web3 is the transition from systems in which all three vectors of centralization – logical, architectural, and political – have been bundled to systems that are logically centralized but politically and architecturally decentralized.
If you’re building core infrastructure or apps on the Web3 stack, please reach out or DM me on Twitter. We are looking to make more Web3 investments. We believe Web3 is going to be a paradigm shift that unlocks trillions of dollars of value over the next decade, and we’re looking to back the best entrepreneurs building foundational Web3 infrastructure.
Disclosures: Multicoin Capital has invested in Solana, The Graph, Textile, Arweave, and Dfuse. Multicoin Capital abides by a “No Trade Policy” for the assets listed in this report for 72 hours (“No Trade Period”) following its public release. No officer, director or employee shall purchase or sell any of the aforementioned assets during the No Trade Period.