🎯 LOT Newcomer Limited-Time Airdrop is Live!
Individual users can earn up to 1,000 LOT — share from a total prize pool of 1,000,000 LOT!
🏃 Join now: https://www.gate.com/campaigns/1294
Complete deposit and trading tasks to receive random LOT airdrops. Exclusive Alpha trading task await!🎯 LOT Newcomer Limited-Time Airdrop is Live!
Individual users can earn up to 1,000 LOT — share from a total prize pool of 1,000,000 LOT!
🏃 Join now: https://www.gate.com/campaigns/1294
Complete deposit and trading tasks to receive random LOT airdrops. Exclusive Alpha trading task await!
Vitalik Buterin: Ethereum's Three Technical Transitions
Original author: Ethereum founder Vitalik Buterin
Special thanks to Dan Finlay, Karl Floersch, David Hoffman, and the Scroll and SoulWallet teams for their feedback, reviews, and suggestions.
As Ethereum transitions from a young, experimental technology to a mature tech stack capable of truly delivering an open, global, and permissionless experience to ordinary users, the stack will need to go through three major technological transitions roughly simultaneously:
Without the first, Ethereum would fail as each transaction costs $3.75 ($82.48 if we have another bull run) and every product aimed at the mass market will inevitably forget about the chain And adopt a centralized workaround for everything.
Without the second, Ethereum would have failed as users were reluctant to store their funds (and non-financial assets) and everyone turned to centralized exchanges.
Without a third, Ethereum would fail because all transactions (and POAP, etc.) A centralized solution that hides your data to the greatest extent.
These three transitions are critical for the reasons outlined above. But they are also challenging, because addressing them properly requires close coordination. It’s not just the functionality of the protocol that needs to be improved; in some cases, the way we interact with Ethereum needs to change fundamentally, requiring profound changes to applications and wallets.
These three transitions will fundamentally reshape the relationship between users and addresses
In an L2-extended world, users will exist on many L2s. Are you a member of ExampleDAO that relies on Optimism? Then you have an Optimism account! Do you hold CDP in the stablecoin system on ZkSync? Then you have an account on ZkSync! Have you tried some of the apps on kakarot? Then you have an account on Kakarot! Gone are the days when a user had only one address.
Smart contract wallets add complexity and make it more difficult to have the same address in L1 and various L2s. Today, most users are using externally owned accounts whose addresses are actually hashes of the public keys used to verify signatures - so nothing changes between L1 and L2. However, with smart contract wallets, it becomes more difficult to reserve an address. While a lot of work has been done to try and make addresses a hash of code that is equivalent across networks, most notably CREATE2 and ERC-2470 singleton factories, it's been hard to make this work flawlessly. Some L2s (such as "Type 4 ZK-EVM") are not exactly equivalent to EVM, usually Solidity or intermediate assemblies are used instead to prevent hash equivalence. Even if you could have hash equivalence, the possibility of wallets changing ownership through key changes has other unintuitive consequences.
Privacy requires more addresses per user and may even change the types of addresses we are dealing with. If the stealth address proposal is widely used, instead of just a few addresses per user, or one address per L2, users might have one address per transaction. Other privacy schemes, even existing ones such as Tornado Cash, change the way assets are stored differently: many users' funds are stored in the same smart contract (and thus at the same address). To send funds to a specific user, the user will need to rely on the privacy scheme's own internal addressing system.
As we've seen, each of these three transitions weakens the "one user ~= one address" mental model in different ways, with some of these effects feeding back into the complexity of implementing the transition. Two special complication points are:
If you wanted to pay someone, how would you get information on how to pay them?
If a user has many assets across chains stored in different places, how do they perform key changes and social recovery?
Three transitions and on-chain payments (and identities)
I have coins on Scroll and I want to pay for coffee (if "I" is literally referring to me as the author of this article, then "coffee" is of course a metonym for "green tea"). You are selling me coffee, but you can only receive coins on Taiko. what to do
Basically there are two solutions:
Of course, these solutions can be combined: the recipient provides a list of L2s they are willing to accept, and the sender's wallet figures out the payment, which may involve a direct send, or a bridged path across the L2 if they are lucky.
But this is just one example of a key challenge these three transitions present: simple operations like paying someone start requiring more information than just a 20-byte address.
Fortunately, the transition to smart contract wallets will not overburden the addressing system, but there are still some technical issues to be ironed out in other parts of the application stack. Wallets will need to be updated to make sure they don't just send 21000 gas with the transaction, and it's more important to make sure the payment receiving end of the wallet not only tracks the ETH transfer from the EOA, but also tracks the ETH sent by the smart contract code. Applications that rely on the assumption of immutable ownership of addresses (e.g. NFTs that prohibit smart contracts to enforce royalty fees) will have to find other ways to achieve their goals. Smart contract wallets will also make things easier - notably, if someone only receives a non-ETH ERC20 token, they will be able to use that token to pay for gas using ERC-4337 paymasters.
Privacy, on the other hand, again poses a grand challenge that we haven't really tackled yet. The original Tornado Cash didn't introduce any of these problems because it didn't support internal transfers: users could only deposit into the system and withdraw from it. However, once internal transfers are possible, users will need to use the privacy system's internal addressing scheme. In practice, a user's "payment message" needs to contain (i) some kind of "spend key", a promise of a secret that the recipient can use to spend, and (ii) some way for the sender to send the cryptocurrency only Information that the payee can decipher to help the payee discover the payment.
The stealth address protocol relies on the concept of a meta address, which works in this way: part of the meta address is a blinded version of the sender's spending key, and the other part is the sender's encryption key (although minimal implementations can set both keys are the same).
A key lesson here is that in a privacy-friendly ecosystem, users will have both consumption public keys and encryption public keys, and the user's "payment information" must include both keys. Beyond payments, there are good reasons to expand in this direction. For example, if we want encrypted emails based on Ethereum, users will need to publicly provide some kind of encryption key. In the "EOA world" we could reuse account keys for this, but in the world of secure smart contract wallets we should probably provide a more explicit function for this. This also helps make Ethereum-based identities more compatible with non-Ethereum decentralized privacy ecosystems, especially PGP keys.
Three transitions and key recovery
The default way to implement critical changes and social recovery in a world where each user has multiple addresses is to simply have the user run the recovery process on each address separately. This can be done with one click: wallets can contain software that can perform recovery procedures on all of a user's addresses simultaneously. However, even with this simplification of the user experience, there are three problems with simple multi-address recovery:
Solving these problems is difficult. Fortunately, there is an elegant solution that performs reasonably well: an architecture that separates validation logic from asset holding.
Proof can be achieved in several ways:
To add privacy to such a scheme, we simply encrypt this pointer, and then we do all proofs in ZK-SNARKs:
These scenarios can get complicated. On the plus side, there are many potential synergies between them. For example, the concept of "keystore contracts" can also solve the "address" challenge mentioned in the previous section: if we want users to have permanent addresses that don't change every time the user rekeys, we can put the hidden meta Addresses, encryption keys and other information are put into the keystore contract, and the address of the keystore contract is used as the user's "address".
A lot of secondary infrastructure needs to be upgraded
Using ENS is expensive. Today, in June 2023, things are not so bad: transaction fees are high, but still comparable to ENS domain fees. Registering with zuzalu.eth cost me about $27, of which $11 was transaction fees. But if we have another bull market, fees will skyrocket. Even without the ETH price increase, moving gas fees back to 200 gwei would raise the tx fee for domain registrations to $104. So if we want people to actually use ENS, especially for use cases like decentralized social media where users demand almost free registration (and ENS domain fees are not an issue since these platforms provide their users with subdomains), we need ENS at L2 to work.
Fortunately, the ENS team stepped up and ENS on L2 is happening! ERC-3668 (aka "CCIP standard"), together with ENSIP-10, provides a way to make ENS subdomains on any L2 automatically verifiable. The CCIP standard requires the creation of a smart contract that describes a method of verifying proofs of L2 data, and that domains (e.g. Optinames use ecc.eth) can be brought under the control of such a contract. Once the CCIP contract takes control of ecc.eth on L1, accessing some subdomain.ecc.eth will automatically involve finding and verifying the state proof (eg Merkle branch) in L2 where that particular subdomain is actually stored.
The ENS CCIP effort is a success story, and it should be seen as a sign that the kind of radical reform we need is actually possible. But there are still many application layer reforms that need to be done. A few examples:
Wallets will need to protect assets and data
Today, wallets are in the business of protecting assets. Everything is on-chain, and the only thing the wallet needs to protect is the private keys that currently secure these assets. If you change your key, you can safely publish your previous private key on the Internet the next day. However, in the ZK world, this is no longer true: the wallet not only protects the authentication credentials, it also holds your data.
We saw the first signs of such a world with Zupass, the ZK-SNARK based identity system used by Zuzalu. The user has a private key for authenticating to the system, which can be used to make basic proofs such as "prove that I am a resident of Zuzalu without revealing which one". But the Zupass system also started building other applications on top of it, most notably stamp (Zupass' version of POAP).
The key feature that stamps offer compared to POAP is that stamps are private: you keep data locally, and if you want someone to have information about you, you just have to prove a stamp (or some computation on a stamp) to someone . But that adds risk: if you lose that information, you lose the stamp.
Of course, the problem of holding data can be reduced to the problem of holding a single encryption key: some third party (or even chain) can hold an encrypted copy of the data. This has the convenient advantage that the action you take doesn't change the encryption key, so no interaction with the system that keeps your encryption key safe is required. But even then, if you lose your encryption key, you lose everything. On the other hand, if someone sees your encryption key, they can see everything encrypted with that key.
Zupass' practical solution is to encourage people to store their keys on multiple devices (such as a laptop and a phone), since the chances of them losing access to all of them at the same time is slim. We can go a step further and use a secret share to store keys, distributed among multiple guardians.
This social recovery via MPC is not an adequate solution for wallets, as it means that not only current guardians but also previous guardians could collude to steal your assets, which is an unacceptably high risk. But the risk of a privacy breach is usually lower than the total asset loss risk, and people with high privacy use cases can always accept a higher risk of loss by not backing up the keys associated with these privacy demanding operations.
To avoid users being overwhelmed by Byzantine systems with multiple recovery paths, wallets that support social recovery may need to manage both asset recovery and encryption key recovery.
Back to identity
One of the things these changes have in common is that the concept of an "address," the cryptographic identifier you use to represent "you" on-chain, has to fundamentally change. "Instructions on how to interact with me" will no longer be just an ETH address; they must be some combination of multiple addresses on multiple L2s, stealth meta addresses, encryption keys, and other data in some form.
One way is to make ENS your identity: your ENS record can just contain all this information, and if you send someone bob.eth (or bob.ecc.eth, or...), they can look up And see everything about how it pays and interacts with you, including more complex cross-domain and privacy-preserving methods.
But this ENS-centric approach has two weaknesses:
One possible solution is to put more content into the keystore contract mentioned in the architecture earlier in this article. The keystore contract can contain all kinds of information about you and how you interact with it (for CCIP, some of this information may be off-chain), and users will use their keystore contract as their primary identifier. But the actual assets they receive will be stored in a variety of different places. Keystore contracts are name-agnostic, and they are counterfactual friendly: you can generate an address that can be proven to only be initialized by a keystore contract with some fixed initial parameters.
Another type of solution is similar to the Bitcoin payment protocol, completely abandoning the concept of user-oriented addresses. One idea is to rely more on direct communication channels between sender and recipient; for example, the sender could send a claim link (as an explicit URL or QR code) that the recipient could use to follow the their willingness to accept payment.
In all these designs, making things both discrete and easy for users to understand is the most important. We need to make sure users have easy access to the latest view of what their current assets are and what news is published for them. These perspectives should rely on open tools, not proprietary solutions. Keeping a more complex payment infrastructure from becoming an opaque "tower of abstraction" where developers have a hard time understanding what's going on and adapting it to the new environment will take hard work. Despite the challenges, achieving scalability, wallet security, and privacy for ordinary users is critical to the future of Ethereum. It's not just about technical feasibility, it's about actual accessibility for the average user. We need to rise to this challenge.