Skip to content

fix: Fix hardware wallet MMPay on EIP-7702 chains by gating 7702 paths on account keyring capability#8388

Merged
OGPoyraz merged 50 commits intomainfrom
ogp/CONF-1151
Apr 28, 2026
Merged

fix: Fix hardware wallet MMPay on EIP-7702 chains by gating 7702 paths on account keyring capability#8388
OGPoyraz merged 50 commits intomainfrom
ogp/CONF-1151

Conversation

@OGPoyraz
Copy link
Copy Markdown
Member

@OGPoyraz OGPoyraz commented Apr 7, 2026

Explanation

Fix hardware wallet mUSD conversion on EIP-7702 chains by gating 7702 paths on account keyring capability, and fix batch transaction signing to prevent remaining hardware wallet prompts after a rejection.

Summary

@metamask/transaction-controller

  • BREAKING: Add KeyringControllerGetStateAction to AllowedActions — clients must add KeyringController:getState to the TransactionController messenger's allowed actions
  • Add doesAccountSupportEIP7702 in eip7702.ts — checks keyring type via KeyringController:getState, returns true only for HD Key Tree and Simple Key Pair keyrings, falls back to true when keyring is unresolved
  • Gate addTransactionBatch 7702 path on doesAccountSupportEIP7702 — hardware wallet accounts fall back to sequential/hook batch flow instead of attempting EIP-7702 batch signing
  • Sign batch transactions sequentially — each transaction waits for the previous signing to complete before calling addTransaction for the next, preventing remaining Ledger prompts from appearing after a rejection
  • Add CollectPublishHook.waitForSignedCount(count) to support sequential signing gating in the batch loop
  • Abort remaining in-flight transaction signings on batch failure via abortTransactionSigning

@metamask/transaction-pay-controller

  • BREAKING: Add KeyringControllerGetStateAction to AllowedActions — clients must add KeyringController:getState to the TransactionPayController messenger's allowed actions
  • Add accountSupports7702 utility in utils/7702.ts and KEYRING_TYPES_SUPPORTING_7702 constant in types.ts
  • Thread accountSupports7702 flag through PayStrategyGetQuotesRequest and PayStrategyExecuteRequest types
  • Gate relay quote useExecute flag on accountSupports7702 — ensures the relay API receives non-7702 requests for hardware wallets and returns quotes with proper individual gas limits
  • Pass accountSupports7702 from TransactionPayPublishHook into strategy execute() calls
  • Pass accountSupports7702 from fiat-quotes into relay-quotes
  • Re-estimate gas individually in estimateQuoteGasLimitsBatch when batch simulation returns a combined 7702 gas limit but account doesn't support 7702

References

  • Fixes CONF-1151

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
Touches transaction batching, signing flow control, and gas/quote estimation, plus introduces new messenger permissions; regressions could impact batch submission behavior especially across different keyring types.

Overview
Fixes EIP-7702 batching/quote behavior for hardware-wallet accounts by gating all 7702 paths on keyring capability. Both TransactionController and TransactionPayController now require KeyringController:getState in messenger AllowedActions, and new helpers (doesAccountSupportEIP7702 / accountSupports7702) treat only HD Key Tree and Simple Key Pair accounts as 7702-capable.

addTransactionBatch and estimateGasBatch now skip the EIP-7702 path when the account can’t sign 7702 authorizations, falling back to per-transaction/sequential behavior. Batch signing via hook is also made sequential by waiting for each transaction to reach a signed/submitted state before proceeding, reducing “extra” hardware wallet prompts after a rejection.

MMPay threads an accountSupports7702 flag through strategy request/execute types and uses it to disable Relay “execute” (7702) request shaping and to produce non-7702 gas limit outputs when needed; tests and changelogs are updated accordingly.

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

@OGPoyraz OGPoyraz changed the title Fix hardware wallet MMPay on EIP-7702 chains by gating 7702 paths on account keyring capability fix: Fix hardware wallet MMPay on EIP-7702 chains by gating 7702 paths on account keyring capability Apr 7, 2026
@OGPoyraz OGPoyraz marked this pull request as ready for review April 7, 2026 12:39
@OGPoyraz OGPoyraz requested review from a team as code owners April 7, 2026 12:39
@OGPoyraz
Copy link
Copy Markdown
Member Author

OGPoyraz commented Apr 7, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 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/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]

Comment thread packages/transaction-pay-controller/src/strategy/across/across-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts Outdated
@OGPoyraz
Copy link
Copy Markdown
Member Author

OGPoyraz commented Apr 8, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 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/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]

@OGPoyraz
Copy link
Copy Markdown
Member Author

OGPoyraz commented Apr 8, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 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/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]

Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-submit.ts Outdated
@OGPoyraz
Copy link
Copy Markdown
Member Author

OGPoyraz commented Apr 8, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 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/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]
@metamask-previews/[email protected]

Comment thread packages/keyring-controller/src/KeyringController.ts Outdated
Comment thread packages/transaction-pay-controller/CHANGELOG.md Outdated
Comment thread packages/transaction-controller/src/TransactionController.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-quotes.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/utils/quotes.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/across/across-quotes.ts Outdated
Comment thread packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.ts Outdated
Comment thread packages/transaction-controller/CHANGELOG.md Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts Outdated
Comment thread packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts Outdated
Comment thread packages/transaction-pay-controller/src/TransactionPayController.ts Outdated
Comment thread packages/transaction-controller/src/TransactionController.ts
Comment thread packages/transaction-pay-controller/CHANGELOG.md Outdated
Comment thread packages/transaction-pay-controller/src/utils/quote-gas.ts Outdated
Comment thread packages/transaction-pay-controller/src/utils/quotes.ts Outdated
account: string,
): boolean {
const { keyrings } = messenger.call('KeyringController:getState');
const keyring = keyrings.find((k: { type: string; accounts: string[] }) =>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Minor, could we return this with a some instead?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Switched to some here. Also changed the fallback to return false when the keyring isn't found, since we'd rather be restrictive by default and not allow 7702 for accounts we can't resolve. Applied the same change to the pay controller duplicate.

Comment thread packages/transaction-controller/src/utils/batch.ts Outdated
Comment thread packages/transaction-pay-controller/src/utils/7702.ts Outdated
Comment thread packages/transaction-pay-controller/src/utils/quote-gas.ts Outdated
@OGPoyraz OGPoyraz requested a review from matthewwalsh0 April 27, 2026 13:33
Comment thread packages/transaction-controller/src/utils/gas.ts
Comment thread packages/transaction-controller/src/utils/batch.ts
if (checkStatus(initialTx)) {
return;
}
} catch {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Minor, it should always exist right as we're awaiting the initial addTransaction first?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Removed as it's unnecessary

hookTransactions.push(hookTransaction);
index += 1;

if (!alreadySigned) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can we remove this and rely just on waitForTransactionStatus for maximum simplicity and smallest diff?

Copy link
Copy Markdown
Member Author

@OGPoyraz OGPoyraz Apr 28, 2026

Choose a reason for hiding this comment

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

Agreed, no more alreadySigned prop and check

): Promise<
Omit<PublishBatchHookTransaction, 'signedTx'> & { type?: TransactionType }
> {
): Promise<{
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

My hope is we wouldn't have to change anything in this function, but just accept the submitted or confirmed state also, so we have minimum branches and edge cases?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Done

if (!alreadySigned) {
await waitForTransactionStatus(
String(hookTransaction.id),
TransactionStatus.signed,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Could this be an array including submitted and confirmed so it covers all the bases including the existing transaction path?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Added these statuses as well

beforeEach(() => {
jest.resetAllMocks();

getKeyringControllerStateMock.mockReturnValue({
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Minor, I guess this could mock the transaction controller action only?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Removed the unnecessary mocks

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.

There are 2 total unresolved issues (including 1 from previous review).

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 9048c72. Configure here.

Comment thread packages/transaction-controller/src/utils/batch.ts
@OGPoyraz OGPoyraz enabled auto-merge April 28, 2026 09:13
@OGPoyraz OGPoyraz requested a review from matthewwalsh0 April 28, 2026 09:15
@OGPoyraz OGPoyraz added this pull request to the merge queue Apr 28, 2026
Merged via the queue into main with commit b947fad Apr 28, 2026
362 checks passed
@OGPoyraz OGPoyraz deleted the ogp/CONF-1151 branch April 28, 2026 09:23
@OGPoyraz OGPoyraz mentioned this pull request Apr 28, 2026
4 tasks
pull Bot pushed a commit to Reality2byte/core that referenced this pull request Apr 28, 2026
## Explanation

Release `942.0.0` with major version bumps for two packages:

- **`@metamask/transaction-controller`** `64.4.0` → `65.0.0`
- **`@metamask/transaction-pay-controller`** `19.3.0` → `20.0.0`

### `@metamask/[email protected]`

**Breaking:** Adds `KeyringControllerGetStateAction` to `AllowedActions`
to enable keyring-based EIP-7702 account compatibility checks in
`addTransactionBatch`. Clients must add `KeyringController:getState` to
the TransactionController messenger's allowed actions.

### `@metamask/[email protected]`

**Breaking:** Fix mUSD conversion for hardware wallets on EIP-7702
chains by gating relay and Across 7702 paths on the account keyring type
via `KeyringController:getState`. The
`TransactionPayControllerMessenger` now requires
`KeyringController:getState` permission.

### Dependency updates

14 packages had their `@metamask/transaction-controller` dependency
range updated to `^65.0.0` with corresponding changelog entries under
`[Unreleased]`.

## References

- [MetaMask#8388](MetaMask#8388) — EIP-7702 keyring
compatibility
- [MetaMask#8592](MetaMask#8592) — Expose
`wipeTransactions` via messenger
- [MetaMask#8607](MetaMask#8607) — Rename
`executeEnabled` → `gaslessEnabled`
- [MetaMask#8577](MetaMask#8577) — Across EIP-7702
authorization list fallback

## 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
- [x] I've communicated my changes to consumers by [updating changelogs
for packages I've
changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md)
- [x] I've introduced [breaking
changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md)
in this PR and have prepared draft pull requests for clients and
consumer packages to resolve them

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Primarily a release/version bump, but it upgrades to
`@metamask/[email protected]` and
`@metamask/[email protected]`, which include
**breaking** messenger permission/allowed-action changes that can break
consumers at runtime if not updated.
> 
> **Overview**
> Bumps the monorepo version to `942.0.0` and releases **major** updates
for `@metamask/transaction-controller` (`64.4.0` → `65.0.0`) and
`@metamask/transaction-pay-controller` (`19.3.0` → `20.0.0`).
> 
> Propagates `@metamask/transaction-controller` dependency range updates
to `^65.0.0` across multiple packages (e.g.
assets/bridge/network/shield/subscription/user-operation controllers)
with corresponding `[Unreleased]` changelog entries, and updates
`yarn.lock` accordingly.
> 
> Documents breaking changes in `[email protected]`
(requires `KeyringController:getState` allowed action for EIP-7702 batch
compatibility checks) and `[email protected]` (requires
`KeyringController:getState` to gate 7702 paths for hardware-wallet mUSD
conversion).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
de55ba7. 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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants