horizontalsystems / unstoppable-wallet-android

A powerful non-custodial multi-wallet for Bitcoin, Ethereum, Binance Smart Chain, Avalanche, Solana and other blockchains. Non-custodial crypto and NFT storage, onchain decentralized exchange, institutional grade analytics for cryptcurrency and NFT markets, extensive privacy controls and human oriented design. Implemented on Kotlin.
https://unstoppable.money
MIT License
879 stars 363 forks source link

Crucial for mass adoption: Addresses derived using the BIP32 Extended Key #5740

Closed OneNewSmartIdea closed 1 year ago

OneNewSmartIdea commented 1 year ago

Derived addresses are a big barrier in the migration of a MetaMask like walllet and it would help a lot for the mass adoption of Unstoppable wallet because users cannot just migrate to new seed phrases if they already have time locked stakes ( ex. HEX token max stake duration is 5555 days, that's about 15 years)

MetaMask uses the same method ( BIP32 Extended Key) as Ian Coleman open source project. https://github.com/iancoleman/bip39 https://iancoleman.io/bip39/

3point14159 commented 1 year ago

Not sure what the issue is here... We have "bip0032 import" implemented as a feature, added recently. Are you asking for an export feature?

OneNewSmartIdea commented 1 year ago

In MetaMask you can create multiple address using the same seed phrase. If you restore your seed phrase later on another device and create again multiple addresses it restores the same addresses as on the other device. I tried to do the same in Unstoppable wallet but it would just create a new seed phrase. Did I miss something?

3point14159 commented 1 year ago

Yes. By restoring, the app should derive all previous addresses, not create new ones. A seedphrase is deterministic and should never change.

One thing I did find, if you have any unintentional spaces or line breaks when importing seed or seed passphrase, that'll alter your deterministic addresses. Make sure there aren't any unintentional characters when imputing. This happened to me. You can use Ian Coleman's generator to verify identical inputs.

OneNewSmartIdea commented 1 year ago

So, if I have in MetaMask one seed phrase from which I use 5 derived addresses (no pass key) and I restore that one seed phrase in Unstoppable wallet the app will verify through the API that the first 5 addresses have assets on them and restore them all ? Every time I interact with a new project I don t expose my old addresses to the contract, instead I create a new derived address (not a different pass key) out from the initial seed phrase and use that to interact with the new contract. All the hardware wallets have this function, MetaMask has this function and people got used with this way of operating. I absolutely love that Unstoppable wallet has the multi seed phrase manager and the pass key but in order for someone to migrate from MetaMask or a hardware wallet we simply cannot do it if we cannot derive at will as many addresses as we need from one single seed phrase. No one will want to manage 20-30 seed phrases or pass keys and have to update at all his locations constantly new seed phrases and pass keys.

ealymbaev commented 1 year ago

Actually Metamask uses single mnemonic phrase and derives multiple indexes from it (m/44'/60'/0'/0/0, m/44'/60'/0'/0/1, m/44'/60'/0'/0/2, etc).

Unstoppable on the other hand does NOT derive any index except m/44'/60'/0'/0/0 for all EVM chains. That is why it does not "handle" all accounts (indexes) form Metamask.

As long as I know all popular wallets (as well as Trust Wallet) use only 0 index for EVM chains, but we can add ability to get use of other indexes as well.

Implementing support for such (non 0) derived indexes is not a deal technically, but it would produce more complex UI as a result. In this case user would have an option to select index manually on restore.

Let us discuss this feature with our team and get back to you soon.

OneNewSmartIdea commented 1 year ago

Great, thank you. You should make the interface in a way that will allow them at any point in time to generate more indexes, not just when they restore it because many people need this feature each time they interact with a new untested contract.

NotMainstream commented 1 year ago

I m also interested of the same function so I can migrate my MetaMask addresses. Any indication on when would this be achievable ? Thank you.

esengulov commented 1 year ago

closing this issue as the takeaway here is that we need metamask specific restore and there is an issue for that already https://github.com/horizontalsystems/unstoppable-wallet-android/issues/5724