{"action":"created","issue":{"url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/731","repository_url":"https://api.github.com/repos/MetaMask/metamask-plugin","labels_url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/731/labels{/name}","comments_url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/731/comments","events_url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/731/events","html_url":"https://github.com/MetaMask/metamask-plugin/issues/731","id":182615417,"number":731,"title":"Design Views for Multiple Keychains","user":{"login":"Zanibas","id":1840057,"avatar_url":"https://avatars.githubusercontent.com/u/1840057?v=3","gravatar_id":"","url":"https://api.github.com/users/Zanibas","html_url":"https://github.com/Zanibas","followers_url":"https://api.github.com/users/Zanibas/followers","following_url":"https://api.github.com/users/Zanibas/following{/other_user}","gists_url":"https://api.github.com/users/Zanibas/gists{/gist_id}","starred_url":"https://api.github.com/users/Zanibas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Zanibas/subscriptions","organizations_url":"https://api.github.com/users/Zanibas/orgs","repos_url":"https://api.github.com/users/Zanibas/repos","events_url":"https://api.github.com/users/Zanibas/events{/privacy}","received_events_url":"https://api.github.com/users/Zanibas/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/MetaMask/metamask-plugin/labels/design","name":"design","color":"fbca04"}],"state":"open","locked":false,"assignee":{"login":"VladTod","id":13063928,"avatar_url":"https://avatars.githubusercontent.com/u/13063928?v=3","gravatar_id":"","url":"https://api.github.com/users/VladTod","html_url":"https://github.com/VladTod","followers_url":"https://api.github.com/users/VladTod/followers","following_url":"https://api.github.com/users/VladTod/following{/other_user}","gists_url":"https://api.github.com/users/VladTod/gists{/gist_id}","starred_url":"https://api.github.com/users/VladTod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VladTod/subscriptions","organizations_url":"https://api.github.com/users/VladTod/orgs","repos_url":"https://api.github.com/users/VladTod/repos","events_url":"https://api.github.com/users/VladTod/events{/privacy}","received_events_url":"https://api.github.com/users/VladTod/received_events","type":"User","site_admin":false},"assignees":[{"login":"VladTod","id":13063928,"avatar_url":"https://avatars.githubusercontent.com/u/13063928?v=3","gravatar_id":"","url":"https://api.github.com/users/VladTod","html_url":"https://github.com/VladTod","followers_url":"https://api.github.com/users/VladTod/followers","following_url":"https://api.github.com/users/VladTod/following{/other_user}","gists_url":"https://api.github.com/users/VladTod/gists{/gist_id}","starred_url":"https://api.github.com/users/VladTod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VladTod/subscriptions","organizations_url":"https://api.github.com/users/VladTod/orgs","repos_url":"https://api.github.com/users/VladTod/repos","events_url":"https://api.github.com/users/VladTod/events{/privacy}","received_events_url":"https://api.github.com/users/VladTod/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/MetaMask/metamask-plugin/milestones/11","html_url":"https://github.com/MetaMask/metamask-plugin/milestones/Multi%20Vault%20Support","labels_url":"https://api.github.com/repos/MetaMask/metamask-plugin/milestones/11/labels","id":2062860,"number":11,"title":"Multi Vault Support","description":"The ability to support multiple vault types","creator":{"login":"flyswatter","id":542863,"avatar_url":"https://avatars.githubusercontent.com/u/542863?v=3","gravatar_id":"","url":"https://api.github.com/users/flyswatter","html_url":"https://github.com/flyswatter","followers_url":"https://api.github.com/users/flyswatter/followers","following_url":"https://api.github.com/users/flyswatter/following{/other_user}","gists_url":"https://api.github.com/users/flyswatter/gists{/gist_id}","starred_url":"https://api.github.com/users/flyswatter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flyswatter/subscriptions","organizations_url":"https://api.github.com/users/flyswatter/orgs","repos_url":"https://api.github.com/users/flyswatter/repos","events_url":"https://api.github.com/users/flyswatter/events{/privacy}","received_events_url":"https://api.github.com/users/flyswatter/received_events","type":"User","site_admin":false},"open_issues":6,"closed_issues":0,"state":"open","created_at":"2016-10-11T17:31:01Z","updated_at":"2016-10-12T19:41:39Z","due_on":"2016-12-01T00:00:00Z","closed_at":null},"comments":7,"created_at":"2016-10-12T19:41:38Z","updated_at":"2016-10-24T22:53:21Z","closed_at":null,"body":"This is a design-centric version of #328\n\nWe are planning to refactor a core piece of MetaMask, allowing it to support multiple key signing types, and this has some pretty big UX implications, so we want designer input to keep it as simple and user-friendly as possible.\n\nRight now MetaMask is entirely based around the idea of these \"HD-Wallets\", where a 12-word seed phrase is where all the accounts come from.\n\n![screenshot from 2016-10-12 11-23-44](https://cloud.githubusercontent.com/assets/1840057/19322573/77e2c184-906e-11e6-91df-bcd5b2f28a00.png)\n\nThis makes the account list fairly simple, since we have a list of accounts, and you can only add them, and they are always added in the same order, like this:\n\n![screenshot from 2016-10-12 11-19-08](https://cloud.githubusercontent.com/assets/1840057/19322422/de4055d2-906d-11e6-92bf-e0f49780d5db.png)\n\nIn the future, there are other types of account we want to support:\n\n- Import Geth account .json files\n- Simple key pairs (maybe allowing vanity account generation, like 0xbad0dab0...)\n- [uPort](https://uport.me/#home) accounts\n- Hardware wallets, like [Trezor](https://bitcointrezor.com/) or [Ledger](https://www.ledgerwallet.com/)\n\nWe had an idea for what this might look like in the account list, where vault types might include sections, like this:\n\n![multi vault list example](https://cloud.githubusercontent.com/assets/542863/16361107/4f017c64-3b38-11e6-83a0-fea3e7f9058a.png)\n\nHowever, we are open to other solutions.\n\n## Key Terms\n\nBefore resuming, here are some terms we should clarify. We haven't really picked solid words, so feel free to propose the words we use as part of the design.\n\n### Keychain\n\nA way of grouping accounts together. A keychain can be a simple set of key pairs, or an HD wallet series of wallets, or a uPort identity.\n\nRight now, MetaMask only has one Keychain, a seed word keychain, but the purpose of this design is to allow multiple keychains.\n\n### Vault\n\nThe encrypted storage of MetaMask.\n\nIn the past, the Keychain has been the same thing as the vault.\n\nGoing forwards, we're thinking we'll encrypt all the keychains together, so they are all unlocked at once, so a user doesn't have to manage multiple passwords for different keychains, but that is a design decision, and up for discussion.\n\n### Wallet / Account / Key Pair\n\nThese terms are basically interchangable. They represent a single Ethereum identity.\n\nThis can be a simple key-pair, or an identity contract, but to MetaMask, it represents a discrete, selectable identity that is injected into a web dapp as **a public address**.\n\nLong term, one of these might be a uPort persona, so a uPort Keychain manages many uPort persona accounts, but that's beyond our current scope.\n\n## Our current thinking\n\nThere are several views that might be affected, so let's step through them one by one.\n\n### First Time Screen\n\n![screenshot from 2016-10-12 11-26-01](https://cloud.githubusercontent.com/assets/1840057/19322764/2cea2090-906f-11e6-8239-09a8d11dff10.png)\n\nNow that we are supporting several wallet types, we are now discussing what the optimal first-time user flow would be like. Since we are no longer constricted to just one wallet, should we make a certain type of wallet the 'default' wallet type for first-time users, or give them the option up-front to decide on their first wallet type?\n\nAnother option is to have a single Keychain be the default, but include a small `Advanced` option, that opens up Keychain selection.\n\n### Vault Creation Screen\n\n![screenshot from 2016-10-12 11-26-57](https://cloud.githubusercontent.com/assets/1840057/19322765/2f361502-906f-11e6-9499-db41734532e8.png)\n\nThis screen may become mandatory on first-time use, because the password is used to encrypt all the Keychains. Otherwise, it may remain identical.\n\n### Keychain Creation Screen\n\nSince we would not be offering many keychain types, we might not want to automatically show a seed phrase after the password screen.\n\n![screenshot from 2016-10-12 11-23-44](https://cloud.githubusercontent.com/assets/1840057/19322573/77e2c184-906e-11e6-91df-bcd5b2f28a00.png)\n\nThe options we have come up with so far (not exhaustive) are:\n\n- Defaulting to a specific wallet for first-time users\n- Giving users a dropdown list of supported keychain choices\n- A hybrid, where users have an advanced option to select a specific keychain, but otherwise will use a default keychain.\n\nOnce this keychain has been selected, there are other requirements in mind:\n\n- Redirect users to a new view after keychain selection. This can either be through a new tab, window, or within the popup (or some other method).\n\t- Creating accounts in a new tab has the advantage that it is much easier for different keychains to render custom wallet creation views.\n\t- If creating accounts in a new tab, we still should indicate that MetaMask received the new account. Maybe via a notification.\n\n### Keychain Restore Screen\n\n![screenshot from 2016-10-12 11-28-20](https://cloud.githubusercontent.com/assets/1840057/19322768/31328de0-906f-11e6-83e1-6775ceef5cbe.png)\n\nWith multiple Keychains in mind, we have to consider what the account restoration should look like. Instead of requesting the seed phrase right away, users will be required to select a wallet type to restore. \n\nKeychains may require different information to restore.\n\n### Account List Screen\n\nAs we discussed above, this screen is going to have to be different if there are different account types within MetaMask.\n\n![screenshot from 2016-10-12 11-19-08](https://cloud.githubusercontent.com/assets/1840057/19322422/de4055d2-906d-11e6-92bf-e0f49780d5db.png)\n\nIt is worth noting that a single account type, like an HD seed-phrase wallet, may have many accounts under it. For this reason we are calling these account-types \"Keychains\", because they can have many keys. \n\nThis is why I initially suggested having sectioned  Keychains, but I understand the `+` signs also become a little confusing then.\n\n![multi vault list example](https://cloud.githubusercontent.com/assets/542863/16361107/4f017c64-3b38-11e6-83a0-fea3e7f9058a.png)\n\nWe had one thought that maybe instead of a `+` on the Keychain header, we have a settings gear icon, which would take the user to a custom view for that Keychain, maybe in a new tab.\n\nThis would make some sense since each keychain may have its own way of generating and managing keys, and a simple web view is the most flexible interface we could offer a Keychain developer.\n\nYou would not have to design the view for every type of keychain, but it would be nice to design basic views for HD wallets (the current type), and normal keypairs with geth wallet importing. I think the uPort team will want to design their own views.\n\nThis view may be split up into multiple views, but the goals for replacing it would be:\n\n- Allow adding new Keychains\n- Allow Keychains to dictate if/how to add new accounts with them.\n- Allow keychains to define custome interfaces for account creation.\n\n## Conclusion\n\nNone of our suggested designs are hard requirements, they're just our ideas so far on the issue. Feel free to borrow or discard whatever ideas you'd like, to make the best UX possible.\n\nOur goal is to simply give MetaMask a way forward for the many types of accounts users may choose to use in the future, making it easier for a user to choose their account type, and making it easier for us to add new types in the future."},"comment":{"url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/comments/255888809","html_url":"https://github.com/MetaMask/metamask-plugin/issues/731#issuecomment-255888809","issue_url":"https://api.github.com/repos/MetaMask/metamask-plugin/issues/731","id":255888809,"user":{"login":"eshon","id":1017762,"avatar_url":"https://avatars.githubusercontent.com/u/1017762?v=3","gravatar_id":"","url":"https://api.github.com/users/eshon","html_url":"https://github.com/eshon","followers_url":"https://api.github.com/users/eshon/followers","following_url":"https://api.github.com/users/eshon/following{/other_user}","gists_url":"https://api.github.com/users/eshon/gists{/gist_id}","starred_url":"https://api.github.com/users/eshon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eshon/subscriptions","organizations_url":"https://api.github.com/users/eshon/orgs","repos_url":"https://api.github.com/users/eshon/repos","events_url":"https://api.github.com/users/eshon/events{/privacy}","received_events_url":"https://api.github.com/users/eshon/received_events","type":"User","site_admin":false},"created_at":"2016-10-24T22:53:21Z","updated_at":"2016-10-24T22:53:21Z","body":"- Vaults have nothing to do with blockchains - in Metamask its means a browser vault.  A safe place in the browser where you store your account stuff.\r\n- Instead of 'Wallet' I thought Metamask was going with 'Account' (since Wallet is confusing - a wallet can hold multiple credit cards? Maybe that's just my confusion with 'Wallet', as it is used in the Ethereum community sometimes to mean Account.)\r\n- Vaults hold Ethereum Accounts. Keychains are an Account Type (\"implementation\" says the developer up there). If you create an Ethereum Account via geth it will be a little different from creating an Ethereum Account via uPort or Lightwallet/Metamask.\r\n- How are they different? Geth creates a single account public-private keypair with a special kind of format when you try to read the key files. A user could roll their own public-private keypair with a different format to those keyfiles. uPort Accounts are...? Linked to some service that pays for gas for you? Not sure about uPort. Metamask (like Lightwallet) creates an HD Account Type which has a 12 word seed that produces a tree of Accounts - each Account in this tree is unique and has different amounts of money but the same 12 word seed can reproduce all the keys to this tree of Accounts. So the Accounts are linked to each other via this 12 word seed, but they will be separate Accounts.\r\n- It gets hairy when a user has multiple 12 word seed trees in their Metamask vault, so if using tags it might need to be like HD 1, HD 2, HD 3..."}}
{"actor":{"display_login":"eshon"}}