Skip to content

fix(ramps): fixes quote race condition bug with missing payment method#7863

Merged
georgeweiler merged 3 commits intomainfrom
ramps-payment-method-bugfix
Feb 9, 2026
Merged

fix(ramps): fixes quote race condition bug with missing payment method#7863
georgeweiler merged 3 commits intomainfrom
ramps-payment-method-bugfix

Conversation

@georgeweiler
Copy link
Contributor

@georgeweiler georgeweiler commented Feb 7, 2026

Explanation

When switching the selected ramp token (e.g. ETH → BNB), the controller clears the selected payment method and refetches payment methods for the new token. The UI can still call startQuotePolling() in that window (e.g. from a useEffect that hasn’t re-run with the updated state), so the controller saw no payment method and threw.

FIX:

In startQuotePolling(), if there is no selected payment method, return early instead of throwing. Polling will start once payment methods are loaded and the UI calls again. Region, token, and provider still throw when missing, since they aren’t cleared then refetched on switch.

References

Screenshot 2026-02-07 at 3 08 03 PM

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Low Risk
Small behavior change limited to quote polling startup error handling; main risk is silently not starting polling if callers don’t retry once a payment method is selected.

Overview
Prevents a quote-polling race when switching tokens/providers by changing startQuotePolling() to return early (instead of throwing) if no payment method is currently selected.

Updates the associated unit test to assert non-throwing behavior, and records the fix in the ramps-controller changelog under Unreleased.

Written by Cursor Bugbot for commit 67672d9. This will update automatically on new commits. Configure here.

@georgeweiler georgeweiler requested a review from a team as a code owner February 7, 2026 22:09
@georgeweiler georgeweiler requested a review from a team as a code owner February 9, 2026 11:11
@georgeweiler georgeweiler added this pull request to the merge queue Feb 9, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Feb 9, 2026
@georgeweiler georgeweiler added this pull request to the merge queue Feb 9, 2026
Merged via the queue into main with commit a5e02ba Feb 9, 2026
302 checks passed
@georgeweiler georgeweiler deleted the ramps-payment-method-bugfix branch February 9, 2026 17:29
github-merge-queue bot pushed a commit to MetaMask/metamask-mobile that referenced this pull request Feb 10, 2026
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Fixes a bug with payment method selection in the feature flagged unified
buy V2 feature. Related core PR:
MetaMask/core#7863

<!--
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: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [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.

## **Pre-merge reviewer checklist**

- [ ] 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]
> **Low Risk**
> Dependency-only version bump with no direct application code changes;
risk is limited to behavioral differences introduced by
`@metamask/ramps-controller@7.1.0`.
> 
> **Overview**
> Bumps the `@metamask/ramps-controller` dependency from `7.0.0` to
`7.1.0` and updates `yarn.lock` accordingly, pulling in the upstream
bugfixes (notably around payment method selection in unified buy v2).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7671b49. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
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.

2 participants