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

Wallet: create account using recovery phrase #19702

Merged
merged 11 commits into from
Apr 26, 2024
Merged

Conversation

OmarBasem
Copy link
Contributor

@OmarBasem OmarBasem commented Apr 18, 2024

fixes: #19514

Summary:

This PR implements recovering a keypair using recovery phrase and creating a wallet account from that keypair.

The enter-seed-phrase screen inside onboarding moved it to a common namespace to be used for both of wallet and onboarding recovery.


Designs

For QA testing, areas that may be impacted:

  • Onboarding: recovery phrase

Demo:

Screen_Recording_20240418_112738_Status.mp4

(ns status-im.contexts.onboarding.enter-seed-phrase.view
(ns status-im.common.enter-seed-phrase.view
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved enter-seed-phrase to be in a common namespace

Comment on lines 23 to 25
{:icon :i/keycard-card
:accessibility-label :import-from-keycard
:label (i18n/label :t/import-from-keycard)}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Not used in MVP

@status-im-auto
Copy link
Member

status-im-auto commented Apr 18, 2024

Jenkins Builds

Click to see older builds (25)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ c9d4a94 #1 2024-04-18 07:41:03 ~4 min tests 📄log
✔️ c9d4a94 #1 2024-04-18 07:42:33 ~6 min android-e2e 🤖apk 📲
✔️ ce5d5a2 #2 2024-04-18 07:47:17 ~4 min tests 📄log
✔️ ce5d5a2 #2 2024-04-18 07:48:48 ~5 min android-e2e 🤖apk 📲
707d5f3 #3 2024-04-18 07:51:55 ~2 min tests 📄log
✔️ 707d5f3 #3 2024-04-18 07:55:16 ~6 min android 🤖apk 📲
✔️ 707d5f3 #3 2024-04-18 07:57:35 ~8 min android-e2e 🤖apk 📲
✔️ 707d5f3 #3 2024-04-18 07:57:59 ~8 min ios 📱ipa 📲
4aee51a #4 2024-04-18 18:20:42 ~3 min tests 📄log
✔️ 4aee51a #4 2024-04-18 18:24:59 ~7 min android 🤖apk 📲
✔️ 4aee51a #4 2024-04-18 18:25:01 ~7 min android-e2e 🤖apk 📲
✔️ 4aee51a #4 2024-04-18 18:27:04 ~9 min ios 📱ipa 📲
✔️ ce4f670 #5 2024-04-18 18:32:14 ~5 min tests 📄log
✔️ ce4f670 #5 2024-04-18 18:35:13 ~8 min android 🤖apk 📲
✔️ ce4f670 #5 2024-04-18 18:35:17 ~8 min android-e2e 🤖apk 📲
✔️ ce4f670 #5 2024-04-18 18:36:26 ~9 min ios 📱ipa 📲
e6e1449 #6 2024-04-25 08:00:59 ~2 min tests 📄log
0cf9d07 #7 2024-04-25 08:05:58 ~3 min tests 📄log
✔️ 0cf9d07 #7 2024-04-25 08:08:45 ~6 min android 🤖apk 📲
✔️ 0cf9d07 #7 2024-04-25 08:09:48 ~7 min android-e2e 🤖apk 📲
✔️ 0cf9d07 #7 2024-04-25 08:11:21 ~8 min ios 📱ipa 📲
4cde270 #8 2024-04-25 12:34:54 ~2 min tests 📄log
✔️ 4cde270 #8 2024-04-25 12:38:19 ~5 min android 🤖apk 📲
✔️ 4cde270 #8 2024-04-25 12:38:58 ~6 min android-e2e 🤖apk 📲
✔️ 4cde270 #8 2024-04-25 12:42:12 ~9 min ios 📱ipa 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
cfbb480 #9 2024-04-25 14:14:53 ~2 min tests 📄log
✔️ cfbb480 #9 2024-04-25 14:17:53 ~5 min android-e2e 🤖apk 📲
✔️ cfbb480 #9 2024-04-25 14:18:54 ~6 min android 🤖apk 📲
✔️ cfbb480 #9 2024-04-25 14:20:29 ~8 min ios 📱ipa 📲
4dc2250 #10 2024-04-26 07:24:41 ~3 min tests 📄log
✔️ 4dc2250 #10 2024-04-26 07:27:57 ~6 min android 🤖apk 📲
✔️ 4dc2250 #10 2024-04-26 07:28:03 ~6 min android-e2e 🤖apk 📲
✔️ 4dc2250 #10 2024-04-26 07:30:36 ~9 min ios 📱ipa 📲
✔️ 4dc2250 #11 2024-04-26 07:32:39 ~3 min tests 📄log

Copy link
Member

@briansztamfater briansztamfater left a comment

Choose a reason for hiding this comment

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

LGTM

:text suggestions-text
:words (keyboard-suggestions last-word)
:on-press pick-suggested-word}]])])
(finally
(.remove keyboard-show-listener)
(.remove keyboard-hide-listener))))

(defn enter-seed-phrase
(defn view
Copy link
Contributor

Choose a reason for hiding this comment

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

🙌

@@ -37,6 +37,15 @@
effects (events/new-keypair-continue {:db db} props)]
(is (match? effects {:fx expected-effects}))))

(deftest seed-phrase-entered-test
Copy link
Contributor

Choose a reason for hiding this comment

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

🙏

@@ -8,7 +8,9 @@
:effects.wallet/create-account-from-mnemonic
(fn [{:keys [secret-phrase keypair-name]}]
(native-module/create-account-from-mnemonic
{:MnemonicPhrase (string/join " " secret-phrase)}
{:MnemonicPhrase (if (string? secret-phrase)
Copy link
Contributor

Choose a reason for hiding this comment

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

should we make this safer? 🤔
i.e if it's a string do this, if it's a vector use string/join and otherwise return an empty string/nil? 🤔

Copy link
Contributor Author

@OmarBasem OmarBasem Apr 18, 2024

Choose a reason for hiding this comment

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

@J-Son89 But we shouldn't get to that point with an empty string. It will be of no use and the status-go call will fail. So probably better to make it fail earlier?

Copy link
Contributor

Choose a reason for hiding this comment

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

tbh, I'm not sure. Just flaggin this to be careful. Whatever you think is best! 🙏

Copy link
Contributor

@J-Son89 J-Son89 left a comment

Choose a reason for hiding this comment

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

some minor details that would be good to address.

Otherwise looks great, nice one @OmarBasem! 🚀

@status-im-auto
Copy link
Member

96% of end-end tests have passed

Total executed tests: 52
Failed tests: 0
Expected to fail tests: 2
Passed tests: 50
IDs of expected to fail tests: 703495,703503 

Expected to fail tests (2)

Click to expand

Class TestCommunityOneDeviceMerged:

1. test_community_discovery, id: 703503
Test is not run, e2e blocker  

[[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

Class TestGroupChatMultipleDeviceMergedNewUI:

1. test_group_chat_mute_chat, id: 703495

# STEP: Change device time so chat will be unmuted by timer
Device 2: Long press on ChatElement

critical/chats/test_group_chat.py:464: in test_group_chat_mute_chat
    self.errors.verify_no_errors()
base_test_case.py:190: in verify_no_errors
    pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
 Chat is still muted after timeout 

[[Chat is not unmuted after expected time: https://github.com//issues/19627]]

Device sessions

Passed tests (50)

Click to expand

Class TestWalletMultipleDevice:

1. test_wallet_send_asset_from_drawer, id: 727230
2. test_wallet_send_eth, id: 727229

Class TestOneToOneChatMultipleSharedDevicesNewUi:

1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
Device sessions

2. test_1_1_chat_text_message_delete_push_disappear, id: 702733
Device sessions

3. test_1_1_chat_push_emoji, id: 702813
Device sessions

4. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
Device sessions

5. test_1_1_chat_edit_message, id: 702855
Device sessions

6. test_1_1_chat_send_image_save_and_share, id: 703391
Device sessions

7. test_1_1_chat_pin_messages, id: 702731
Device sessions

8. test_1_1_chat_message_reaction, id: 702730
Device sessions

Class TestCommunityOneDeviceMerged:

1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
Device sessions

2. test_community_copy_and_paste_message_in_chat_input, id: 702742
Device sessions

3. test_community_undo_delete_message, id: 702869
Device sessions

4. test_community_navigate_to_channel_when_relaunch, id: 702846
Device sessions

5. test_community_mute_community_and_channel, id: 703382
Device sessions

Class TestCommunityMultipleDeviceMergedTwo:

1. test_community_markdown_support, id: 702809
Device sessions

2. test_community_hashtag_links_to_community_channels, id: 702948
Device sessions

3. test_community_mentions_push_notification, id: 702786
Device sessions

4. test_community_leave, id: 702845
Device sessions

5. test_community_join_when_node_owner_offline, id: 703629
Device sessions

Class TestGroupChatMultipleDeviceMergedNewUI:

1. test_group_chat_pin_messages, id: 702732
Device sessions

2. test_group_chat_send_image_save_and_share, id: 703297
Device sessions

3. test_group_chat_reactions, id: 703202
Device sessions

4. test_group_chat_join_send_text_messages_push, id: 702807
Device sessions

5. test_group_chat_offline_pn, id: 702808
Device sessions

Class TestWalletOneDevice:

1. test_wallet_add_remove_regular_account, id: 727231
Device sessions

2. test_wallet_add_remove_watch_only_account, id: 727232
Device sessions

Class TestActivityMultipleDevicePR:

1. test_navigation_jump_to, id: 702936
Device sessions

2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
Device sessions

Class TestDeepLinksOneDevice:

1. test_links_open_universal_links_from_chat, id: 704613
Device sessions

2. test_links_deep_links, id: 702775
Device sessions

Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
Device sessions

2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
Device sessions

3. test_1_1_chat_mute_chat, id: 703496
Device sessions

Class TestActivityCenterContactRequestMultipleDevicePR:

1. test_add_contact_field_validation, id: 702777
Device sessions

2. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
Device sessions

3. test_activity_center_contact_request_decline, id: 702850
Device sessions

Class TestCommunityMultipleDeviceMerged:

1. test_community_several_images_send_reply, id: 703194
Device sessions

2. test_community_one_image_send_reply, id: 702859
Device sessions

3. test_community_emoji_send_copy_paste_reply, id: 702840
Device sessions

4. test_community_mark_all_messages_as_read, id: 703086
Device sessions

5. test_community_contact_block_unblock_offline, id: 702894
Device sessions

6. test_community_edit_delete_message_when_offline, id: 704615
Device sessions

7. test_community_message_delete, id: 702839
Device sessions

8. test_community_message_send_check_timestamps_sender_username, id: 702838
Device sessions

9. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
Device sessions

10. test_community_message_edit, id: 702843
Device sessions

11. test_community_unread_messages_badge, id: 702841
Device sessions

Class TestActivityMultipleDevicePRTwo:

1. test_activity_center_mentions, id: 702957
Device sessions

2. test_activity_center_admin_notification_accept_swipe, id: 702958
Device sessions

@VolodLytvynenko VolodLytvynenko self-assigned this Apr 22, 2024
@VolodLytvynenko
Copy link
Contributor

Hi @OmarBasem . Thank you for PR. Take a look found issues:

PR_ISSUE 1: Users are able to add an account using an invalid seed phrase when 18 or 24 random valid words are entered

Steps:

  1. Go to 'Use recovery phrase' page
  2. Enter 18 or 24 random valid words (example: general general general general general general general general general general general general general general general general general general general general general general general general)

Actual result:

The account is successfully added, even though the seed phrase is invalid.

Expected result:

Potential solution:

  • Implement validation for seed phrases entered when adding an account
    image

Let's see what design team can reply
https://discord.com/channels/624634427930312714/852533718790570015/1231952024321396776

OS:

IOS, Android

Devices:

  • Pixel 7a, Android 13
  • iPhone 11 Pro Max, IOS 17

@VolodLytvynenko
Copy link
Contributor

PR_ISSUE 2: The key pair field requires 6 words instead of 5 and the validation message "Key pair name must be at least 5 characters" is not displayed in case if less than 5 chars entered

Steps:

  1. Go to key pair screen
  2. Enter 5 valid chars

Actual result:

  • Key pair creation can't be confirmed if key pair name with 5 valid characters is eneted.
  • The validation message "Key pair name must be at least 5 characters" is not displayed when less than 5 characters are entered.
    image

Expected result:

OS:

IOS, Android

Devices:

  • Pixel 7a, Android 13
  • iPhone 11 Pro Max, IOS 17

@VolodLytvynenko
Copy link
Contributor

PR_ISSUE 3: The color of the 'continue' button does not inherit the color of the account

Steps:

  1. Set up a particular color picker for the account
  2. Go to 'Use recovery phrase' page

Actual result:

The 'continue' button does not inherit the color of the account
image

Expected result:

The 'continue' button inherits the color of the account

OS:

IOS, Android

Devices:

  • Pixel 7a, Android 13
  • iPhone 11 Pro Max, IOS 17

@status-im-auto
Copy link
Member

90% of end-end tests have passed

Total executed tests: 52
Failed tests: 3
Expected to fail tests: 2
Passed tests: 47
IDs of failed tests: 727230,727229,703202 
IDs of expected to fail tests: 703495,703503 

Failed tests (3)

Click to expand
  • Rerun failed tests

  • Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_reactions, id: 703202

    Device 1: Find `Button` by `accessibility id`: `authors-for-reaction-5`
    Device 1: Tap on found: Button

    critical/chats/test_group_chat.py:211: in test_group_chat_reactions
        self.errors.verify_no_errors()
    base_test_case.py:190: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Incorrect reactions count for user admin after changing the reactions
    



    Device sessions

    Class TestWalletMultipleDevice:

    1. test_wallet_send_asset_from_drawer, id: 727230

    # STEP: Getting ETH amount in the wallet of the sender before transaction
    Device 1: Find WalletTab by accessibility id: wallet-stack-tab

    critical/test_wallet.py:117: in test_wallet_send_asset_from_drawer
        sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
    critical/test_wallet.py:39: in _get_balances_before_tx
        self.wallet_1.wallet_tab.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: WalletTab by accessibility id: `wallet-stack-tab` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    2. test_wallet_send_eth, id: 727229

    Device 1: Swiping right on element SlideButton
    Device 1: Find SlideButton by xpath: //*[@resource-id='slide-button-track']

    critical/test_wallet.py:109: in test_wallet_send_eth
        self.wallet_1.send_asset(address=self.receiver['address'], asset_name='Ether', amount=amount_to_send)
    ../views/wallet_view.py:93: in send_asset
        self.confirm_transaction()
    ../views/wallet_view.py:84: in confirm_transaction
        self.slide_and_confirm_with_password()
    ../views/wallet_view.py:78: in slide_and_confirm_with_password
        self.slide_button_track.slide()
    ../views/base_view.py:257: in slide
        self.swipe_right_on_element(width_percentage=1.3, start_x=100)
    ../views/base_element.py:308: in swipe_right_on_element
        location, size = self.get_element_coordinates()
    ../views/base_element.py:294: in get_element_coordinates
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: SlideButton by xpath: `//*[@resource-id='slide-button-track']` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Expected to fail tests (2)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495

    # STEP: Change device time so chat will be unmuted by timer
    Device 2: Long press on ChatElement

    critical/chats/test_group_chat.py:464: in test_group_chat_mute_chat
        self.errors.verify_no_errors()
    base_test_case.py:190: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Chat is still muted after timeout 
    

    [[Chat is not unmuted after expected time: https://github.com//issues/19627]]

    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (47)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732
    Device sessions

    2. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    3. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    4. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    3. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    4. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    5. test_1_1_chat_edit_message, id: 702855
    Device sessions

    6. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    7. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    8. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    3. test_community_mentions_push_notification, id: 702786
    Device sessions

    4. test_community_leave, id: 702845
    Device sessions

    5. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    6. test_community_edit_delete_message_when_offline, id: 704615
    Device sessions

    7. test_community_message_delete, id: 702839
    Device sessions

    8. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    9. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    10. test_community_message_edit, id: 702843
    Device sessions

    11. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613
    Device sessions

    2. test_links_deep_links, id: 702775
    Device sessions

    Class TestWalletOneDevice:

    1. test_wallet_add_remove_regular_account, id: 727231
    Device sessions

    2. test_wallet_add_remove_watch_only_account, id: 727232
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
    Device sessions

    2. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    3. test_community_undo_delete_message, id: 702869
    Device sessions

    4. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    5. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    3. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    @VolodLytvynenko
    Copy link
    Contributor

    Hi @OmarBasem, thank you for your reply. Could you please check #19702 (comment) if this is not an issue?

    @OmarBasem
    Copy link
    Contributor Author

    Hi @OmarBasem, thank you for your reply. Could you please check #19702 (comment) if this is not an issue?

    @VolodLytvynenko sorry missed the question. The derivation path will work correctly after that issue is fixed.

    @VolodLytvynenko
    Copy link
    Contributor

    Hi @OmarBasem

    Issue 3: It is correct as it is. It should use the profile color (also similar to other buttons in keypair flow)

    I didn't understand you here. Is it correct the buttons are always blue, regardless of the account color that is set up?

    @VolodLytvynenko sorry missed the question. The derivation path will work correctly after that issue is fixed.

    Thank you for the clarification!

    @VolodLytvynenko
    Copy link
    Contributor

    @OmarBasem PR is tested and ready to be merged. Still, some follow-ups are required, which I will create after approval from the design team here

    @OmarBasem
    Copy link
    Contributor Author

    Thanks for your testing @VolodLytvynenko.

    I didn't understand you here. Is it correct the buttons are always blue, regardless of the account color that is set up?

    Yes correct the button color when creating an account depends on the profile color - not the account yet to be created.

    @OmarBasem OmarBasem merged commit 8aa586f into develop Apr 26, 2024
    6 checks passed
    @OmarBasem OmarBasem deleted the wallet/recovery-phrase branch April 26, 2024 07:34
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Wallet: Create Account - Import Using Recovery Phrase
    7 participants