Skip to content

fix(transaction-pay-controller, transaction-controller): support Predict same-chain withdraw on swap-only Relay routes#8735

Merged
dan437 merged 1 commit into
mainfrom
predict-withdraw-from-override-swap-route
May 12, 2026
Merged

fix(transaction-pay-controller, transaction-controller): support Predict same-chain withdraw on swap-only Relay routes#8735
dan437 merged 1 commit into
mainfrom
predict-withdraw-from-override-swap-route

Conversation

@dan437
Copy link
Copy Markdown
Contributor

@dan437 dan437 commented May 7, 2026

Explanation

Since the Polymarket pUSD migration on April 28 2026, Predict same-chain withdraws on Polygon (e.g. pUSD → USDC) sometimes fail with transaction gas limit too high (cap: 33554432, tx: 42121000).

Two interacting bugs:

  1. transaction-pay-controllercalculateSourceNetworkCost always uses fromOverride = Safe proxy for Predict withdraws. That works for deposit-style Relay routes but breaks for the swap-aggregator routes that same-chain destinations now use post-migration: DEX aggregators reject contract callers (anti-MEV msg.sender == tx.origin checks etc.), so the swap step reverts in simulation.
  2. transaction-controllerestimateGasBatch's 7702 path always calls estimateGas, even when every batch entry already has a gas value. The non-7702 path has had an allTransactionsHaveGas short-circuit since #7405; the 7702 path was missed. When TPC tries the EOA from, the swap sub-call reverts (EOA has no source token until the prepended Safe.execTransaction sub-call runs mid-batch), the whole 7702 batch falls back to ~block-gas-limit × buffer ≈ 42M, and Polygon's per-tx gascap rejects it.

Fix

  • TPC relay-quotes.ts: gate fromOverride = Safe proxy on the route having a deposit step. Same-chain swap routes use the relay params' EOA from instead. Gas-fee-token lookup keeps using the Safe proxy (gated on isPredictWithdraw && refundTo) so the gasless flow still works for users with 0 POL.
  • TPC constants.ts: add POLYGON_PUSD_ADDRESS and include it in STABLECOINS[Polygon] for correct stablecoin display.
  • TC gas.ts: mirror the existing non-7702 short-circuit in the 7702 branch — when every transaction has a provided gas, sum them and skip simulation.

Verified end-to-end on mobile (yalc-linked): Polygon pUSD → USDC withdraw produces a sane fee both with POL and gasless (paid in pUSD). BNB cross-chain unchanged.

References

N/A

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

Medium Risk
Changes gas estimation behavior for EIP-7702 batches and alters Relay quote simulation from selection for Predict withdraws; mistakes could impact fee estimation and transaction success for these flows.

Overview
Fixes Predict same-chain withdraws on swap-only Relay routes by gating the Safe-proxy from override to only routes that include a deposit step, while still using the Safe proxy for gas-fee-token eligibility checks.

Updates estimateGasBatch’s EIP-7702 path to fallback to summed caller-provided per-tx gas limits when node simulation fails (instead of block-gas-limit fallback), via a new getProvidedBatchGasLimits helper and added test coverage.

Adds POLYGON_PUSD_ADDRESS and includes it in Polygon STABLECOINS for stablecoin display/fiat-rate handling, with new constants tests.

Reviewed by Cursor Bugbot for commit 8c1c30a. Bugbot is set up for automated code reviews on this repo. Configure here.

@dan437 dan437 requested review from a team as code owners May 7, 2026 13:22
@dan437 dan437 temporarily deployed to default-branch May 7, 2026 13:22 — with GitHub Actions Inactive
Comment thread packages/transaction-controller/src/utils/gas.ts
@dan437 dan437 force-pushed the predict-withdraw-from-override-swap-route branch 4 times, most recently from 53d29bd to 3157ea4 Compare May 11, 2026 14:45
@dan437 dan437 enabled auto-merge May 11, 2026 15:14
@dan437 dan437 force-pushed the predict-withdraw-from-override-swap-route branch 2 times, most recently from c7b3e5f to d321241 Compare May 12, 2026 05:04
…ess Predict same-chain withdraw on swap-only Relay routes
@dan437 dan437 force-pushed the predict-withdraw-from-override-swap-route branch from d321241 to 8c1c30a Compare May 12, 2026 09:13
@dan437 dan437 dismissed matthewwalsh0’s stale review May 12, 2026 09:23

I've resolved the comment and tested it. We want to merge it shortly to avoid changelog conflicts that keep happening.

@dan437 dan437 added this pull request to the merge queue May 12, 2026
Merged via the queue into main with commit b2e132c May 12, 2026
366 checks passed
@dan437 dan437 deleted the predict-withdraw-from-override-swap-route branch May 12, 2026 09:27
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