Skip to content

fix: re-parse required tokens when token rates load after transaction added#8714

Merged
matthewwalsh0 merged 14 commits intomainfrom
fix/pay-recompute-required-tokens-on-rates
May 7, 2026
Merged

fix: re-parse required tokens when token rates load after transaction added#8714
matthewwalsh0 merged 14 commits intomainfrom
fix/pay-recompute-required-tokens-on-rates

Conversation

@matthewwalsh0
Copy link
Copy Markdown
Member

@matthewwalsh0 matthewwalsh0 commented May 6, 2026

Explanation

TransactionPayController.parseRequiredTokens returns an empty array when token info or fiat rates are unavailable. Previously the only retry trigger was a txParams.data change, leaving in-flight transactions deadlocked when clients gate calldata edits on having a resolved required token.

This change subscribes to asset state changes (or AssetsController when the unify flag is enabled) and re-parses required tokens for in-flight transactions whose tokens are still empty.

References

Changelog

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 highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

Note

Medium Risk
Introduces new messenger event subscriptions (and expands AllowedEvents), which is a breaking integration change for consumers and can affect runtime behavior via additional state-change handling.

Overview
Ensures in-flight transactions retry parseRequiredTokens when asset data becomes available by adding subscribeAssetChanges and wiring it into TransactionPayController to re-run token parsing on rate/token state updates (or AssetsController updates when unify-state is enabled).

Renames pollTransactionChanges to subscribeTransactionChanges, updates controller/tests accordingly, and expands AllowedEvents with the required asset/rate state-change events (BREAKING: consumers must grant these events). Adds extra diagnostics in required-tokens when calldata decoding or token metadata/rates are missing.

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

@matthewwalsh0 matthewwalsh0 force-pushed the fix/pay-recompute-required-tokens-on-rates branch 2 times, most recently from 2811afd to 5425164 Compare May 6, 2026 21:03
…ges changes

- Rename pollTransactionChanges to subscribeTransactionChanges
- Rename subscribeTokenChanges to subscribeAssetChanges
- Add selectors to limit subscribe fires to relevant state slices
- Revert structural changes to the transaction subscription
- Shorten log messages and JSDoc
@matthewwalsh0 matthewwalsh0 force-pushed the fix/pay-recompute-required-tokens-on-rates branch from c91352a to f45643e Compare May 6, 2026 21:47
@matthewwalsh0 matthewwalsh0 force-pushed the fix/pay-recompute-required-tokens-on-rates branch from f45643e to 60779ac Compare May 6, 2026 21:55
@matthewwalsh0 matthewwalsh0 marked this pull request as ready for review May 6, 2026 22:05
@matthewwalsh0 matthewwalsh0 requested review from a team as code owners May 6, 2026 22:05
@matthewwalsh0
Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 60779ac. Configure here.

Comment thread packages/transaction-pay-controller/src/utils/transaction.ts
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.3.0-preview-60779ac
@metamask-previews/accounts-controller@38.0.0-preview-60779ac
@metamask-previews/address-book-controller@7.1.1-preview-60779ac
@metamask-previews/ai-controllers@0.6.3-preview-60779ac
@metamask-previews/analytics-controller@1.0.1-preview-60779ac
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-60779ac
@metamask-previews/announcement-controller@8.1.0-preview-60779ac
@metamask-previews/app-metadata-controller@2.0.1-preview-60779ac
@metamask-previews/approval-controller@9.0.1-preview-60779ac
@metamask-previews/assets-controller@6.4.0-preview-60779ac
@metamask-previews/assets-controllers@106.0.0-preview-60779ac
@metamask-previews/authenticated-user-storage@1.0.0-preview-60779ac
@metamask-previews/base-controller@9.1.0-preview-60779ac
@metamask-previews/base-data-service@0.1.1-preview-60779ac
@metamask-previews/bridge-controller@71.1.1-preview-60779ac
@metamask-previews/bridge-status-controller@71.1.0-preview-60779ac
@metamask-previews/build-utils@3.0.4-preview-60779ac
@metamask-previews/chain-agnostic-permission@1.5.0-preview-60779ac
@metamask-previews/chomp-api-service@3.0.0-preview-60779ac
@metamask-previews/claims-controller@0.5.0-preview-60779ac
@metamask-previews/client-controller@1.0.1-preview-60779ac
@metamask-previews/compliance-controller@2.0.0-preview-60779ac
@metamask-previews/composable-controller@12.0.1-preview-60779ac
@metamask-previews/config-registry-controller@0.3.0-preview-60779ac
@metamask-previews/connectivity-controller@0.2.0-preview-60779ac
@metamask-previews/controller-utils@11.20.0-preview-60779ac
@metamask-previews/core-backend@6.2.1-preview-60779ac
@metamask-previews/delegation-controller@3.0.0-preview-60779ac
@metamask-previews/earn-controller@12.1.0-preview-60779ac
@metamask-previews/eip-5792-middleware@3.0.3-preview-60779ac
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-60779ac
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-60779ac
@metamask-previews/ens-controller@19.1.1-preview-60779ac
@metamask-previews/eth-block-tracker@15.0.1-preview-60779ac
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-60779ac
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-60779ac
@metamask-previews/foundryup@1.0.1-preview-60779ac
@metamask-previews/gas-fee-controller@26.2.0-preview-60779ac
@metamask-previews/gator-permissions-controller@4.1.0-preview-60779ac
@metamask-previews/geolocation-controller@0.1.2-preview-60779ac
@metamask-previews/json-rpc-engine@10.3.0-preview-60779ac
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-60779ac
@metamask-previews/keyring-controller@25.5.0-preview-60779ac
@metamask-previews/logging-controller@8.0.1-preview-60779ac
@metamask-previews/message-manager@14.1.1-preview-60779ac
@metamask-previews/messenger@1.2.0-preview-60779ac
@metamask-previews/messenger-cli@0.2.0-preview-60779ac
@metamask-previews/money-account-balance-service@0.2.0-preview-60779ac
@metamask-previews/money-account-controller@0.3.0-preview-60779ac
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-60779ac
@metamask-previews/multichain-account-service@9.0.0-preview-60779ac
@metamask-previews/multichain-api-middleware@3.0.0-preview-60779ac
@metamask-previews/multichain-network-controller@3.1.0-preview-60779ac
@metamask-previews/multichain-transactions-controller@7.1.0-preview-60779ac
@metamask-previews/name-controller@9.1.1-preview-60779ac
@metamask-previews/network-controller@30.1.0-preview-60779ac
@metamask-previews/network-enablement-controller@5.1.0-preview-60779ac
@metamask-previews/notification-services-controller@23.1.0-preview-60779ac
@metamask-previews/passkey-controller@2.0.1-preview-60779ac
@metamask-previews/permission-controller@13.1.0-preview-60779ac
@metamask-previews/permission-log-controller@5.1.0-preview-60779ac
@metamask-previews/perps-controller@6.0.0-preview-60779ac
@metamask-previews/phishing-controller@17.1.1-preview-60779ac
@metamask-previews/polling-controller@16.0.4-preview-60779ac
@metamask-previews/preferences-controller@23.1.0-preview-60779ac
@metamask-previews/profile-metrics-controller@3.1.3-preview-60779ac
@metamask-previews/profile-sync-controller@28.0.2-preview-60779ac
@metamask-previews/ramps-controller@13.3.0-preview-60779ac
@metamask-previews/rate-limit-controller@7.0.1-preview-60779ac
@metamask-previews/react-data-query@0.2.0-preview-60779ac
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-60779ac
@metamask-previews/sample-controllers@4.0.4-preview-60779ac
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-60779ac
@metamask-previews/selected-network-controller@26.1.1-preview-60779ac
@metamask-previews/shield-controller@5.1.1-preview-60779ac
@metamask-previews/signature-controller@39.2.0-preview-60779ac
@metamask-previews/snap-account-service@0.0.0-preview-60779ac
@metamask-previews/social-controllers@2.2.0-preview-60779ac
@metamask-previews/storage-service@1.0.1-preview-60779ac
@metamask-previews/subscription-controller@6.1.2-preview-60779ac
@metamask-previews/transaction-controller@65.2.0-preview-60779ac
@metamask-previews/transaction-pay-controller@21.1.0-preview-60779ac
@metamask-previews/user-operation-controller@41.2.0-preview-60779ac

@matthewwalsh0
Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

1 similar comment
@matthewwalsh0
Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.3.0-preview-8f8f607
@metamask-previews/accounts-controller@38.0.0-preview-8f8f607
@metamask-previews/address-book-controller@7.1.1-preview-8f8f607
@metamask-previews/ai-controllers@0.6.3-preview-8f8f607
@metamask-previews/analytics-controller@1.0.1-preview-8f8f607
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-8f8f607
@metamask-previews/announcement-controller@8.1.0-preview-8f8f607
@metamask-previews/app-metadata-controller@2.0.1-preview-8f8f607
@metamask-previews/approval-controller@9.0.1-preview-8f8f607
@metamask-previews/assets-controller@6.4.0-preview-8f8f607
@metamask-previews/assets-controllers@106.0.0-preview-8f8f607
@metamask-previews/authenticated-user-storage@1.0.0-preview-8f8f607
@metamask-previews/base-controller@9.1.0-preview-8f8f607
@metamask-previews/base-data-service@0.1.1-preview-8f8f607
@metamask-previews/bridge-controller@71.1.1-preview-8f8f607
@metamask-previews/bridge-status-controller@71.1.0-preview-8f8f607
@metamask-previews/build-utils@3.0.4-preview-8f8f607
@metamask-previews/chain-agnostic-permission@1.5.0-preview-8f8f607
@metamask-previews/chomp-api-service@3.0.0-preview-8f8f607
@metamask-previews/claims-controller@0.5.0-preview-8f8f607
@metamask-previews/client-controller@1.0.1-preview-8f8f607
@metamask-previews/compliance-controller@2.0.0-preview-8f8f607
@metamask-previews/composable-controller@12.0.1-preview-8f8f607
@metamask-previews/config-registry-controller@0.3.0-preview-8f8f607
@metamask-previews/connectivity-controller@0.2.0-preview-8f8f607
@metamask-previews/controller-utils@11.20.0-preview-8f8f607
@metamask-previews/core-backend@6.2.1-preview-8f8f607
@metamask-previews/delegation-controller@3.0.0-preview-8f8f607
@metamask-previews/earn-controller@12.1.0-preview-8f8f607
@metamask-previews/eip-5792-middleware@3.0.3-preview-8f8f607
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-8f8f607
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-8f8f607
@metamask-previews/ens-controller@19.1.1-preview-8f8f607
@metamask-previews/eth-block-tracker@15.0.1-preview-8f8f607
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-8f8f607
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-8f8f607
@metamask-previews/foundryup@1.0.1-preview-8f8f607
@metamask-previews/gas-fee-controller@26.2.0-preview-8f8f607
@metamask-previews/gator-permissions-controller@4.1.0-preview-8f8f607
@metamask-previews/geolocation-controller@0.1.2-preview-8f8f607
@metamask-previews/json-rpc-engine@10.3.0-preview-8f8f607
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-8f8f607
@metamask-previews/keyring-controller@25.5.0-preview-8f8f607
@metamask-previews/logging-controller@8.0.1-preview-8f8f607
@metamask-previews/message-manager@14.1.1-preview-8f8f607
@metamask-previews/messenger@1.2.0-preview-8f8f607
@metamask-previews/messenger-cli@0.2.0-preview-8f8f607
@metamask-previews/money-account-balance-service@0.2.0-preview-8f8f607
@metamask-previews/money-account-controller@0.3.0-preview-8f8f607
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-8f8f607
@metamask-previews/multichain-account-service@9.0.0-preview-8f8f607
@metamask-previews/multichain-api-middleware@3.0.0-preview-8f8f607
@metamask-previews/multichain-network-controller@3.1.0-preview-8f8f607
@metamask-previews/multichain-transactions-controller@7.1.0-preview-8f8f607
@metamask-previews/name-controller@9.1.1-preview-8f8f607
@metamask-previews/network-controller@30.1.0-preview-8f8f607
@metamask-previews/network-enablement-controller@5.1.0-preview-8f8f607
@metamask-previews/notification-services-controller@23.1.0-preview-8f8f607
@metamask-previews/passkey-controller@2.0.1-preview-8f8f607
@metamask-previews/permission-controller@13.1.0-preview-8f8f607
@metamask-previews/permission-log-controller@5.1.0-preview-8f8f607
@metamask-previews/perps-controller@6.0.0-preview-8f8f607
@metamask-previews/phishing-controller@17.1.1-preview-8f8f607
@metamask-previews/polling-controller@16.0.4-preview-8f8f607
@metamask-previews/preferences-controller@23.1.0-preview-8f8f607
@metamask-previews/profile-metrics-controller@3.1.3-preview-8f8f607
@metamask-previews/profile-sync-controller@28.0.2-preview-8f8f607
@metamask-previews/ramps-controller@13.3.0-preview-8f8f607
@metamask-previews/rate-limit-controller@7.0.1-preview-8f8f607
@metamask-previews/react-data-query@0.2.0-preview-8f8f607
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-8f8f607
@metamask-previews/sample-controllers@4.0.4-preview-8f8f607
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-8f8f607
@metamask-previews/selected-network-controller@26.1.1-preview-8f8f607
@metamask-previews/shield-controller@5.1.1-preview-8f8f607
@metamask-previews/signature-controller@39.2.0-preview-8f8f607
@metamask-previews/snap-account-service@0.0.0-preview-8f8f607
@metamask-previews/social-controllers@2.2.0-preview-8f8f607
@metamask-previews/storage-service@1.0.1-preview-8f8f607
@metamask-previews/subscription-controller@6.1.2-preview-8f8f607
@metamask-previews/transaction-controller@65.2.0-preview-8f8f607
@metamask-previews/transaction-pay-controller@21.1.0-preview-8f8f607
@metamask-previews/user-operation-controller@41.2.0-preview-8f8f607

@matthewwalsh0
Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.3.0-preview-a25d13a1f
@metamask-previews/accounts-controller@38.0.0-preview-a25d13a1f
@metamask-previews/address-book-controller@7.1.1-preview-a25d13a1f
@metamask-previews/ai-controllers@0.6.3-preview-a25d13a1f
@metamask-previews/analytics-controller@1.0.1-preview-a25d13a1f
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-a25d13a1f
@metamask-previews/announcement-controller@8.1.0-preview-a25d13a1f
@metamask-previews/app-metadata-controller@2.0.1-preview-a25d13a1f
@metamask-previews/approval-controller@9.0.1-preview-a25d13a1f
@metamask-previews/assets-controller@6.4.0-preview-a25d13a1f
@metamask-previews/assets-controllers@106.0.0-preview-a25d13a1f
@metamask-previews/authenticated-user-storage@1.0.0-preview-a25d13a1f
@metamask-previews/base-controller@9.1.0-preview-a25d13a1f
@metamask-previews/base-data-service@0.1.1-preview-a25d13a1f
@metamask-previews/bridge-controller@71.1.1-preview-a25d13a1f
@metamask-previews/bridge-status-controller@71.1.0-preview-a25d13a1f
@metamask-previews/build-utils@3.0.4-preview-a25d13a1f
@metamask-previews/chain-agnostic-permission@1.5.0-preview-a25d13a1f
@metamask-previews/chomp-api-service@3.0.0-preview-a25d13a1f
@metamask-previews/claims-controller@0.5.0-preview-a25d13a1f
@metamask-previews/client-controller@1.0.1-preview-a25d13a1f
@metamask-previews/compliance-controller@2.0.0-preview-a25d13a1f
@metamask-previews/composable-controller@12.0.1-preview-a25d13a1f
@metamask-previews/config-registry-controller@0.3.0-preview-a25d13a1f
@metamask-previews/connectivity-controller@0.2.0-preview-a25d13a1f
@metamask-previews/controller-utils@11.20.0-preview-a25d13a1f
@metamask-previews/core-backend@6.2.1-preview-a25d13a1f
@metamask-previews/delegation-controller@3.0.0-preview-a25d13a1f
@metamask-previews/earn-controller@12.1.0-preview-a25d13a1f
@metamask-previews/eip-5792-middleware@3.0.3-preview-a25d13a1f
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-a25d13a1f
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-a25d13a1f
@metamask-previews/ens-controller@19.1.1-preview-a25d13a1f
@metamask-previews/eth-block-tracker@15.0.1-preview-a25d13a1f
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-a25d13a1f
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-a25d13a1f
@metamask-previews/foundryup@1.0.1-preview-a25d13a1f
@metamask-previews/gas-fee-controller@26.2.0-preview-a25d13a1f
@metamask-previews/gator-permissions-controller@4.1.0-preview-a25d13a1f
@metamask-previews/geolocation-controller@0.1.2-preview-a25d13a1f
@metamask-previews/json-rpc-engine@10.3.0-preview-a25d13a1f
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-a25d13a1f
@metamask-previews/keyring-controller@25.5.0-preview-a25d13a1f
@metamask-previews/logging-controller@8.0.1-preview-a25d13a1f
@metamask-previews/message-manager@14.1.1-preview-a25d13a1f
@metamask-previews/messenger@1.2.0-preview-a25d13a1f
@metamask-previews/messenger-cli@0.2.0-preview-a25d13a1f
@metamask-previews/money-account-balance-service@0.2.0-preview-a25d13a1f
@metamask-previews/money-account-controller@0.3.0-preview-a25d13a1f
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-a25d13a1f
@metamask-previews/multichain-account-service@9.0.0-preview-a25d13a1f
@metamask-previews/multichain-api-middleware@3.0.0-preview-a25d13a1f
@metamask-previews/multichain-network-controller@3.1.0-preview-a25d13a1f
@metamask-previews/multichain-transactions-controller@7.1.0-preview-a25d13a1f
@metamask-previews/name-controller@9.1.1-preview-a25d13a1f
@metamask-previews/network-controller@30.1.0-preview-a25d13a1f
@metamask-previews/network-enablement-controller@5.1.0-preview-a25d13a1f
@metamask-previews/notification-services-controller@23.1.0-preview-a25d13a1f
@metamask-previews/passkey-controller@2.0.1-preview-a25d13a1f
@metamask-previews/permission-controller@13.1.0-preview-a25d13a1f
@metamask-previews/permission-log-controller@5.1.0-preview-a25d13a1f
@metamask-previews/perps-controller@6.0.0-preview-a25d13a1f
@metamask-previews/phishing-controller@17.1.1-preview-a25d13a1f
@metamask-previews/polling-controller@16.0.4-preview-a25d13a1f
@metamask-previews/preferences-controller@23.1.0-preview-a25d13a1f
@metamask-previews/profile-metrics-controller@3.1.3-preview-a25d13a1f
@metamask-previews/profile-sync-controller@28.0.2-preview-a25d13a1f
@metamask-previews/ramps-controller@13.3.0-preview-a25d13a1f
@metamask-previews/rate-limit-controller@7.0.1-preview-a25d13a1f
@metamask-previews/react-data-query@0.2.0-preview-a25d13a1f
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-a25d13a1f
@metamask-previews/sample-controllers@4.0.4-preview-a25d13a1f
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-a25d13a1f
@metamask-previews/selected-network-controller@26.1.1-preview-a25d13a1f
@metamask-previews/shield-controller@5.1.1-preview-a25d13a1f
@metamask-previews/signature-controller@39.2.0-preview-a25d13a1f
@metamask-previews/snap-account-service@0.0.0-preview-a25d13a1f
@metamask-previews/social-controllers@2.2.0-preview-a25d13a1f
@metamask-previews/storage-service@1.0.1-preview-a25d13a1f
@metamask-previews/subscription-controller@6.1.2-preview-a25d13a1f
@metamask-previews/transaction-controller@65.2.0-preview-a25d13a1f
@metamask-previews/transaction-pay-controller@21.1.0-preview-a25d13a1f
@metamask-previews/user-operation-controller@41.2.0-preview-a25d13a1f

@matthewwalsh0 matthewwalsh0 added this pull request to the merge queue May 7, 2026
Merged via the queue into main with commit 8f8c296 May 7, 2026
366 checks passed
@matthewwalsh0 matthewwalsh0 deleted the fix/pay-recompute-required-tokens-on-rates branch May 7, 2026 11:05
chloeYue pushed a commit to MetaMask/metamask-extension that referenced this pull request May 7, 2026
…2511)

## **Description**

Cherry-pick of #42430 onto `release/13.30.0`.

The pay controller change (added in #42430 via a `^22.0.0` bump) is
shipped here as a `yarn patch` against `20.1.0` instead, so the release
branch picks up no transitive package bumps. See MetaMask/core#8714 for
the upstream core fix.

## **Changelog**

CHANGELOG entry: null

## **Manual testing steps**

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/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-extension/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]
> **Medium Risk**
> Changes confirmation UX and transaction-pay controller event
subscriptions; regressions could block confirmations or mis-handle pay
token parsing when asset state updates occur.
> 
> **Overview**
> Ensures confirmation flows treat Transaction Pay required-token data
as an *async dependency*: the `CustomAmountInfo` panel now renders a
skeleton until `useTransactionPayPrimaryRequiredToken` resolves (when
Pay is enabled), and `SingleActionFooter` shows a disabled loading state
until the required token is available (taking precedence over
blocking-alert text).
> 
> Updates token-amount editing to **avoid defaulting decimals**:
`useUpdateTokenAmount` now no-ops unless the primary required token
provides `decimals`, preventing potentially incorrect ERC-20 amount
encoding.
> 
> Adds a Yarn patch for `@metamask/transaction-pay-controller@20.1.0` so
in-flight transactions with unresolved required tokens re-parse on
asset-related `stateChange` events (Assets unified-state or legacy
Tokens/TokenRates/CurrencyRate), and wires the extra events into the
TransactionPay controller messenger delegation.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
76539e9. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants