Simple Summary
Clone “MetaMask” and create a “MetaMask Dev” version: an [almost] exact copy of MetaMask except that it is specifically intended for use when doing dapp development. This in turn let’s dapp developers segregate their development wallets from their real-world wallets.
Motivation
The current standard of only having one MetaMask instance that one is supposed to use for real-world usage (DeFi, NFTs, Identity, etc. etc.) and for dapp development (testing, deployments, etc.) has caused for loss of developer’s real-world funds (i.e., https://twitter.com/nateliason/status/1392086702794149894
, among others).
If this idea were implemented, a developer would then have both the MetaMask
and MetaMask Dev
extensions installed, and they would be able to keep their development wallets separate from their real-world wallets.
Implementation
Ideally, the MetaMask Dev extension is almost an exact clone of regular MetaMask, though a few things may need to be modified:
-
Change logo color to be visually distinct from normal MetaMask. Something like:
imgur.com/a/bmmpSwS
.
We want the user to be sure they are on the right MM. -
Require each developer to input their own Infura key (or alternatively, piggyback off MetaMask’s existing Infura plan).
-
Change verbiage throughout extension to indicate that MetaMask Dev should not be used with any significant portion of value, and rather should be used only by developers for dapp development purposes at their own risk. (Even though technically this would be just as secure as normal MetaMask).
Outstanding Questions
-
Does this idea make sense? Are there better solutions to this problem?
There is scaffold-eth, Hardhat, Ganache, etc. but even with those, at some point the developer will be interacting with (testing) their dapp through MetaMask. -
If this were to happen, a developer would likely have two extensions: MetaMask and MetaMask Dev. How would the dapp know which one to use (since they will be almost exact clones)? My understanding is that most dapps check for the
ethereum
provider in thewindow
object, and that is provided by MetaMask. Perhaps in MetaMask Dev, their could be an Active/Inactive toggle that would override thewindow.ethereum
object to be provided by MetaMask Dev or not. -
How does WalletConnect know that MetaMask is installed? I’m assuming it is by the same method as above, but we would again want to be sure the developer can develop their app with normal MetaMask and WalletConnect integrations, but be able to utilize MetaMask Dev when developing their dapp and when MetaMask Dev is “Active”.
-
Aside from a development-specific segregated group of addresses, it would be nice in general to have the ability to create segregated groups of addresses within MetaMask. Ex: one group for DeFi, one of NFTs, one for identity, one for development, etc; or perhaps some other types of groups (perhaps addresses within each group are related via inter-group transactions, but no addresses are associated between groups). This bring a broader question (feature request?) to the table: is it on the MetaMask roadmap to incorporate “Address/Account Groups” within the main MetaMask wallet? If it is, then an additional development-specific extension like this may not be necessary.