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

Feature: Implement import missing key pair by private key #20372

Merged
merged 25 commits into from
Jun 11, 2024

Conversation

seanstrom
Copy link
Member

@seanstrom seanstrom commented Jun 6, 2024

Fixes: #20374

Summary

  • This PR attempts to implement the flow for importing a missing key-pair by using a private key.

Testing notes

  • In order to test these feature, you'll need an account that allows for exporting the private key. During development, this was achieved by using a Metamask account and following their documentation to export/view the private key.

Platforms

  • Android
  • iOS

Areas that maybe impacted

Functional
  • Missing Key Pairs inside Wallet Settings

Steps to test

  • Open the Status mobile app
  • Navigate to the Settings screen
  • Navigate to the Wallet settings screen
  • Navigate to the Key Pairs and Accounts screen
  • Press the "..." button for the missing key-pair based on a private key
  • Press the "Import by entering private key" action button
  • Paste the private key for the key-pair into the Private-Key form
  • Slide the "Slide to import" button
  • Authenticate the action with account password

Before and after screenshots comparison

Screen.Recording.2024-06-07.at.14.52.22.mov

status: WIP

@seanstrom seanstrom self-assigned this Jun 6, 2024
@status-im-auto
Copy link
Member

status-im-auto commented Jun 6, 2024

Jenkins Builds

Click to see older builds (41)
Commit #️⃣ Finished (UTC) Duration Platform Result
39772d3 #1 2024-06-06 09:47:56 ~2 min tests 📄log
✔️ 39772d3 #1 2024-06-06 09:52:53 ~7 min android-e2e 🤖apk 📲
✔️ 39772d3 #1 2024-06-06 09:52:55 ~7 min android 🤖apk 📲
✔️ 39772d3 #1 2024-06-06 09:55:23 ~10 min ios 📱ipa 📲
f7e314d #4 2024-06-07 14:08:06 ~5 min tests 📄log
✔️ f7e314d #4 2024-06-07 14:11:18 ~8 min android-e2e 🤖apk 📲
✔️ f7e314d #4 2024-06-07 14:12:11 ~9 min android 🤖apk 📲
✔️ f7e314d #4 2024-06-07 14:17:47 ~14 min ios 📱ipa 📲
✔️ 0faed26 #5 2024-06-10 10:27:02 ~4 min tests 📄log
✔️ 0faed26 #5 2024-06-10 10:30:50 ~8 min android-e2e 🤖apk 📲
✔️ 0faed26 #5 2024-06-10 10:30:58 ~8 min android 🤖apk 📲
✔️ 0faed26 #5 2024-06-10 10:32:34 ~10 min ios 📱ipa 📲
✔️ a0c29ca #6 2024-06-10 10:41:29 ~4 min tests 📄log
✔️ a0c29ca #6 2024-06-10 10:43:14 ~6 min android-e2e 🤖apk 📲
✔️ a0c29ca #6 2024-06-10 10:44:45 ~7 min android 🤖apk 📲
✔️ a0c29ca #6 2024-06-10 10:45:54 ~8 min ios 📱ipa 📲
57770d0 #7 2024-06-10 12:19:58 ~2 min tests 📄log
✔️ 57770d0 #7 2024-06-10 12:23:40 ~6 min android-e2e 🤖apk 📲
✔️ 57770d0 #7 2024-06-10 12:24:57 ~7 min android 🤖apk 📲
✔️ 57770d0 #7 2024-06-10 12:30:54 ~13 min ios 📱ipa 📲
6deb826 #8 2024-06-10 14:21:05 ~2 min tests 📄log
✔️ 6deb826 #8 2024-06-10 14:25:42 ~7 min android-e2e 🤖apk 📲
✔️ 6deb826 #8 2024-06-10 14:25:44 ~7 min android 🤖apk 📲
✔️ 6deb826 #8 2024-06-10 14:35:23 ~16 min ios 📱ipa 📲
3ac70ba #9 2024-06-10 15:23:07 ~2 min tests 📄log
✔️ 3ac70ba #9 2024-06-10 15:26:34 ~6 min android-e2e 🤖apk 📲
✔️ 3ac70ba #9 2024-06-10 15:27:26 ~7 min android 🤖apk 📲
✔️ 3ac70ba #9 2024-06-10 15:33:26 ~13 min ios 📱ipa 📲
✔️ 3f40866 #10 2024-06-10 16:17:56 ~3 min tests 📄log
✔️ 3f40866 #10 2024-06-10 16:20:04 ~6 min android-e2e 🤖apk 📲
✔️ 3f40866 #10 2024-06-10 16:20:34 ~6 min android 🤖apk 📲
✔️ 3f40866 #10 2024-06-10 16:23:54 ~9 min ios 📱ipa 📲
✔️ 2a3d595 #11 2024-06-11 10:40:29 ~9 min ios 📱ipa 📲
✔️ 2a3d595 #11 2024-06-11 10:42:44 ~11 min tests 📄log
✔️ 2a3d595 #11 2024-06-11 10:43:57 ~12 min android-e2e 🤖apk 📲
✔️ 2a3d595 #11 2024-06-11 10:47:08 ~15 min android 🤖apk 📲
85f16e4 #12 2024-06-11 10:52:33 ~4 min tests 📄log
✔️ 85f16e4 #12 2024-06-11 10:54:33 ~6 min android-e2e 🤖apk 📲
✔️ 85f16e4 #12 2024-06-11 10:57:10 ~8 min android 🤖apk 📲
✔️ 85f16e4 #13 2024-06-11 10:57:19 ~4 min tests 📄log
b3dd08f #15 2024-06-11 11:02:56 ~3 min tests 📄log
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 43fc248 #16 2024-06-11 11:08:56 ~3 min tests 📄log
✔️ 43fc248 #15 2024-06-11 11:12:18 ~7 min android-e2e 🤖apk 📲
✔️ 43fc248 #15 2024-06-11 11:12:23 ~7 min android 🤖apk 📲
✔️ 43fc248 #15 2024-06-11 11:14:46 ~9 min ios 📱ipa 📲
✔️ 8d0ba95 #17 2024-06-11 11:54:40 ~4 min tests 📄log
✔️ 8d0ba95 #16 2024-06-11 11:56:44 ~6 min android 🤖apk 📲
✔️ 8d0ba95 #16 2024-06-11 11:57:37 ~7 min android-e2e 🤖apk 📲
✔️ 8d0ba95 #16 2024-06-11 12:03:25 ~13 min ios 📱ipa 📲

@seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch 2 times, most recently from 02431cc to f7e314d Compare June 7, 2024 14:02
@seanstrom seanstrom requested a review from mohsen-ghafouri June 7, 2024 14:02
@seanstrom seanstrom requested a review from smohamedjavid June 7, 2024 14:03
@seanstrom seanstrom marked this pull request as ready for review June 7, 2024 14:03
Copy link
Member

@smohamedjavid smohamedjavid left a comment

Choose a reason for hiding this comment

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

Nice work 🙌 @seanstrom

src/status_im/contexts/wallet/effects.cljs Outdated Show resolved Hide resolved
src/status_im/contexts/wallet/effects.cljs Outdated Show resolved Hide resolved
src/status_im/navigation/screens.cljs Outdated Show resolved Hide resolved
src/status_im/contexts/settings/wallet/events.cljs Outdated Show resolved Hide resolved
src/status_im/contexts/settings/wallet/events.cljs Outdated Show resolved Hide resolved
@seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch from f7e314d to 0faed26 Compare June 10, 2024 10:21
src/utils/re_frame.cljs Outdated Show resolved Hide resolved
@seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch from 0faed26 to a0c29ca Compare June 10, 2024 10:36
src/utils/re_frame.cljs Outdated Show resolved Hide resolved
Copy link
Contributor

@mohsen-ghafouri mohsen-ghafouri left a comment

Choose a reason for hiding this comment

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

Well done

@seanstrom seanstrom requested a review from smohamedjavid June 10, 2024 15:33
Copy link
Contributor

@ilmotta ilmotta left a comment

Choose a reason for hiding this comment

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

🚀 🚀

(native-module/create-account-from-private-key)
(promesa/then (fn [result]
(let [{:keys [address emojiHash keyUid
publicKey privateKey]} (transforms/json->clj result)]
Copy link
Contributor

Choose a reason for hiding this comment

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

When dealing with primitive values (these are all strings?), it's a bit better to use oops/oget and then we can skip the json->clj transformation here.

Copy link
Member

@smohamedjavid smohamedjavid left a comment

Choose a reason for hiding this comment

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

🚀

Comment on lines +263 to +264
operable-key-pair-ids (->> (concat (:fully grouped-keypairs)
(:partially grouped-keypairs))
Copy link
Member

Choose a reason for hiding this comment

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

❤️

@seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch from 3ac70ba to 3f40866 Compare June 10, 2024 16:13
@status-im-auto
Copy link
Member

88% of end-end tests have passed

Total executed tests: 51
Failed tests: 2
Expected to fail tests: 4
Passed tests: 45
Not executed tests: 1
IDs of not executed tests: 702936 
IDs of failed tests: 727230,727229 
IDs of expected to fail tests: 703495,702948,727232,703629 

Not executed tests (1)

Click to expand
  • Rerun not executed tests
  • Failed tests (2)

    Click to expand
  • Rerun failed tests

  • 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:120: 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:41: 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: Tap on found: LogInButton
    Device 1: Find Button by accessibility id: done

    critical/test_wallet.py:111: 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:100: in send_asset
        self.confirm_transaction()
    ../views/wallet_view.py:88: in confirm_transaction
        self.done_button.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by accessibility id: `done` 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 (4)

    Click to expand

    Class TestWalletOneDevice:

    1. test_wallet_add_remove_watch_only_account, id: 727232

    Device 1: Text is 0x8d2413447ff297d30bdc475f6d5cb00254685aae
    Device 1: Click system back button

    critical/test_wallet.py:214: in test_wallet_add_remove_watch_only_account
        self.home_view.driver.fail(
    base_test_case.py:178: in fail
        pytest.fail('Device %s: %s' % (self.number, text))
     Device 1: Incorrect address '0x8d2413447ff297d30bdc475f6d5cb00254685aae' is shown when swiping between accounts, expected one is '0x8d2413447ff297d30bdc475f6d5cb00254685aae' 
    

    [[Missing networks in account address, https://github.com//issues/20166]]

    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_hashtag_links_to_community_channels, id: 702948

    Device 2: Find Text by xpath: //android.view.ViewGroup[@content-desc='chat-item']//android.widget.TextView[contains(@text,'#cats')]
    Device 2: Looking for a message by text: it is just a message text

    critical/chats/test_public_chat_browsing.py:1124: in test_community_hashtag_links_to_community_channels
        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))]))
     Message in community channel is not visible for user before join 
    

    [[Can't enter channel after community is fetched for the first time, https://github.com//issues/20395]]

    Device sessions

    2. test_community_join_when_node_owner_offline, id: 703629

    Device 2: Looking for community: 'open community'
    Device 2: Click until Text by accessibility id: community-description-text will be presented

    critical/chats/test_public_chat_browsing.py:1212: in test_community_join_when_node_owner_offline
        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))]))
     Message in community channel is not visible for user before join, it was indicated as not sent for the sender before he went offline 
    

    [[Can't enter channel after community is fetched for the first time, https://github.com//issues/20395]]

    Device sessions

    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:497: 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 (45)

    Click to expand

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_mentions_push_notification, id: 702786
    Device sessions

    3. test_community_leave, id: 702845
    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_discovery, id: 703503
    Device sessions

    4. test_community_undo_delete_message, id: 702869
    Device sessions

    5. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    6. test_community_mute_community_and_channel, id: 703382
    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 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 TestWalletOneDevice:

    1. test_wallet_add_remove_regular_account, id: 727231
    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 TestActivityMultipleDevicePR:

    1. 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 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 TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    @seanstrom
    Copy link
    Member Author

    @status-im/mobile-qa Can you review these E2E results please?

    @pavloburykh
    Copy link
    Contributor

    @status-im/mobile-qa Can you review these E2E results please?

    @seanstrom thanks for the PR. Failed e2e are not PR related. Ready for merge.

    @seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch 3 times, most recently from 413396e to b3dd08f Compare June 11, 2024 10:59
    @seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch from b3dd08f to 43fc248 Compare June 11, 2024 11:04
    @seanstrom seanstrom force-pushed the seanstrom/import-keypair-private-key branch from 43fc248 to 8d0ba95 Compare June 11, 2024 11:49
    @seanstrom seanstrom merged commit 6a7f04a into develop Jun 11, 2024
    6 checks passed
    @seanstrom seanstrom deleted the seanstrom/import-keypair-private-key branch June 11, 2024 12:05
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    Development

    Successfully merging this pull request may close these issues.

    Import missing key pair by entering private key inside wallet settings
    6 participants