Skip to content

chore: add money keyring#8687

Merged
MoMannn merged 8 commits intomainfrom
chore--add-money-keyring
May 5, 2026
Merged

chore: add money keyring#8687
MoMannn merged 8 commits intomainfrom
chore--add-money-keyring

Conversation

@MoMannn
Copy link
Copy Markdown
Member

@MoMannn MoMannn commented May 5, 2026

Explanation

Current state: EIP-7702 authorization signing was only supported for HD Key Tree and Simple Key Pair keyrings. The Money Keyring (used by Money Accounts) was explicitly excluded, preventing Money Account users from using EIP-7702-based features such as atomic batch transactions.

Solution: Added Money Keyring to the KEYRING_TYPES_SUPPORTING_7702 allowlist in the three packages that maintain this check:

  • eip-5792-middleware — controls which accounts advertise the atomic capability via wallet_getCapabilities.
  • transaction-controller — gates EIP-7702 upgrade flows and delegation signing.
  • transaction-pay-controller — determines whether to include accountSupports7702 when submitting a Pay transaction.

Each addition is a one-line change to the respective constant, accompanied by a targeted test that exercises the Money Keyring path end-to-end.

References

Needed for: MetaMask/metamask-mobile#29487

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

Low Risk
Low risk allowlist expansion: it only broadens EIP-7702 support checks to include Money Keyring, with tests added to validate the new path.

Overview
Enables EIP-7702 authorization signing for accounts stored in the Money Keyring, so they are treated as EIP-7702-capable in transaction flows.

Updates the supported keyring allowlists in transaction-controller (for doesAccountSupportEIP7702) and transaction-pay-controller (for accountSupports7702/submit metadata), adds targeted unit tests for the Money Keyring case, and records the change in both packages’ changelogs.

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

@MoMannn MoMannn requested review from a team as code owners May 5, 2026 08:20
@MoMannn MoMannn changed the title Chore: add money keyring chore: add money keyring May 5, 2026
Comment thread packages/eip-5792-middleware/src/constants.ts Outdated
@MoMannn MoMannn requested a review from matthewwalsh0 May 5, 2026 09:07
@MoMannn MoMannn added this pull request to the merge queue May 5, 2026
Merged via the queue into main with commit 1cd9674 May 5, 2026
366 checks passed
@MoMannn MoMannn deleted the chore--add-money-keyring branch May 5, 2026 09:22
pull Bot pushed a commit to Reality2byte/metamask-mobile that referenced this pull request May 7, 2026
<!--
Please submit this PR as a draft initially.

Do not mark it as "Ready for review" until this PR meets the canonical
Definition of Ready For Review in `docs/readme/ready-for-review.md`.

In short: the template must be materially complete (not just section
titles
present), all status checks must be currently passing, and the only
expected
follow-up commits must be reviewer-driven.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Updated money account deposit.

## **Related issues**

Depends on: MetaMask#29561
Depends on: MetaMask/core#8687

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

<!--
Every checklist item must be consciously assessed before marking this PR
as
"Ready for review". A checked box means you deliberately considered that
responsibility, not that you literally performed every action listed.

Unchecked boxes are ambiguous: they are not an implicit "N/A" and they
are not
a silent "skip". See `docs/readme/ready-for-review.md` for the full
checklist
semantics.
-->

- [ ] 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).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] 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**

<!--
Reviewer checklist items follow the same semantics as the author
checklist: an
unchecked box is ambiguous, a checked box means the reviewer consciously
assessed that responsibility. See `docs/readme/ready-for-review.md`.
-->

- [ ] 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**
> Updates Money Account deposit transaction construction and
confirmation re-encoding, which can affect on-chain calldata and Pay
gating via `requiredAssets`, though it is still using a zero-amount
placeholder by default.
> 
> **Overview**
> Adds a Money Account deposit initiation path that submits an
`addTransactionBatch` for approve+deposit with a **zero-amount
placeholder**, navigates to the `CustomAmount` confirmation screen, and
declares Pay `requiredAssets` using a shared deposit-asset helper.
> 
> Implements real `updateMoneyAccountDepositTokenAmount` re-encoding:
converts the user-entered human amount to USDC base units, calls
`previewDeposit` to compute `minimumMint` (with slippage), and returns
updated calldata for the nested approve/deposit calls; it no-ops when
vault config/provider is unavailable.
> 
> Refactors deposit asset handling into
`getMoneyAccountDepositAssetAddress` (currently hardcoded USDC), skips
the `previewDeposit` RPC for 0 amounts, updates/extends unit tests and
confirmation mocks, and bumps `@metamask/transaction-controller` to
`65.1.0`.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
5ef8804. 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: Jyoti Puri <jyotipuri@gmail.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.

2 participants