status-mobile
status-mobile copied to clipboard
Better error handling for wallet transactions + handling of missing signals
Potentially fixes #21735 Fixes #21473 Also improves and simplifies error handling which is required for https://github.com/status-im/status-mobile/issues/22046 as well
Summary
This PR adds missing handing of missing signals and updates processing of a couple of existing signals:
wallet.router.sending-transactions-started(new)wallet.router.transactions-sentwallet.transaction.status-changed(new)
In addition to that, error processing has been simplified and unified with status-desktop — basically all the logic in :wallet/show-transaction-notification is there to match the logic here: https://github.com/status-im/status-desktop/blob/master/src/app/modules/main/module.nim#L445
Potential next steps (to be discussed)
status-desktop goes further and use the same function to display all kinds of transaction-related notifications. Do we do more informative toasts? Do we need to duplicate the logic of indication how the transaction is moving forward?
Functional
- wallet
status: ready
Jenkins Builds
Click to see older builds (39)
| :grey_question: | Commit | :hash: | Finished (UTC) | Duration | Platform | Result |
|---|---|---|---|---|---|---|
| :x: | 6f5a053a | #1 | 2025-02-24 08:33:16 | ~3 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 6f5a053a | #1 | 2025-02-24 08:39:53 | ~9 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 6f5a053a | #1 | 2025-02-24 08:40:37 | ~10 min | ios |
:iphone:ipa :calling: |
| :x: | 358b35ca | #2 | 2025-02-24 10:15:12 | ~2 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 358b35ca | #2 | 2025-02-24 10:20:28 | ~7 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 358b35ca | #2 | 2025-02-24 10:21:19 | ~8 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 358b35ca | #2 | 2025-02-24 10:22:08 | ~9 min | ios |
:iphone:ipa :calling: |
| :x: | 443e88b0 | #3 | 2025-02-24 18:30:49 | ~3 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 443e88b0 | #3 | 2025-02-24 18:35:25 | ~8 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 443e88b0 | #3 | 2025-02-24 18:35:56 | ~8 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 443e88b0 | #3 | 2025-02-24 18:37:03 | ~9 min | ios |
:iphone:ipa :calling: |
| :x: | 7d8041af | #4 | 2025-02-24 20:42:00 | ~2 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 7d8041af | #4 | 2025-02-24 20:46:12 | ~6 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 7d8041af | #4 | 2025-02-24 20:47:36 | ~8 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 7d8041af | #4 | 2025-02-24 20:51:43 | ~12 min | ios |
:iphone:ipa :calling: |
| :x: | b517215f | #6 | 2025-03-03 08:35:37 | ~2 min | tests |
:page_facing_up:log |
| :x: | ac07213b | #7 | 2025-03-03 08:39:34 | ~3 min | tests |
:page_facing_up:log |
| :x: | 95670336 | #8 | 2025-03-03 08:44:35 | ~2 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 95670336 | #8 | 2025-03-03 08:49:14 | ~7 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 95670336 | #8 | 2025-03-03 08:49:50 | ~7 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 95670336 | #8 | 2025-03-03 08:52:14 | ~10 min | ios |
:iphone:ipa :calling: |
| :x: | 263fc45f | #9 | 2025-04-08 20:09:36 | ~4 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 263fc45f | #9 | 2025-04-08 20:13:24 | ~8 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 263fc45f | #9 | 2025-04-08 20:15:17 | ~10 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 263fc45f | #9 | 2025-04-08 20:17:17 | ~12 min | ios |
:iphone:ipa :calling: |
| :x: | ff65daf5 | #10 | 2025-04-10 12:17:02 | ~3 min | tests |
:page_facing_up:log |
| :x: | 73ecaf1b | #11 | 2025-04-10 12:24:17 | ~2 min | tests |
:page_facing_up:log |
| :x: | 99484800 | #12 | 2025-04-10 12:32:29 | ~3 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 99484800 | #12 | 2025-04-10 12:38:14 | ~9 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 99484800 | #12 | 2025-04-10 12:38:48 | ~9 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 99484800 | #12 | 2025-04-10 12:39:11 | ~9 min | ios |
:iphone:ipa :calling: |
| :heavy_check_mark: | 320d0164 | #13 | 2025-04-10 16:12:41 | ~5 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 320d0164 | #13 | 2025-04-10 16:16:35 | ~9 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 320d0164 | #13 | 2025-04-10 16:17:09 | ~9 min | ios |
:iphone:ipa :calling: |
| :heavy_check_mark: | 320d0164 | #13 | 2025-04-10 16:17:18 | ~9 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 8a06a6d5 | #14 | 2025-04-11 07:09:37 | ~4 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | 8a06a6d5 | #14 | 2025-04-11 07:13:10 | ~8 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | 8a06a6d5 | #14 | 2025-04-11 07:13:43 | ~8 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | 8a06a6d5 | #14 | 2025-04-11 07:15:26 | ~10 min | ios |
:iphone:ipa :calling: |
| :grey_question: | Commit | :hash: | Finished (UTC) | Duration | Platform | Result |
|---|---|---|---|---|---|---|
| :heavy_check_mark: | f7410e92 | #15 | 2025-04-15 13:24:52 | ~6 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | f7410e92 | #15 | 2025-04-15 13:27:19 | ~9 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | f7410e92 | #15 | 2025-04-15 13:28:26 | ~10 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | f7410e92 | #15 | 2025-04-15 13:35:55 | ~17 min | ios |
:iphone:ipa :calling: |
| :x: | f0e5a6cf | #16 | 2025-05-19 08:29:42 | ~3 min | tests |
:page_facing_up:log |
| :heavy_check_mark: | f0e5a6cf | #16 | 2025-05-19 08:34:21 | ~7 min | android-e2e |
:robot:apk :calling: |
| :heavy_check_mark: | f0e5a6cf | #16 | 2025-05-19 08:35:30 | ~9 min | android |
:robot:apk :calling: |
| :heavy_check_mark: | f0e5a6cf | #16 | 2025-05-19 08:38:04 | ~11 min | ios |
:iphone:ipa :calling: |
@alwx please, move PR to E2E column once conflicts and review comments are resolved. thanks!
сс @alwx - pinging for visibility, seems this Pr is here for awhile, may we take actions to move it forward?
Thanks!
@churik sure, just other things were more important. Updating it today.
Moving it to E2E tests column (finally)
@alwx thank for the PR. Is it ready for testing? If, yes could you please add request-manual-qa label + rebase PR to the latest develop.
Also, I see tests build is failing. Could you take a look at this as well please?
Thank you.
61% of end-end tests have passed
Total executed tests: 23
Failed tests: 9
Expected to fail tests: 0
Passed tests: 14
IDs of failed tests: 727229,741840,727230,740490,741612,741554,742015,741841,742016
Failed tests (9)
Click to expand
Class TestWalletOneDevice:
| 1. test_wallet_balance_mainnet, id: 740490 |
Device 1: |
| 2. test_wallet_bridge_flow_mainnet, id: 741612 |
Device 1: |
| 3. test_wallet_send_flow_mainnet, id: 741554 |
Device 1: |
Class TestWalletMultipleDevice:
| 1. test_send_eth[Status Network Sepolia-0.0002], id: 727229 |
Device 1: Device 2: |
| 2. test_wallet_send_erc20_from_drawer[Optimism Sepolia-USD Coin-USDC-2-0.01], id: 727230 |
Device 1: Device 2: |
| 3. test_send_eth[Arbitrum Sepolia-0.0001], id: 742015 |
Device 1: Device 2: |
| 4. test_wallet_send_erc20_from_drawer[Sepolia-USD Coin-USDC-2-0.01], id: 742016 |
Device 1: Device 2: |
Class TestWalletCollectibles:
| 1. test_wallet_send_collectible, id: 741840 |
Device 1: |
| 2. test_wallet_collectible_send_from_expanded_info_view, id: 741841 |
Device 1: |
Passed tests (14)
Click to expand
Class TestGroupChatMultipleDeviceMergedNewUI:
| 1. test_group_chat_join_send_text_messages_push, id: 702807 |
| Device sessions Device 1: Device 2: Device 3: |
Class TestProfileMultipleDevices:
| 1. test_profile_change_profile_photo, id: 741969 |
| Device sessions Device 1: Device 2: |
| 2. test_profile_change_username, id: 741968 |
| Device sessions Device 1: Device 2: |
Class TestOneToOneChatMultipleSharedDevicesNewUi:
| 1. test_1_1_chat_send_image_save_and_share, id: 703391 |
| Device sessions Device 1: Device 2: |
| 2. test_1_1_chat_pin_messages, id: 702731 |
| Device sessions Device 1: Device 2: |
| 3. test_1_1_chat_message_reaction, id: 702730 |
| Device sessions Device 1: Device 2: |
Class TestCommunityOneDeviceMerged:
| 1. test_community_copy_and_paste_message_in_chat_input, id: 702742 |
| Device sessions Device 1: |
Class TestWalletCollectibles:
| 1. test_wallet_collectibles_balance, id: 741839 |
| Device sessions Device 1: |
Class TestCommunityMultipleDeviceMerged:
| 1. test_community_message_delete, id: 702839 |
| Device sessions Device 1: Device 2: |
| 2. test_community_message_send_check_timestamps_sender_username, id: 702838 |
| Device sessions Device 1: Device 2: |
| 3. test_community_one_image_send_reply_set_reaction, id: 702859 |
| Device sessions Device 1: Device 2: |
| 4. test_community_message_edit, id: 702843 |
| Device sessions Device 1: Device 2: |
Class TestWalletOneDeviceTwo:
| 1. test_wallet_add_remove_regular_account, id: 727231 |
| Device sessions Device 1: |
Class TestWalletOneDevice:
| 1. test_wallet_swap_flow_mainnet, id: 741555 |
| Device sessions Device 1: |
@alwx could you please expand on how exactly this issue https://github.com/status-im/status-mobile/issues/21473 is fixed, what is the expected result?
User should not face the described error anymore OR this error is handled in some other way?
Same question about https://github.com/status-im/status-mobile/issues/21735 : do you expect that user should not face Route not built randomly problem anymore OR we should show some specific error when routes are not build?
@pavloburykh the thing is when working with external providers we cannot really guarantee that things work 100% of times — sometimes the provider might be unavailable, sometimes you might reach the request limit, etc etc.
But #21473 must be gone, and the whole error handling process was updated so that the errors you might be getting in the process should match those you see on desktop. When it comes to route not being built randomly — it might still happen and there is no way around that (see the beginning of my explanation) but at least you should be able to see the clear reason in logs and the better error description in this case.
78% of end-end tests have passed
Total executed tests: 9
Failed tests: 2
Expected to fail tests: 0
Passed tests: 7
IDs of failed tests: 741840,741841
Failed tests (2)
Click to expand
Class TestWalletCollectibles:
| 1. test_wallet_send_collectible, id: 741840 |
Device 1: |
| 2. test_wallet_collectible_send_from_expanded_info_view, id: 741841 |
Device 1: |
Passed tests (7)
Click to expand
Class TestWalletOneDevice:
| 1. test_wallet_balance_mainnet, id: 740490 |
| Device sessions Device 1: |
| 2. test_wallet_bridge_flow_mainnet, id: 741612 |
| Device sessions Device 1: |
| 3. test_wallet_send_flow_mainnet, id: 741554 |
| Device sessions Device 1: |
Class TestWalletMultipleDevice:
| 1. test_wallet_send_erc20_from_drawer[Sepolia-USD Coin-USDC-2-0.01], id: 742016 |
| Device sessions Device 1: Device 2: |
| 2. test_send_eth[Arbitrum Sepolia-0.0001], id: 742015 |
| Device sessions Device 1: Device 2: |
| 3. test_send_eth[Status Network Sepolia-0.0002], id: 727229 |
| Device sessions Device 1: Device 2: |
| 4. test_wallet_send_erc20_from_drawer[Optimism Sepolia-USD Coin-USDC-2-0.01], id: 727230 |
| Device sessions Device 1: Device 2: |
hi @alwx Thank you for PR. Take a look, this issue still exists
PR_ISSUE 1: Unclear validation messages are shown for unsupported assets for Base on bridge
Steps:
- Attempt to bridge a non-supported token.
- Try the following bridge actions:
- Bridge FROM Base.
- Bridge TO Base.
Actual result:
The validation toast is not clear on the bridge if a non-supported token is used:
"Not available for chainID" is displayed when attempting to bridge FROM Base.
Expected result:
Clear and user-friendly validation messages should be displayed, such as: "Bridging from Base is not supported for this token." "Bridging to Base is not supported for this token.
https://www.figma.com/design/xLs1KYmF4e6WwRTZVJKeUK/Wallet?node-id=10232-108495&t=sVvADfGe0WsbBGA4-1 discussing in https://discord.com/channels/1210237582470807632/1274068685266489434/1335942271274713109
Devices:
- Pixel 7a, Android 15
- iPhone 11 Pro Max, IOS 17
@VolodLytvynenko regarding ISSUE 1: I am not sure we expect this issue https://github.com/status-im/status-mobile/issues/22012 to be fixed by current PR. I do not see this issue in the PR description. Why do you assume it should be fixed? Anyway, @alwx can provide more clarification on this.
Also improves and simplifies error handling which is required for #22046 as well
Hi @alwx, I noticed this in the description of the current PR. Could you confirm if this is an issue that should be fixed in scope of this PR? I understood it to be so
I'm surprised to see this issue in the current PR, as I was sure it wasn’t related to it. However, I'm unable to reproduce it in the latest development, but I can consistently reproduce it on 2 devices across different networks. Could you please take a look
PR_ISSUE 2: Approval transaction is shown before bridge transaction in activity tab
Steps to reproduce:
- Perform a bridge transaction using an ERC-20 asset.
- Open the Activity tab and observe the order of displayed transactions.
Actual result:
The Approval transaction appears first (at the top).
The Bridge transaction appears below the approval transaction.
Expected result:
The Bridge transaction should be shown first at the top as within blockchain
OS:
IOS, Android
Devices:
- Pixel 7a, Android 15
- iPhone 11 Pro Max, IOS 17
Logs
https://drive.google.com/file/d/1eOgxGMnxgljP7VlXI636mPszvZJ5b0xv/view?usp=drive_link