Signal Founder: After developing two decentralized applications, I found that Web3 might be a false proposition
Author: Moxie Marlinspike, founder of the renowned encrypted communication app Signal
Original Title: 《My first impressions of web3》
Translated by: Gong Quanyu, Chain Catcher
Although I consider myself a cryptographer, I haven't found myself particularly fond of "Crypto." Moreover, I haven't felt the excitement that my peers have about moving every aspect of life into a tool-based economy.
However, even strictly on a technical level, I haven't successfully become a believer. Therefore, given the recent attention to what is now called web3, I decided to explore more thoroughly some of the things happening in this space to understand what I might be missing.
How I view web 1 and web 2
Web3 is a somewhat vague term, making it difficult to strictly assess what the ambitions of web3 should be, but the general argument seems to be that web1 was decentralized, web2 centralized everything onto platforms, and web3 will once again decentralize everything. Web3 should give us the richness of web2, but in a decentralized manner.
Having some understanding of why centralized platforms emerged could be beneficial, and to me, the explanation is simple:
People do not want to run their own servers, and they never will. The premise of web1 was that everyone on the internet was both a publisher and consumer of content, as well as a publisher and consumer of infrastructure.
We all had our own web servers and our own websites, our own mail servers for our own emails, our own status servers for our own role generation. However—this cannot be emphasized enough—this is not what people want. People do not want to run their own servers.
Even nerds do not want to run their own servers at this point. Even organizations that build software full-time do not want to run their own servers at this time. If I want us to understand one thing about this world, it is that people do not want to run their own servers. Companies that provide these services for you are successful, and those that iterate new features based on the possibilities of these networks are even more successful.
Protocols run much slower than platforms. More than 30 years later, email is still not encrypted; meanwhile, WhatsApp went from no encryption to fully end-to-end encrypted (e2ee) in a year. People are still trying to standardize reliable video sharing through IRC; meanwhile, Slack allows you to create custom reaction emojis based on your face.
This is not a funding issue. If something is truly decentralized, it becomes very difficult to change and is often stuck in time. This is a problem for technology because other parts of the ecosystem are evolving rapidly, and if you don't keep up, you will fail.
But web3 intends to be different, so let's take a look. To quickly get a sense of this space and better understand what might happen in the future, I decided to build a few dApps and create an NFT.
Making some decentralized applications
To get a feel for the web3 world, I created a dApp called Autonomous Art that allows anyone to mint a token by making a visual contribution to an NFT. The cost of making a visual contribution increases over time, and the minting funds from contributors are distributed to all previous artists (visualizing this financial structure is similar to a pyramid shape). As of this writing, over $38,000 has been contributed to create this collective artwork.
I also created a dApp called First Derivative that allows you to create, discover, and trade NFT derivatives that track underlying NFTs, similar to financial derivatives that track underlying assets.
Both gave me insight into how the space operates. It should be clear that the applications themselves are not particularly "decentralized": they are just ordinary websites. "Decentralized" refers to where the logic/permissions for state and state updates reside: on the blockchain rather than in a "centralized" database.
One thing I have always found strange about the cryptocurrency world is the lack of focus on client/server interfaces. When people talk about blockchains, they talk about decentralized trust, leaderless consensus, and all the mechanisms that make it work, but often obscure the reality that clients cannot ultimately participate in these mechanisms. All network diagrams are server-centric, trust models are between servers, and everything is about servers. Blockchains are designed as peer-to-peer networks, but not in a way that your mobile device or browser can realistically become one of those nodes.
With the shift to mobile, we now firmly live in a client-server world—where the former cannot act as the latter at all—and these issues seem to me more important than ever. Meanwhile, Ethereum actually refers to servers as "clients," so there isn't even a term to represent the actual untrusted client/server interface that must exist somewhere, nor does anyone acknowledge that if successful, there will ultimately be billions more clients than servers.
For example, whether running on mobile or on the web, dApps like Autonomous Art or First Derivative need to interact with the blockchain in some way—to modify or render state (the collectively produced artwork, its edit history, NFT derivatives, etc.). However, this is practically impossible to achieve from the client side because the blockchain cannot exist on your mobile device (or, in fact, cannot exist in your desktop browser). Therefore, the only option is to interact with the blockchain through nodes running remotely on some server.
One server! However, it is well known that people do not want to run their own servers. Coincidentally, some companies have emerged that sell API access to Ethereum nodes running as a service, while also providing analytics, enhanced APIs built on top of the default Ethereum API, and access to historical transactions. Sounds… familiar. At this point, there are basically two companies. Almost all dApps use Infura or Alchemy to interact with the blockchain. In fact, even if you connect a wallet like MetaMask to a dApp, and the dApp interacts with the blockchain through your wallet, MetaMask is just calling Infura!
These client APIs do not use anything to verify the authenticity of the blockchain state or responses. As a result, there are not even signatures. Applications like Autonomous Art say, "Hey, what is the output of this view function on this smart contract," and Alchemy or Infura responds with a JSON blob that says, "This is the output," and then the application renders it.
This surprises me. A tremendous amount of work, energy, and time has gone into creating a trustless distributed consensus mechanism, yet almost all clients hoping to access it do so simply by trusting the outputs of these two companies without any further verification. This also does not seem to be the best privacy situation. Imagine if every time you interacted with a website in Chrome, your request was first sent to Google, then routed to the destination and back. This is the state of Ethereum today. All write traffic is obviously publicly on the blockchain, but these companies can also see almost all read requests from almost all users in almost all dApps.
Blockchain proponents might argue that it doesn't matter if these types of centralized platforms emerge because the state itself is available on the blockchain, so if these platforms misbehave, clients can simply move elsewhere. However, I suggest that this is a very simplistic view of the dynamics that make platforms a reality.
Let me give you an example.
Making NFTs
I also wanted to create a more traditional NFT. Most people think of images and digital art when they think of NFTs, but NFTs typically do not store this data on-chain. For most NFTs of most images, this is too expensive.
NFTs do not store data on-chain; they contain a URL pointing to the data. What surprised me about these standards is that the data at the URL does not have a hash commitment. Looking at many NFTs sold for tens, hundreds, or millions of dollars on popular markets, that URL often just points to a VPS running Apache.
Anyone with access to that machine, anyone who buys that domain in the future, or anyone who destroys that machine can change the NFT's image, title, description, etc., to anything they want at any time (regardless of whether they "own" the token). There is nothing in the NFT specification that tells you what the image "should" be, nor does it allow you to verify whether something is the "correct" image.
So as an experiment, I made an NFT that would change based on who was viewing it, as the web server providing the image could choose to serve different images based on the requester's IP or user agent. For example, it looks one way on OpenSea, looks another way on Rarible, but when you purchase it and view it from your crypto wallet, it always shows up as a big ? emoji. The NFT you bid on is not what you get. This NFT is not unusual; this is just how the NFT specification is built. Many of the highest-priced NFTs could turn into ? emojis at any time; I just made that clear.
A few days later, without any warning or explanation, the NFT I created was removed from OpenSea:
The removal indicated that I violated some terms of service, but after reading the terms, I did not see anything prohibiting NFTs that change based on where they are viewed, as I publicly described.
However, what I found most interesting was that after OpenSea removed my NFT, it also no longer appeared in any crypto wallet on my device. This is web3, but how could this be?
Crypto wallets like MetaMask and Rainbow are "non-custodial" (private keys are stored on the client), but they face the same issue as my dApp: the wallet must run on a mobile device or browser. Meanwhile, the design philosophy of Ethereum and other blockchains is that it is a peer-to-peer network, but it is not designed in a way that your mobile device or browser can realistically become one of those nodes.
Wallets like MetaMask need to do some basic things, like display your balance, your recent transactions, and your NFTs, as well as more complex tasks like building transactions and interacting with smart contracts. In short, MetaMask needs to interact with the blockchain, but the way the blockchain is built makes it impossible for clients like MetaMask to interact with it. Therefore, like my dApp, MetaMask achieves this by making API calls to three companies integrated in the space.
Similarly, like my dApp, these responses are not authenticated in any way. They are not even signed so that you can prove later if they are lying. They reuse the same connection, TLS session tickets, etc., for all accounts in your wallet, so if you manage multiple accounts in your wallet to maintain some identity separation, these companies know they are linked.
MetaMask does not actually do much; it is just a view of the data provided by these centralized APIs. This is not a problem unique to MetaMask—what other options do they have? The setup for platforms like Rainbow is exactly the same.
All of this means that if your NFT is removed from OpenSea, it will also disappear from your wallet. My NFT is indelible on the blockchain somewhere, which functionally does not matter because the wallet is just using the OpenSea API to display NFTs, and it starts returning 304 No Content for queries of NFTs owned by my address!
Recreating this world
Given the history of web1 becoming web2, I find it strange that technologies like Ethereum have built many of the same implicit traps as web1. To make these technologies usable, the space is consolidating around… platforms. Again. People who will run servers for you and iterate new features that emerge. Infura, OpenSea, Coinbase, Etherscan.
Similarly, web3 protocols are evolving slowly. When building derivatives, it is best to price minted derivatives as a percentage of the underlying value. This data is not on-chain; it is in the API provided to you by OpenSea. People are excited about how NFT royalties can benefit creators, but there are no specified royalties in ERC-721, and it is too late to change that, so OpenSea has its own way of configuring royalties that exist in the web2 space. Rapid iteration on centralized platforms has already surpassed decentralized protocols and consolidated control into platforms.
Given these dynamics, I think we are at a place where your crypto wallet's view of your NFTs is the same as OpenSea's view of your NFTs, which is not surprising. I do not think we should be surprised that OpenSea is not a purely "viewable" entity that can be replaced, as it has been busy iterating the platform beyond the strictly impossible/difficult-to-change standards.
I think this is very similar to the case with email. I can run my own mail server, but functionally it does not matter for privacy, resistance to censorship, or control—because Gmail will be on the other end of every email I send or receive anyway. Once a decentralized ecosystem consolidates around a platform for convenience, it becomes the worst of both worlds: centralized control, but still decentralized enough to be mired in the mud of time. I can build my own NFT marketplace, but if OpenSea mediates the view of all NFTs in the wallets people use (and all other applications in the ecosystem), it does not provide any additional control.
This is not a complaint against OpenSea, nor an indictment of what they have built. Quite the opposite; they are trying to build something effective. I think we should expect this kind of platform consolidation to happen, and given the inevitable design systems, when things are organized this way, we can give ourselves what we want. However, my feeling and concern is that the outcomes the web3 community is hoping for are different from what we have already seen.
It's still early
"It's still early" is the most common adverb I see when people in the web3 space discuss these issues. In some ways, cryptocurrency has failed to move beyond relatively nascent engineering, which allows people to think the "early" days are over, as objectively it has been a decade or more.
However, even if this is just the beginning (and it likely is!), I am not sure we should take any comfort in that. I think the opposite may be true; it seems we should have noticed from the start that these technologies tend to centralize through platforms to make them work, which has zero negative impact on the speed of the ecosystem, and most participants are not even aware or concerned that it is happening.
This may indicate that decentralization itself does not have direct practical or urgent importance for most downstream people; the only amount of decentralization people want is the bare minimum required for something to exist, and if not very consciously considered, as the days become less early, power will push us further away from the ideal outcome rather than closer.
But you can't stop the gold rush
Think about it: if all the web3 parts disappeared, OpenSea would actually be "better" in a direct sense. It would be faster, cheaper for everyone, and easier to use. For example, to accept a bid on my NFT, I would have to pay over $80 to $150 in Ethereum transaction fees. This sets an artificial floor for all bids; otherwise, you would lose money by accepting a bid below the gas fee. Compared to credit cards, the fees for credit card payments often feel like extortion, but they seem cheap. If people want a public record of transactions, bids, etc., to verify their accounts, OpenSea could even publish a simple transparency log.
However, if they built a platform to buy and sell nominally non-crypto images, I don't think it would take off. Not because it isn't decentralized, but because, as we have seen, much of what is needed to make it work is not decentralized. I don't think it would take off because this is a gold rush. People are making money speculating with cryptocurrency, and those interested in using cryptocurrency in ways that support their investments while providing additional returns define the environment of the wealth transfer market.
Those who are hyping NFTs fundamentally do not care about decentralized trust models or payment mechanisms; they care about where the money is. Therefore, funding attracts people to OpenSea, where they improve the experience by building a platform that iterates the underlying web3 protocols in the web2 space, ultimately providing the ability to "mint" NFTs through OpenSea itself rather than through your own smart contract, which ultimately opens the door for Coinbase to allow you to access a verified NFT market on their platform using your debit card.
This opens the door for Coinbase to self-manage tokens held in dark pools, helping to eliminate transaction fees and potentially avoiding interaction with smart contracts altogether. Ultimately, if all the web3 parts disappeared, you would have a website to buy and sell JPEGs with a debit card. Due to market dynamics, the project could not have started as a Web2 platform, but the same market dynamics and fundamental forces of centralization are likely to drive it to ultimately become a Web2 platform.
At the end of the stack, NFT artists are excited about this progress because it means more speculation/investment in their art, but if the purpose of web3 is to avoid the traps of web2, we should be concerned that this is already the natural trend of these new protocols that should provide a different future.
I think these market forces may persist, and to me, the question of how long is whether the accumulated cryptocurrency ultimately ends up in the engine or in the funnel. If the funds flowing through NFTs ultimately flow back into the crypto space, it may continue to accelerate forever (regardless of whether it is just web2x2). If it appears in large amounts, then it will be a flash in the pan. Personally, I think enough money has already been made at this point, with enough faucets to keep it running, and this is not just a flash in the pan. If that is the case, it seems worth considering how urgently to avoid web3 becoming web2x2 (web2 but with less privacy).
Creativity may not be enough
I have only been feeling my way through the waters of web3 for a while. However, from the perspective of these small projects, I can easily see why so many people think the web3 ecosystem is so neat. I do not think it liberates us from centralized platforms; I do not think it fundamentally changes our relationship with technology, and I think the privacy story is already below the standard of the internet (which is a pretty low standard!), but I also understand why nerds like me are excited about it. It is at least a new thing at the nerd level—it creates a space for creativity/exploration, reminiscent of the early internet era. Ironically, part of this creativity may stem from the limitations that make web3 so clumsy.
If we truly want to change our relationship with technology, I think we must do so consciously. My basic idea is roughly:
First, we should accept the premise that people will not run their own servers by designing systems that can decentralize trust without decentralized infrastructure. This means that architecture can anticipate and accept the inevitable result of relatively centralized client/server relationships, but use cryptography (rather than infrastructure) to allocate trust. Although web3 is built on "cryptography," one of the things that surprises me is that the cryptography involved seems minimal!
Second, we should try to alleviate the burden of building software. At this point, software projects require a lot of manpower. Even relatively simple applications require a group of people to sit in front of computers for eight hours a day, every day, forever. This has not always been the case; at one point, a team of 50 working on a software project was not considered a "small team."
As long as software requires such coordinated energy and such a highly specialized human focus, I think it will tend to serve the interests of the people sitting in that room every day rather than the broader goals we might think. I think changing our relationship with technology may require making software easier to create, but in my lifetime, I have seen the opposite happen. It is unfortunate.