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
886 stars 364 forks source link

Generate & Easily Restore Temporary Wallets for Privacy #4266

Closed trymeouteh closed 2 years ago

trymeouteh commented 2 years ago

To make privacy easier in Unstoppable Wallet when using non-private cryptos (Which are most cryptos out there) I would like to suggest the ability to easily create new wallets within a wallet. There are a few ways this could be done but I think this is the best and most user friendly approach

How it works

Lets say you have two wallets...

Inside "Wallet 1" and "Wallet 2" you have Bitcoin for enabled coins. On any coin you can generate a new subwallet, select a subwallet or browse subwallets. Subwallets will use the 12/24 word phrase but have a passphrase which will be the date and time of the subwallet creation.

I am not sure if there is a length limit on passphrases, if there is a limit should be set in Unstoppable Wallet when you create or restore a wallet. If Unstoppable Wallet detects your passphrase to be too long when your creating and restoring your wallet, it will have a warning message saying "Your passphrase needs to be less than ## characters long in order to be able to use the subwallets feature". If your passphrase for your wallet is too long the subwallet feature will not be available for your wallet.

When you browse your subwallets for a certain coin you have these options on managing subwallets.

Subwallet Files

In the apps setting you will choose a directory on the device on where subwallets data will be stored. And this directory will save the subwallets for each wallet.

Subwallet File Contents

This is what a wallet txt file will look like. In the example below it first has the subwallet date and time which is the passphrase. the subwallet name/label and then it labels what coins the subwallet is for.

2021-09-22-17-24-39 "McDonands, 12 Street New York" BTC
2021-09-23-22-11-56 "KFC"   DASH

Also the wallet.txt files could be encrypted using the wallets 12/24 word phrase as the encrypted password of the file to prevent other apps from reading it and preventing others from read the plain text of the file.

Import/Export

In the app settings you will also be able to import/export your subwallets for a certain wallet. This can allow one to export a plain text version or a encrypted version of the file which will require the 12/24 word phrase to read the file. This will be needed to backup and restore subwallets when switching to another device.

Third Party Backups/Syncing

Another important feature to this will be syncing/backups of the subwallets. I strongly suggest having a directory that the user can choose where the subwallet files are stored which gives the users options on how to backup the wallet files. The user can setup their cloud storage app such as Nextcloud, FileN, etc to do automatic backups of their subwallet files. Users can also use Syncthing to backup and sync the subwallet files between devices.

Unstoppable Wallet Syncing

Unstoppable Wallet could also implement a syncing feature within their app which will sync their subwallet files between devices. If Unstoppable Wallet does add this feature I will highly suggest it is P2P with no subwallets being stored on any servers and the connection during the syncing process is E2EE.

Syncing will be optional and the settings for syncing will be the following...

It should never have any conflicts with the date and time passphrase, there maybe conflicts with the subwallet names which may need a way to be managed.

Conclusion

This is a big feature request but a powerful one for any crypto wallet. Unstoppable Wallet is the best fully open source wallet on the market and the best crypto wallet on F-Droid for degoogled users to have access to and enjoy. Most cryptocurrencies are not private due to the traceability of the coins on the transparent blockchains. This feature when used will allow users to use transparent non-private cryptos such as Bitcoin, Litecoin, Ethereum, etc with privacy. To transfer your coins from your main Bitcoin wallet to one of your Bitcoin subwallets, you do not just send it from "Wallet 1" Bitcoin main to "Wallet 1" Bitcoin subwallet, you swap from "Wallet 1" Bitcoin to a privacy coin like Monero and then swap Monero to "Wallet 1" Bitcoin subwallet and then send it out from there.

This feature would benefit with more privacy coins being added to Unstoppable wallet such as Monero and having swaps within the app that support all coins to be exchanged for privacy coins and vice-verse.

This feature also shares many similarities to the Offline Transaction Notes. If the Offline Transaction Notes comes to be, it would be amazing to also have offline transaction notes for subwallet transactions. https://github.com/horizontalsystems/unstoppable-wallet-android/issues/3301

trymeouteh commented 2 years ago

This is a better way to achieve this, no need for date-time passphrases. Instead by using coin control and the derivided path you can achieve the same thing.

https://github.com/horizontalsystems/unstoppable-wallet-android/issues/4538