chore(runway): cherry-pick fix: speed up and cancel for qr wallets. cp-7.80.0#31027
Merged
Merged
Conversation
…p-7.80.0 (#30990) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until this PR meets the canonical Definition of Ready For Review in `docs/readme/ready-for-review.md`. In short: the template must be materially complete (not just section titles present), all status checks must be currently passing, and the only expected follow-up commits must be reviewer-driven. --> ## **Description** This PR fixes the speed up and cancel for qr wallets. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix speedup and cancel for qr wallets. ## **Related issues** Fixes: #30939 ## **Manual testing steps** ```gherkin Feature: Speed up and cancel transactions for QR hardware wallet accounts Background: Given a local Ganache network is running with: | Command | npx ganache --wallet.mnemonic 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about' --miner.blockTime 1200 | And the Ganache RPC is available at http://localhost:8545 And Ganache accounts are funded with ETH And the MetaMask mobile app is connected to the local Ganache network via custom network configuration And a QR hardware wallet (Keystone) account is imported and selected in MetaMask Scenario: user speeds up a pending transaction from a QR hardware wallet account Given the user has submitted a transaction from their QR hardware wallet account And the transaction is in "submitted" status (not yet mined) And the user is viewing the transaction details in the transactions list When user taps "Speed up" on the pending transaction And user confirms the suggested gas fee values in the speed up modal Then the QR signing modal is displayed showing a QR code And the user scans the QR code with their Keystone hardware device And the Keystone device signs the speed-up replacement transaction And the user presents the signed result back to MetaMask Then the original transaction is replaced with a new transaction with higher gas And the speed-up transaction is broadcast to the network And the transaction status changes to "submitted" for the replacement transaction Scenario: user cancels a pending transaction from a QR hardware wallet account Given the user has submitted a transaction from their QR hardware wallet account And the transaction is in "submitted" status (not yet mined) And the user is viewing the transaction details in the transactions list When user taps "Cancel" on the pending transaction And user confirms the suggested gas fee values in the cancel modal Then the QR signing modal is displayed showing a QR code And the user scans the QR code with their Keystone hardware device And the Keystone device signs the cancel replacement transaction And the user presents the signed result back to MetaMask Then a cancel transaction (0 ETH to self with higher gas) is broadcast to the network And the original transaction is replaced by the cancel transaction And the transaction status changes to "submitted" for the cancel transaction Scenario: user rejects the QR signature during speed up Given the user has submitted a transaction from their QR hardware wallet account And the transaction is in "submitted" status When user taps "Speed up" on the pending transaction And user confirms the gas fee values in the speed up modal And the QR signing modal is displayed And user taps "Cancel" on the QR signing modal Then the QR signing modal is dismissed And no replacement transaction is created And the original transaction remains in "submitted" status ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/55e7279b-19ec-40d6-94e1-3dcb7cc10c84 https://github.com/user-attachments/assets/31d2a7c4-4fdc-4fde-86c3-4523bed6fb42 ## **Pre-merge author checklist** <!-- Every checklist item must be consciously assessed before marking this PR as "Ready for review". A checked box means you deliberately considered that responsibility, not that you literally performed every action listed. Unchecked boxes are ambiguous: they are not an implicit "N/A" and they are not a silent "skip". See `docs/readme/ready-for-review.md` for the full checklist semantics. --> - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [ ] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [ ] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [ ] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes pending-transaction replacement and gas submission for QR hardware accounts; behavior is aligned with existing Ledger paths and covered by new tests, but mistakes could affect broadcast or user funds timing. > > **Overview** > QR hardware wallets can **speed up** and **cancel** pending transactions the same way Ledger accounts do: after gas confirmation, the app opens the QR signing modal instead of calling the transaction controller directly. > > `QRSigningTransactionModal` now accepts optional `signMode` (`speedup` / `cancel`) and `gasValues`. On open it runs `speedUpTransaction` or `stopTransaction` for those modes, and still uses `ApprovalController.acceptRequest` for normal QR signing. Speed-up/cancel failures show the shared transaction-update error toast; approval failures do not. > > The legacy **Transactions** list and **UnifiedTransactionsView** (`useUnifiedTxActions`) branch on QR keyring accounts and navigate with the new params, then close the gas modal without invoking in-app speed-up/cancel. Tests cover modal error handling and both entry points. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 2b18b8a. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Contributor
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
Contributor
🔍 Smart E2E Test Selection⏭️ Smart E2E selection skipped - PR targets a release or stable branch (release/* or stable) All E2E tests pre-selected. |
owencraston
approved these changes
Jun 3, 2026
sleepytanya
approved these changes
Jun 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR fixes the speed up and cancel for qr wallets.
Changelog
CHANGELOG entry: fix speedup and cancel for qr wallets.
Related issues
Fixes: #30939
Manual testing steps
Screenshots/Recordings
Before
After
Screen_Recording_20260603_184445_MetaMask.mp4
Screen_Recording_20260603_184658_MetaMask.mp4
Pre-merge author checklist
Docs and MetaMask Mobile
Coding
Standards.
if applicable
guidelines).
Not required for external contributors.
Performance checks (if applicable)
SRPs
to import wallets with many accounts and tokens
performance metrics
trace()for usage andaddTokenfor an example
For performance guidelines and tooling, see the Performance
Guide.
Pre-merge reviewer checklist
app, test code being changed).
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
Note
Medium Risk
Changes pending-transaction replacement and gas submission for QR
hardware accounts; behavior is aligned with existing Ledger paths and
covered by new tests, but mistakes could affect broadcast or user funds
timing.
Overview
QR hardware wallets can speed up and cancel pending
transactions the same way Ledger accounts do: after gas confirmation,
the app opens the QR signing modal instead of calling the transaction
controller directly.
QRSigningTransactionModalnow accepts optionalsignMode(speedup/
cancel) andgasValues. On open it runsspeedUpTransactionorstopTransactionfor those modes, and still usesApprovalController.acceptRequestfor normal QR signing.Speed-up/cancel failures show the shared transaction-update error toast;
approval failures do not.
The legacy Transactions list and UnifiedTransactionsView
(
useUnifiedTxActions) branch on QR keyring accounts and navigate withthe new params, then close the gas modal without invoking in-app
speed-up/cancel. Tests cover modal error handling and both entry points.
Reviewed by Cursor Bugbot for commit
2b18b8a. Bugbot is set up for automated
code reviews on this repo. Configure
here.