Skip to content

Commit dafc42c

Browse files
authored
fix(predict): fix unregistered wallet issue on first deposit cp-7.77.0 cp-7.78.0 (#30267)
## **Description** Fixes the first-deposit flow for new Predict users whose Polymarket deposit wallet has been created but is not fully registered yet. Polymarket advised that `STATE_MINED` can happen before the wallet is usable on their side, so the deposit wallet relayer polling now treats only `STATE_CONFIRMED` as a successful completion state. This keeps polling through mined responses until Polymarket confirms the wallet, preventing the follow-up batch transaction from failing with "wallet is not registered". ## **Changelog** CHANGELOG entry: Fixed a bug that caused a user's first Predict deposit to fail while their deposit wallet was still registering. ## **Related issues** Fixes: PRED-886 ## **Manual testing steps** ```gherkin Feature: Predict first deposit wallet registration Scenario: user makes their first Predict deposit Given a new Predict user does not have a registered Polymarket deposit wallet When user starts their first deposit Then the app creates the deposit wallet And waits until the relayer reports STATE_CONFIRMED And proceeds with the wallet batch transaction without a "wallet is not registered" error ``` ## **Screenshots/Recordings** N/A - logic-only relayer polling change. ### **Before** N/A ### **After** N/A ## **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. #### 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** - [ ] 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. ## Testing - `yarn jest app/components/UI/Predict/providers/polymarket/depositWallet.test.ts --runInBand` <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes deposit-wallet relayer polling completion criteria, which can affect first-deposit transaction flow timing and success. Low code surface area but touches user-critical deposit execution behavior. > > **Overview** > Fixes Predict first-deposit failures by tightening Polymarket relayer success detection: `waitForDepositWalletTransaction` now treats only `STATE_CONFIRMED` (not `STATE_MINED`) as a completion state before proceeding. > > Updates the related unit test to expect continued polling through `STATE_MINED`/no-hash responses until a `STATE_CONFIRMED` transaction hash is returned. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit a36ba27. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent ea0f772 commit dafc42c

2 files changed

Lines changed: 3 additions & 3 deletions

File tree

app/components/UI/Predict/providers/polymarket/depositWallet.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,10 @@ describe('depositWallet', () => {
269269

270270
it('keeps polling when completion succeeds without a hash', async () => {
271271
mockFetch
272-
.mockResolvedValueOnce(mockResponse({ state: 'STATE_MINED' }))
272+
.mockResolvedValueOnce(mockResponse({ state: 'STATE_CONFIRMED' }))
273273
.mockResolvedValueOnce(
274274
mockResponse({
275-
state: 'STATE_MINED',
275+
state: 'STATE_CONFIRMED',
276276
transactionHash:
277277
'0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
278278
}),

app/components/UI/Predict/providers/polymarket/depositWallet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const DEPOSIT_WALLET_DOMAIN_VERSION = '1';
2626
// allowed window to reduce intermittent "deadline too soon" failures.
2727
const DEPOSIT_WALLET_BATCH_DEADLINE_SECONDS = 300;
2828

29-
const RELAYER_SUCCESS_STATES = new Set(['STATE_MINED', 'STATE_CONFIRMED']);
29+
const RELAYER_SUCCESS_STATES = new Set(['STATE_CONFIRMED']);
3030
const RELAYER_FAILURE_STATES = new Set(['STATE_FAILED', 'STATE_INVALID']);
3131

3232
/**

0 commit comments

Comments
 (0)