Skip to content

fix(money-account-mfa-whitelist): allow a deadline on single-use deposit delegations - #11185

Merged
matthiasgeihs merged 3 commits into
mainfrom
fix/mfa-whitelist-timestamp-caveat
Oct 29, 2026
Merged

matthiasgeihs merged 3 commits into
mainfrom
fix/mfa-whitelist-timestamp-caveat

Conversation

@tylerc-consensys

@tylerc-consensys tylerc-consensys commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Explanation

Single-use delegations from the transaction controller now carry a TimestampEnforcer deadline caveat (metamask-mobile#37338), next to LimitedCalls(1) and the exact-execution caveat. getMfaRequirement only accepted exactly two caveats, so Money deposits from an MPC Money account were no longer whitelisted and asked for 2FA ("Single-use delegation caveats are not whitelisted").

Single-use delegations may now include one Timestamp caveat. A deadline only narrows when the delegation can be redeemed, so the executions are still checked as before. TimestampEnforcer is added to DelegationFrameworkContracts, so configs need to include it: the Money MPC keyring config on mobile (MPC_MFA_WHITELIST_CONFIG) and the MPC service's MPC_MFA_WHITELIST_CONFIG.

References

  • Related to metamask-mobile#37338

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 MFA gating for Money Account delegations and introduces a breaking whitelist config field, though scope is limited to optional timestamp caveats on single-use deposits.

Overview
Fixes vault deposits from MPC Money accounts incorrectly requiring MFA after transaction-controller delegations started including a TimestampEnforcer deadline caveat alongside LimitedCalls(1) and exact-execution pinning.

getSingleUseDelegationRequirement now accepts two or three caveats: required LimitedCalls(1) and one exact-execution caveat, plus at most one optional Timestamp deadline (any order). Execution checks are unchanged, so single-use withdrawals with a deadline still fail MFA. Invalid shapes (duplicate deadlines, deadline without exact execution, etc.) still require MFA.

DelegationFrameworkContracts gains a required TimestampEnforcer address—a breaking config change for mobile MPC_MFA_WHITELIST_CONFIG and the MPC service. README and changelog document the updated vault-deposit-delegation rule.

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

@tylerc-consensys tylerc-consensys self-assigned this Oct 29, 2026
@tylerc-consensys
tylerc-consensys marked this pull request as ready for review October 29, 2026 06:39
@tylerc-consensys
tylerc-consensys requested review from a team as code owners October 29, 2026 06:39
…he README

Co-authored-by: Cursor <cursoragent@cursor.com>
@matthiasgeihs
matthiasgeihs added this pull request to the merge queue Oct 29, 2026
@matthiasgeihs

Copy link
Copy Markdown
Contributor

@metamaskbot publish-preview

Merged via the queue into main with commit 60fc8cb Oct 29, 2026
46 checks passed
@matthiasgeihs
matthiasgeihs deleted the fix/mfa-whitelist-timestamp-caveat branch October 29, 2026 14:19
@github-actions

Copy link
Copy Markdown
Contributor

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@11.2.0-preview-979919367
@metamask-previews/accounts-controller@40.1.0-preview-979919367
@metamask-previews/address-book-controller@8.0.0-preview-979919367
@metamask-previews/advanced-chart-core@1.0.0-preview-979919367
@metamask-previews/ai-controllers@2.0.0-preview-979919367
@metamask-previews/analytics-controller@4.1.0-preview-979919367
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-979919367
@metamask-previews/announcement-controller@9.0.0-preview-979919367
@metamask-previews/app-metadata-controller@3.0.0-preview-979919367
@metamask-previews/approval-controller@10.0.0-preview-979919367
@metamask-previews/assets-controller@20.0.2-preview-979919367
@metamask-previews/assets-controllers@113.0.0-preview-979919367
@metamask-previews/authenticated-user-storage@4.1.0-preview-979919367
@metamask-previews/base-controller@10.1.0-preview-979919367
@metamask-previews/base-data-service@2.1.0-preview-979919367
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-979919367
@metamask-previews/bridge-controller@83.1.2-preview-979919367
@metamask-previews/bridge-status-controller@78.0.0-preview-979919367
@metamask-previews/build-utils@4.0.0-preview-979919367
@metamask-previews/byte-utils@0.1.0-preview-979919367
@metamask-previews/chain-agnostic-permission@2.1.0-preview-979919367
@metamask-previews/chomp-api-service@7.0.0-preview-979919367
@metamask-previews/claims-controller@1.1.0-preview-979919367
@metamask-previews/client-controller@2.0.0-preview-979919367
@metamask-previews/client-utils@3.0.4-preview-979919367
@metamask-previews/compliance-controller@3.0.0-preview-979919367
@metamask-previews/composable-controller@13.0.0-preview-979919367
@metamask-previews/config-registry-controller@5.0.0-preview-979919367
@metamask-previews/connectivity-controller@1.0.0-preview-979919367
@metamask-previews/controller-utils@13.0.0-preview-979919367
@metamask-previews/core-backend@12.3.0-preview-979919367
@metamask-previews/cryptography@1.1.2-preview-979919367
@metamask-previews/delegation-controller@4.0.0-preview-979919367
@metamask-previews/earn-controller@13.0.2-preview-979919367
@metamask-previews/eip-5792-middleware@4.0.1-preview-979919367
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-979919367
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-979919367
@metamask-previews/error-utils@0.1.0-preview-979919367
@metamask-previews/eth-block-tracker@16.0.0-preview-979919367
@metamask-previews/eth-json-rpc-middleware@26.0.0-preview-979919367
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-979919367
@metamask-previews/foundryup@2.0.0-preview-979919367
@metamask-previews/gas-fee-controller@27.0.0-preview-979919367
@metamask-previews/gator-permissions-controller@6.0.1-preview-979919367
@metamask-previews/geolocation-controller@2.0.0-preview-979919367
@metamask-previews/java-tron-up@2.0.0-preview-979919367
@metamask-previews/json-rpc-engine@11.0.0-preview-979919367
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-979919367
@metamask-previews/keyring-controller@28.2.0-preview-979919367
@metamask-previews/kyc-controller@0.13.0-preview-979919367
@metamask-previews/local-node-utils@2.0.0-preview-979919367
@metamask-previews/logging-controller@10.0.0-preview-979919367
@metamask-previews/marketing-consent-controller@1.1.0-preview-979919367
@metamask-previews/message-manager@15.0.0-preview-979919367
@metamask-previews/messenger@3.0.0-preview-979919367
@metamask-previews/messenger-cli@1.0.0-preview-979919367
@metamask-previews/mfa-recovery-controller@0.0.0-preview-979919367
@metamask-previews/money-account-api-data-service@2.3.1-preview-979919367
@metamask-previews/money-account-balance-service@3.1.2-preview-979919367
@metamask-previews/money-account-controller@3.0.0-preview-979919367
@metamask-previews/money-account-mfa-whitelist@0.1.0-preview-979919367
@metamask-previews/money-account-upgrade-controller@6.0.0-preview-979919367
@metamask-previews/money-account-utils@2.1.0-preview-979919367
@metamask-previews/multichain-account-service@14.1.0-preview-979919367
@metamask-previews/multichain-api-middleware@5.0.0-preview-979919367
@metamask-previews/multichain-network-controller@4.0.0-preview-979919367
@metamask-previews/multichain-transactions-controller@8.0.0-preview-979919367
@metamask-previews/name-controller@10.0.0-preview-979919367
@metamask-previews/network-connection-banner-controller@1.0.0-preview-979919367
@metamask-previews/network-controller@37.1.1-preview-979919367
@metamask-previews/network-enablement-controller@7.0.2-preview-979919367
@metamask-previews/node-utils@0.1.0-preview-979919367
@metamask-previews/notification-services-controller@30.1.0-preview-979919367
@metamask-previews/passkey-controller@4.1.0-preview-979919367
@metamask-previews/permission-controller@14.1.0-preview-979919367
@metamask-previews/permission-log-controller@6.0.0-preview-979919367
@metamask-previews/perps-controller@22.0.0-preview-979919367
@metamask-previews/phishing-controller@18.2.1-preview-979919367
@metamask-previews/platform-api-docs@0.2.1-preview-979919367
@metamask-previews/polling-controller@17.0.0-preview-979919367
@metamask-previews/preferences-controller@24.0.0-preview-979919367
@metamask-previews/profile-controller@1.2.0-preview-979919367
@metamask-previews/profile-metrics-controller@5.2.0-preview-979919367
@metamask-previews/profile-sync-controller@36.0.0-preview-979919367
@metamask-previews/ramps-controller@28.1.0-preview-979919367
@metamask-previews/rate-limit-controller@8.0.0-preview-979919367
@metamask-previews/react-data-query@2.0.0-preview-979919367
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-979919367
@metamask-previews/sample-controllers@6.0.0-preview-979919367
@metamask-previews/seedless-onboarding-controller@12.0.0-preview-979919367
@metamask-previews/selected-network-controller@27.0.0-preview-979919367
@metamask-previews/sentinel-api-service@2.1.0-preview-979919367
@metamask-previews/shield-controller@7.1.0-preview-979919367
@metamask-previews/signature-controller@40.0.0-preview-979919367
@metamask-previews/smart-transactions-controller@27.2.0-preview-979919367
@metamask-previews/snap-account-service@4.0.0-preview-979919367
@metamask-previews/social-controllers@3.13.0-preview-979919367
@metamask-previews/solana-test-validator-up@2.0.0-preview-979919367
@metamask-previews/stellar-quickstart-up@0.0.0-preview-979919367
@metamask-previews/storage-service@2.0.0-preview-979919367
@metamask-previews/subscription-controller@15.1.1-preview-979919367
@metamask-previews/transaction-controller@72.3.0-preview-979919367
@metamask-previews/transaction-pay-controller@30.3.1-preview-979919367
@metamask-previews/transaction-pay-middleware@2.0.0-preview-979919367
@metamask-previews/type-utils@0.1.0-preview-979919367
@metamask-previews/user-operation-controller@42.0.1-preview-979919367
@metamask-previews/utils@12.0.1-preview-979919367
@metamask-previews/wallet@20.0.0-preview-979919367
@metamask-previews/watch-only-account-service@0.1.0-preview-979919367

@tylerc-consensys tylerc-consensys mentioned this pull request Nov 2, 2026
2 of 4 tasks
@matthiasgeihs matthiasgeihs mentioned this pull request Nov 3, 2026
3 of 4 tasks
Naz-Ovh pushed a commit to 0x-fork/metamask-core that referenced this pull request Nov 4, 2026
## Explanation

Releases `@metamask/money-account-mfa-whitelist@0.2.0`.

This is a minor bump because the package is still `0.x` and the
unreleased changes include a breaking type change. `0.2.0` moves the
existing `Unreleased` entries into the new version:

### Added

- Add support for Node.js 26 (MetaMask#10981)

### Changed

- **BREAKING:** `DelegationFrameworkContracts` requires
`TimestampEnforcer` (MetaMask#11185)
- Bump `@metamask/utils` from `^12.0.0` to `^12.0.1` (MetaMask#11107)

### Fixed

- Whitelist single-use vault deposit delegations that carry a
`Timestamp` deadline caveat (MetaMask#11185)

Consumers that construct a `DelegationFrameworkContracts` value need to
supply `TimestampEnforcer`.

## Notes

- `@metamask/utils` has unpublished test and CI changes only, and this
package already depends on `^12.0.1`, so that package was intentionally
left out of the release.
- No workspace package depends on
`@metamask/money-account-mfa-whitelist`. The lockfile now resolves the
external `@metamask/eth-money-mpc-keyring` range `^0.1.0` to the
published `0.1.0`, because `0.2.0` is outside that range.
- Dropped non-consumer CI, test, and release commits that the tooling
had added under `Uncategorized`.
- `yarn changelog:validate` passes for
`@metamask/money-account-mfa-whitelist`.

## References

* MetaMask#11185
* MetaMask#11107
* MetaMask#10981

## Checklist

- [x] I've updated the test suite for new or updated code as appropriate
- [x] 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)
- [ ] 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**
> The release advertises a breaking type change for consumers building
`DelegationFrameworkContracts`; the PR itself only bumps versions and
the lockfile.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
abd4ae1. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
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