Metamask-extension: Support multiple hardware wallets.

Created on 23 May 2019  路  23Comments  路  Source: MetaMask/metamask-extension

What problem are you trying to solve?
I have multiple hardware wallets, and use multiple derivation paths within each hardware wallet. I want to be able to connect each of the hardware wallets/derivation paths to MetaMask and label them appropriately, without them getting deleted.

Describe the solution you'd like
When I connect a new hardware wallet, the previous one doesn't get deleted.

Additional context
Beyond just being able to sign with multiple hardware wallets without having to go through the connect process each time, retaining them with labels means I can transfer assets between them using the MetaMask UI without having to write down the address of each and manually verify. I can just choose destination from my list of wallets.

L17-hardware N00-needsDesign T01-enhancement

Most helpful comment

One part of the feature could be implemented quite simply by persisting the label of the wallet. That would already help a lot.
Right now, whenever I re-connect a ledger, the name shows up as Ledger 4 or Ledger 2 - which is super unhelpful... It would be great if it simply would retain the association of name -> address as a start.
Additionally, it would be also helpful to have the option to still have the addresses/accounts in the Metamask list of accounts. That would allow visiting pages that only view information based on the "connected" web3 account.
Rith now I have to connect the hardware wallet even if I just want to view some information, e.g. data in Compound. If the account would stay in the Metamask list and would provide the correct address to the page then it would solve a lot of extra work and hassle.

All 23 comments

These features would be added via changes to our Trezor Keyring and Ledger Keyring, which both implement our Keyring Protocol.

The full feature request also requires design for how to represent "groups" of accounts.

One part of the feature could be implemented quite simply by persisting the label of the wallet. That would already help a lot.
Right now, whenever I re-connect a ledger, the name shows up as Ledger 4 or Ledger 2 - which is super unhelpful... It would be great if it simply would retain the association of name -> address as a start.
Additionally, it would be also helpful to have the option to still have the addresses/accounts in the Metamask list of accounts. That would allow visiting pages that only view information based on the "connected" web3 account.
Rith now I have to connect the hardware wallet even if I just want to view some information, e.g. data in Compound. If the account would stay in the Metamask list and would provide the correct address to the page then it would solve a lot of extra work and hassle.

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__This issue now has a funding of 20.0 DAI (20.0 USD @ $1.0/DAI) attached to it.__

馃挵 A crowdfund contribution worth 10.00000 DAI (10.0 USD @ $1.0/DAI) has been attached to this funded issue from @coinyon.馃挵

Want to chip in also? Add your own contribution here.

I would like to try this, doesn't seem difficult. However, I do not have a hardware wallet. Is there a way to test simulating a hardware wallet your team is aware of? Otherwise, I wouldn't be able to verify any progress.

What problem are you trying to solve?
I have multiple hardware wallets, and use multiple derivation paths within each hardware wallet. I want to be able to connect each of the hardware wallets/derivation paths to MetaMask and label them appropriately, without them getting deleted.

Describe the solution you'd like
When I connect a new hardware wallet, the previous one doesn't get deleted.

Additional context
Beyond just being able to sign with multiple hardware wallets without having to go through the connect process each time, retaining them with labels means I can transfer assets between them using the MetaMask UI without having to write down the address of each and manually verify. I can just choose destination from my list of wallets.

If you import your hardware wallet key to Coinomi application it will force segwit it and I think it will put them on same derivation path and then you may be able to use all of the wallets.

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__The funding of this issue was increased to 21.0 DAI (21.0 USD @ $1.0/DAI) (plus a crowdfund of 10.0 DAI worth 10.0 USD).__

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__The funding of this issue was increased to 26.0 DAI (26.0 USD @ $1.0/DAI) (plus a crowdfund of 10.0 DAI worth 10.0 USD).__

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__The funding of this issue was increased to 30.0 DAI (30.0 USD @ $1.0/DAI) (plus a crowdfund of 10.0 DAI worth 10.0 USD).__

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__Work has been started__.

These users each claimed they can complete the work by 1聽month, 3聽weeks from now.
Please review their action plans below:

1) furydoge has started work.

You need to make a custom build of MetaMask adjusting the eth-hd-keyring value to support multiple Hardware Wallet Derivations https://github.com/MetaMask/eth-hd-keyring/blob/master/index.js#L8 It's relatively easy to do the README file provides the syntax required and then you can build from source after modifying the keyring values
2) esjhay1993 has started work.

Be more

  1. Cooperative
  2. Productive

Learn more on the Gitcoin Issue Details page.

You need to make a custom build of MetaMask adjusting the eth-hd-keyring value to support multiple Hardware Wallet Derivations https://github.com/MetaMask/eth-hd-keyring/blob/master/index.js#L8 It's relatively easy to do the README file provides the syntax required and then you can build from source after modifying the keyring values in terms of how you name them in MetaMask that should be easy enough to do by just modifying the Wallet's Nickname as needed I doubt the name would change unless the wallet is using a single BIP32 Phrase for every wallet and if they are multiple different Hardware Wallets they would have completely seperated BIP32 Phrases

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__Work for 50.0 DAI (50.0 USD @ $1.0/DAI) has been submitted by__:

  1. @furydoge
  2. @conghieucntt
  3. @conghieucntt

@bakkdoor please take a look at the submitted work:

  • PR by @conghieucntt
  • PR by @conghieucntt
  • PR by @furydoge

Also if you are unaware of how to build the MetaMask Extension here's the guide

Building locally
Install Node.js version 10
If you are using nvm (recommended) running nvm use will automatically choose the right node version for you.
Install Yarn
Install dependencies: yarn
Build the project to the ./dist/ folder with yarn dist.
Optionally, to start a development build (e.g. with logging and file watching) run yarn start instead.
To start the React DevTools and Redux DevTools Extension alongside the app, use yarn start:dev.
React DevTools will open in a separate window; no browser extension is required
Redux DevTools will need to be installed as a browser extension. Open the Redux Remote Devtools to access Redux state logs. This can be done by either right clicking within the web browser to bring up the context menu, expanding the Redux DevTools panel and clicking Open Remote DevTools OR clicking the Redux DevTools extension icon and clicking Open Remote DevTools.
You will also need to check the "Use custom (local) server" checkbox in the Remote DevTools Settings, using the default server configuration (host localhost, port 8000, secure connection checkbox unchecked)
Uncompressed builds can be found in /dist, compressed builds can be found in /builds once they're built.

Just bumping this as a request - this feature would be awesome.

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


__The funding of this issue was increased to 50.0 DAI (50.0 USD @ $1.0/DAI) (plus a crowdfund of 10.0 DAI worth 10.140501 USD).__

Oof one year wait for such a basic feature. MetaMask needs a competitor with a real dev like Andre Cronje that can test in prod and get shit out.

Yeah it seems like it's an obvious feature. It already supports multiple non hardware wallets. is there a tricky complication to this?
@danfinlay if you can lay out how you'd do it being familiar with the codebase I'll implement it.

Like, this is really nuts that you guys haven't sorted this out yet.

My current alternative: Having several web browsers...

When using Chromium/Brave, you can set up multiple browser profiles. Each can have a metamask installation with a specific account. This is currently my way to go.

@marcelo-mason I definitely don't want my metamask software being tested in production.

That said, what's the current status of this? /sparkle

IMO this is basic plumbing work before adding the hottub and high-flow toilet. We shouldn't complain though, as this sw is free. Thx devs. Genuienly.

I agree that there needs to be competition here. Also, a clear-cut path to sustainable cash-flow for development. Integrating heavily with defi would be legit. Slick access to zero-day defi stuff, new projects, every week, proper tracking of defi and LP resources... I would be ok constantly sending pennies to the wallet team. But in order to do that stuff, you need the basic plumbing.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dpazdan picture dpazdan  路  3Comments

aakilfernandes picture aakilfernandes  路  3Comments

MarkOSullivan94 picture MarkOSullivan94  路  3Comments

BassBauman picture BassBauman  路  3Comments

danfinlay picture danfinlay  路  3Comments