-
Notifications
You must be signed in to change notification settings - Fork 5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow creation and import of multiple wallet types #328
Comments
In some ways, we've thought about addressing this domain of concerns before, in #67. #67 includes a sketch of a design where you would choose a wallet/vault when unlocking, which especially makes sense when considering the constraint that each wallet needs its own password. We don't store user passwords, so every time they add a new vault or wallet type, we need them to enter a password to encrypt it with. I think I like the potential simplicity of listing all available accounts in one list, so if we did the above mockup instead, we would simply have to include in our design considerations for how we need the user to enter their password to add a vault or single account. We can verify they reuse the same password for all their vaults, and that way when unlocking metamask, we could decrypt all of their vaults. This means if a user imports an old wallet file that's encrypted with a different password, we'll probably just re-encrypt it with their MetaMask password for local storage, and if they ask to export it, we'll give them the metamask-passworded copy. |
Long term "vaults" may be a very modular thing. We may have lots of vault types. Other types of account MetaMask might eventually include:
|
One idea is to draw a clear distinction between identities and the backups needed to recover them. This is similar to your mockups, except each identity would have an icon or label that indicates which backup is required for it. Instead of a Seed Vault section in the accounts list, each account tile would have something like ":closed_lock_with_key: 1". The geth wallet tile would have ":closed_lock_with_key: 2". There'd be another screen that lists backups with their names and creation or import dates. When you create a new identity, it tells you which backup is needed to recover it. I'm not sure this is better than visually separating identities from different backups, just an idea. Another concept that would be nice to support is contract-based identities. Key-based identities are a dead-end because losing a key is too easy. Contract-based identities make it easier to design recovery strategies and use dapps with communal identities, like BoardRoom and multisig wallets. With contract identity support, importing a seed or a wallet kicks off a registry lookup for any identities the key controls. Contract identities are typically created from a single factory, so it'd be easy to maintain an off-chain index of the identities each key controls. Once control of a contract identity changes, the factory is no longer a reliable source, but only BoardRoom currently allows that. Dapp UIs should record changes of control in a recovery registry to make it easy to see if a recovered key controls contract identities. As long as contract identities can be recovered by recovering the keys that control them, there's nothing special about the UI for contract identities. It's just like another identity attached to a seed, and the recovery process is identical. |
I don't think factories need to track ownership at all, you can just ask the contract itself for its history, since you know it is trustworthy because it came from the factory =] |
New type of hardware wallet: https://www.ledgerwallet.com/products/12-ledger-nano-s |
@VladTod if you have some free time, I'd appreciate you taking a visual pass on the above proposal. The idea is that the account-list view is now a keychain-list view, and it has addable and collapsable keychains on it, which each can show whatever they want under them, usually a list of accounts, but also include details for adding new accounts. |
I've begun a branch for working on this feature: Its first commit is a document planning its architecture: |
Tasks:
We will then have paved the way to theoretically easily:
|
Me and Kevin had a simplified MVP for this, that avoided many custom views, and uses a new tab for keychain creation. The task list for that roadmap is this:
Keychain.init { Open questions: What does first time usage look like with multi-vault? |
We have some new designs in this issue's Quip designs folder. I've assembled a nearly comprehensive proposal for comments. I'm starting to think that we actually need to make Keyring creation happen in a new tab, the benefits are just too considerable to ignore, so we could use design mockups for what an account creation browser page might look like. It should have
This page could either be for a single Keyring type, or it could allow selecting keyrings within its UI, whatever we decide feels the most natural. |
I'm now closing this as it's better represented with a milestone. |
Current behavior
Right now MetaMask's wallet system is entirely BIP-44 seed-word based.
Whenever MetaMask is first set up, the user gets a twelve-word phrase, and it's used to generate their first account.
When restoring MetaMask, the only key-pairs you can import are ones derived from a BIP-44 compliant, twelve-word seed-word phrase like MetaMask uses at setup.
This means that when you press the
+
button under the account list, it always generates the same accounts in order.The problem
The ecosystem is full of alternative key signing methods, and we want the user to get to use one of their choosing.
For some users, it will be obvious that they want to import their old wallet file into MetaMask, not to mention it was a feature in the original MetaMask preview.
Since our entire UX right now is designed around these twelve-word seed phrases, which are hard to explain to normal people, there's a question of how to represent an account that is derived from your main seed words vs from a wallet file.
Proposal: Organized vaults
The account list section could be divided into sections. A section would represent either a single key-pair wallet file, or a seed-word phrase.
The seed-word phrase sections would be unique, because they would have their own "add account" section.
Right now we're thinking these sub-sections would be views provided by that account type, so any features or UI elements that are specific to that keychain would show up in its collapsable section, or maybe it has an options gear button that navigates to a view it controls.
From this custom view, it could do as much interaction as it wanted, and then could pass it back to MetaMask when it was done.
The text was updated successfully, but these errors were encountered: