Skip to content
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

Private key JSON import #3177

Merged
merged 13 commits into from
Apr 5, 2023
Merged

Private key JSON import #3177

merged 13 commits into from
Apr 5, 2023

Conversation

jagodarybacka
Copy link
Contributor

@jagodarybacka jagodarybacka commented Mar 17, 2023

What

This PR introduces importing accounts with JSON files (keystore files). In this PR there is a new tab next to the plain text private key import tab, for importing private keys with JSON files.

Testing

  1. To test this feature you need a JSON keystore file. If you don't have one you can generate a new wallet on MyEtherWallet website.
  2. Install the wallet with the build from this PR
  3. Select private key option on onboarding
  4. Put your file and its password, submit and wait a few seconds for the import
  5. Your account should be visible in the extension

Conclusions for the spike

Findings:

  • There was a problem finding even one user-facing wallet that allows export account as a JSON file - this format is no longer popular and I was able to identify only one interface that allowed me to create such a file. I couldn't find any software that allows exporting existing wallets as JSON.
  • Some wallets are considering JSON format legacy and unsafe. MyEtherWallet even supporting JSON wallet creation on the website is not allowing to import it to their mobile app and they have a big warning about it not being safe to do.
  • Once I had the JSON file the implementation of this feature was easy and straight-forward

I see not much harm in having an import feature, I think it will be nice to have but much less used than plain text private keys. For sure we shouldn't bother implementing JSON export feature.

Demo

Screen.Recording.2023-03-30.at.18.30.11.mov

Latest build: extension-builds-3177 (as of Tue, 04 Apr 2023 10:40:41 GMT).

Proof of concept of importing accounts with JSON file.
@jagodarybacka jagodarybacka self-assigned this Mar 17, 2023
Add tabs so both text private key input and
JSON file input can be handled there
Create new file input component and use it on
the private key JSON import page
Show feedback on file that has been uploaded to file input component.
Base automatically changed from pk-import-on-onboarding to keyring-with-pk April 4, 2023 09:24
@jagodarybacka jagodarybacka marked this pull request as ready for review April 4, 2023 11:00
@jagodarybacka jagodarybacka requested a review from a team as a code owner April 4, 2023 11:00
Copy link
Contributor

@0xDaedalus 0xDaedalus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bravo 🎉 📈

@0xDaedalus 0xDaedalus merged commit 51eda44 into keyring-with-pk Apr 5, 2023
@0xDaedalus 0xDaedalus deleted the pk-json-import branch April 5, 2023 01:49
Shadowfiend added a commit that referenced this pull request Jul 7, 2023
### About this PR
This PR will contain all changes for features:
- [x] allow importing private keys in the keyring service (initial scope
of this PR)
- [x] import private keys with plain text
(#3119)
- [x] import private keys with JSON
(#3177)
- [x] backup account with mnemonic and private key export
(#3252)
---

## Initial scope 
Resolves #3070

### What

Handle importing wallets with private keys in the keyring service:
* save pk imported accounts in the encrypted vault
* handle serialization and deserialization of pk imported wallets
* handle signing messages with both keyrings and pk wallets
* handle communication between service and redux store about pk wallets
* fix types and field names in the redux store

Cleanup and add more tests:
- move existing keyring integration tests to the right folder
- write more unit tests to cover private key imported wallets
- cleanup some duplicated tests
- add util functions to the test's `factories`
- add function to mock local storage

### Testing
- make sure unit tests and E2E are passing
- test manually adding accounts and signing transactions

Latest build:
[extension-builds-3089](https://github.com/tahowallet/extension/suites/14105826655/artifacts/789186059)
(as of Thu, 06 Jul 2023 12:56:07 GMT).
@kkosiorowska kkosiorowska mentioned this pull request Jul 13, 2023
kkosiorowska pushed a commit that referenced this pull request Jul 14, 2023
## What's Changed
* Add private key onboarding flow by @jagodarybacka in
#3119
* Private key JSON import by @jagodarybacka in
#3177
* Allow export of private keys and mnemonics by @jagodarybacka in
#3248
* Export private key form by @jagodarybacka in
#3255
* Unlock screen for the account backup by @kkosiorowska in
#3257
* Show mnemonic menu by @jagodarybacka in
#3259
* Fix background blur issue by @jagodarybacka in
#3265
* Account backup UI fixes by @jagodarybacka in
#3270
* Fix unhiding removed accounts by @jagodarybacka in
#3282
* New error for incorrectly decrypted JSON file by @jagodarybacka in
#3293
* Export private keys from HD wallet addresses by @jagodarybacka in
#3253
* Refactor keyring redux slice to remove `importing` field by
@jagodarybacka in #3309
* 📚 Accounts backup by @kkosiorowska in
#3252
* Catch Enter keypress on Unlock screen by @jagodarybacka in
#3355
* Rename `keyring` to `internal signer` and other improvements by
@jagodarybacka in #3331
* 🗝 QA - Accounts backup and private key import by @jagodarybacka in
#3266
* Remove private key signers if they are replaced by accounts from HD
wallet by @jagodarybacka in
#3377
* RFB 4: One-Off Keyring Design by @Shadowfiend in
#3372
* Copy to clipboard warning by @kkosiorowska in
#3488
* Allow setting custom auto-lock timer by @hyphenized in
#3477
* Use Argon2 for encrypted vaults by @jagodarybacka in
#3502
* 👑 Private keys import and accounts backup by @jagodarybacka in
#3089
* Untrusted assets should not block the addition of custom tokens by
@kkosiorowska in #3491
* Flip updated dApp connections flag by @Shadowfiend in
#3492
* v0.41.0 by @Shadowfiend in
#3531
* Switch to a given network if adding a network that is already added.
by @0xDaedalus in #3154
* Remove waiting for Loading Doggo component in E2E tests by
@jagodarybacka in #3541
* Squeeze content to better fit on Swaps page by @jagodarybacka in
#3542
* Refactor of terms for verified/unverified assets by @kkosiorowska in
#3528
* Fix ChainList styling by @fulldecent in
#3547
* Update release checklist by @jagodarybacka in
#3548
* Fix custom asset price fetching by @hyphenized in
#3508
* Sticky Defaults: Make Taho-as-default replace MetaMask in almost all
cases by @Shadowfiend in
#3546

## New Contributors
* @fulldecent made their first contribution in
#3547

**Full Changelog**:
v0.41.0...v0.42.0

Latest build:
[extension-builds-3549](https://github.com/tahowallet/extension/suites/14268975651/artifacts/801826435)
(as of Thu, 13 Jul 2023 09:51:56 GMT).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants