Skip to content

Support transactions from account snaps that should not be published#5045

Merged
matthewwalsh0 merged 59 commits into
mainfrom
MMI-5803-deferral-proposal-2
Mar 31, 2025
Merged

Support transactions from account snaps that should not be published#5045
matthewwalsh0 merged 59 commits into
mainfrom
MMI-5803-deferral-proposal-2

Conversation

@shane-t

@shane-t shane-t commented Dec 9, 2024

Copy link
Copy Markdown
Member

Explanation

Relates to this extension PR

References

Institutional Snap RAPID

We then use the existing beforePublish hook in metamask-controller to read this option and tell the transaction controller not to publish based on it. As a side effect, this hook also sets the hash of the transaction and marks it as submitted.

Changelog

@metamask/transaction-controller

  • CHANGED: Removed coupling of "Update custodial transactions" and MMI
  • CHANGED: Changes signature of hooks to return promises
  • ADDED: updateCustodialTransaction now allows changing more properties

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

@shane-t shane-t force-pushed the MMI-5803-deferral-proposal-2 branch from 2f7ffb1 to e58ce4a Compare December 9, 2024 19:49
@shane-t

shane-t commented Dec 9, 2024

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Dec 9, 2024

Copy link
Copy Markdown
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "20.0.0-preview-e58ce4ab",
  "@metamask-previews/address-book-controller": "6.0.1-preview-e58ce4ab",
  "@metamask-previews/announcement-controller": "7.0.1-preview-e58ce4ab",
  "@metamask-previews/approval-controller": "7.1.1-preview-e58ce4ab",
  "@metamask-previews/assets-controllers": "45.1.0-preview-e58ce4ab",
  "@metamask-previews/base-controller": "7.0.2-preview-e58ce4ab",
  "@metamask-previews/build-utils": "3.0.1-preview-e58ce4ab",
  "@metamask-previews/chain-controller": "0.2.0-preview-e58ce4ab",
  "@metamask-previews/composable-controller": "9.0.1-preview-e58ce4ab",
  "@metamask-previews/controller-utils": "11.4.3-preview-e58ce4ab",
  "@metamask-previews/ens-controller": "15.0.0-preview-e58ce4ab",
  "@metamask-previews/eth-json-rpc-provider": "4.1.6-preview-e58ce4ab",
  "@metamask-previews/gas-fee-controller": "22.0.1-preview-e58ce4ab",
  "@metamask-previews/json-rpc-engine": "10.0.1-preview-e58ce4ab",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.5-preview-e58ce4ab",
  "@metamask-previews/keyring-controller": "19.0.0-preview-e58ce4ab",
  "@metamask-previews/logging-controller": "6.0.2-preview-e58ce4ab",
  "@metamask-previews/message-manager": "11.0.1-preview-e58ce4ab",
  "@metamask-previews/multichain": "1.0.0-preview-e58ce4ab",
  "@metamask-previews/name-controller": "8.0.1-preview-e58ce4ab",
  "@metamask-previews/network-controller": "22.0.2-preview-e58ce4ab",
  "@metamask-previews/notification-controller": "7.0.0-preview-e58ce4ab",
  "@metamask-previews/notification-services-controller": "0.14.0-preview-e58ce4ab",
  "@metamask-previews/permission-controller": "11.0.3-preview-e58ce4ab",
  "@metamask-previews/permission-log-controller": "3.0.1-preview-e58ce4ab",
  "@metamask-previews/phishing-controller": "12.3.0-preview-e58ce4ab",
  "@metamask-previews/polling-controller": "12.0.1-preview-e58ce4ab",
  "@metamask-previews/preferences-controller": "15.0.0-preview-e58ce4ab",
  "@metamask-previews/profile-sync-controller": "2.0.0-preview-e58ce4ab",
  "@metamask-previews/queued-request-controller": "8.0.0-preview-e58ce4ab",
  "@metamask-previews/rate-limit-controller": "6.0.1-preview-e58ce4ab",
  "@metamask-previews/selected-network-controller": "20.0.0-preview-e58ce4ab",
  "@metamask-previews/signature-controller": "23.0.0-preview-e58ce4ab",
  "@metamask-previews/transaction-controller": "41.0.0-preview-e58ce4ab",
  "@metamask-previews/user-operation-controller": "20.0.0-preview-e58ce4ab"
}

@shane-t shane-t marked this pull request as ready for review January 28, 2025 09:50
@shane-t shane-t requested a review from a team as a code owner January 28, 2025 09:50
@shane-t

shane-t commented Feb 5, 2025

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@shane-t

shane-t commented Feb 6, 2025

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@shane-t

shane-t commented Feb 6, 2025

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Feb 6, 2025

Copy link
Copy Markdown
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "23.0.0-preview-83e41399",
  "@metamask-previews/address-book-controller": "6.0.2-preview-83e41399",
  "@metamask-previews/announcement-controller": "7.0.2-preview-83e41399",
  "@metamask-previews/approval-controller": "7.1.2-preview-83e41399",
  "@metamask-previews/assets-controllers": "48.0.0-preview-83e41399",
  "@metamask-previews/base-controller": "7.1.1-preview-83e41399",
  "@metamask-previews/build-utils": "3.0.2-preview-83e41399",
  "@metamask-previews/composable-controller": "10.0.0-preview-83e41399",
  "@metamask-previews/controller-utils": "11.5.0-preview-83e41399",
  "@metamask-previews/earn-controller": "0.2.0-preview-83e41399",
  "@metamask-previews/ens-controller": "15.0.1-preview-83e41399",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-83e41399",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-83e41399",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-83e41399",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-83e41399",
  "@metamask-previews/keyring-controller": "19.0.6-preview-83e41399",
  "@metamask-previews/logging-controller": "6.0.3-preview-83e41399",
  "@metamask-previews/message-manager": "12.0.0-preview-83e41399",
  "@metamask-previews/multichain": "2.1.0-preview-83e41399",
  "@metamask-previews/multichain-transactions-controller": "0.2.0-preview-83e41399",
  "@metamask-previews/name-controller": "8.0.2-preview-83e41399",
  "@metamask-previews/network-controller": "22.2.0-preview-83e41399",
  "@metamask-previews/notification-services-controller": "0.20.0-preview-83e41399",
  "@metamask-previews/permission-controller": "11.0.5-preview-83e41399",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-83e41399",
  "@metamask-previews/phishing-controller": "12.3.1-preview-83e41399",
  "@metamask-previews/polling-controller": "12.0.2-preview-83e41399",
  "@metamask-previews/preferences-controller": "15.0.1-preview-83e41399",
  "@metamask-previews/profile-sync-controller": "7.0.0-preview-83e41399",
  "@metamask-previews/queued-request-controller": "9.0.0-preview-83e41399",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-83e41399",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-83e41399",
  "@metamask-previews/selected-network-controller": "21.0.0-preview-83e41399",
  "@metamask-previews/signature-controller": "23.2.0-preview-83e41399",
  "@metamask-previews/token-search-discovery-controller": "2.0.0-preview-83e41399",
  "@metamask-previews/transaction-controller": "45.0.0-preview-83e41399",
  "@metamask-previews/user-operation-controller": "24.0.0-preview-83e41399"
}

@shane-t

shane-t commented Feb 6, 2025

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Feb 6, 2025

Copy link
Copy Markdown
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "23.0.0-preview-224dff25",
  "@metamask-previews/address-book-controller": "6.0.2-preview-224dff25",
  "@metamask-previews/announcement-controller": "7.0.2-preview-224dff25",
  "@metamask-previews/approval-controller": "7.1.2-preview-224dff25",
  "@metamask-previews/assets-controllers": "48.0.0-preview-224dff25",
  "@metamask-previews/base-controller": "7.1.1-preview-224dff25",
  "@metamask-previews/build-utils": "3.0.2-preview-224dff25",
  "@metamask-previews/composable-controller": "10.0.0-preview-224dff25",
  "@metamask-previews/controller-utils": "11.5.0-preview-224dff25",
  "@metamask-previews/earn-controller": "0.2.0-preview-224dff25",
  "@metamask-previews/ens-controller": "15.0.1-preview-224dff25",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-224dff25",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-224dff25",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-224dff25",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.6-preview-224dff25",
  "@metamask-previews/keyring-controller": "19.0.6-preview-224dff25",
  "@metamask-previews/logging-controller": "6.0.3-preview-224dff25",
  "@metamask-previews/message-manager": "12.0.0-preview-224dff25",
  "@metamask-previews/multichain": "2.1.0-preview-224dff25",
  "@metamask-previews/multichain-transactions-controller": "0.2.0-preview-224dff25",
  "@metamask-previews/name-controller": "8.0.2-preview-224dff25",
  "@metamask-previews/network-controller": "22.2.0-preview-224dff25",
  "@metamask-previews/notification-services-controller": "0.20.0-preview-224dff25",
  "@metamask-previews/permission-controller": "11.0.5-preview-224dff25",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-224dff25",
  "@metamask-previews/phishing-controller": "12.3.1-preview-224dff25",
  "@metamask-previews/polling-controller": "12.0.2-preview-224dff25",
  "@metamask-previews/preferences-controller": "15.0.1-preview-224dff25",
  "@metamask-previews/profile-sync-controller": "7.0.0-preview-224dff25",
  "@metamask-previews/queued-request-controller": "9.0.0-preview-224dff25",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-224dff25",
  "@metamask-previews/remote-feature-flag-controller": "1.3.0-preview-224dff25",
  "@metamask-previews/selected-network-controller": "21.0.0-preview-224dff25",
  "@metamask-previews/signature-controller": "23.2.0-preview-224dff25",
  "@metamask-previews/token-search-discovery-controller": "2.0.0-preview-224dff25",
  "@metamask-previews/transaction-controller": "45.0.0-preview-224dff25",
  "@metamask-previews/user-operation-controller": "24.0.0-preview-224dff25"
}

@shane-t shane-t requested a review from a team as a code owner February 6, 2025 16:39
@shane-t

shane-t commented Feb 20, 2025

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/accounts-controller": "24.0.0-preview-1cc9329c",
  "@metamask-previews/address-book-controller": "6.0.3-preview-1cc9329c",
  "@metamask-previews/announcement-controller": "7.0.3-preview-1cc9329c",
  "@metamask-previews/approval-controller": "7.1.3-preview-1cc9329c",
  "@metamask-previews/assets-controllers": "51.0.0-preview-1cc9329c",
  "@metamask-previews/base-controller": "8.0.0-preview-1cc9329c",
  "@metamask-previews/bridge-controller": "0.0.0-preview-1cc9329c",
  "@metamask-previews/build-utils": "3.0.3-preview-1cc9329c",
  "@metamask-previews/composable-controller": "11.0.0-preview-1cc9329c",
  "@metamask-previews/controller-utils": "11.5.0-preview-1cc9329c",
  "@metamask-previews/earn-controller": "0.4.0-preview-1cc9329c",
  "@metamask-previews/ens-controller": "15.0.2-preview-1cc9329c",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-1cc9329c",
  "@metamask-previews/gas-fee-controller": "22.0.3-preview-1cc9329c",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-1cc9329c",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-1cc9329c",
  "@metamask-previews/keyring-controller": "19.2.0-preview-1cc9329c",
  "@metamask-previews/logging-controller": "6.0.4-preview-1cc9329c",
  "@metamask-previews/message-manager": "12.0.1-preview-1cc9329c",
  "@metamask-previews/multichain": "2.1.1-preview-1cc9329c",
  "@metamask-previews/multichain-network-controller": "0.1.1-preview-1cc9329c",
  "@metamask-previews/multichain-transactions-controller": "0.4.0-preview-1cc9329c",
  "@metamask-previews/name-controller": "8.0.3-preview-1cc9329c",
  "@metamask-previews/network-controller": "22.2.1-preview-1cc9329c",
  "@metamask-previews/notification-services-controller": "0.21.0-preview-1cc9329c",
  "@metamask-previews/permission-controller": "11.0.6-preview-1cc9329c",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-1cc9329c",
  "@metamask-previews/phishing-controller": "12.3.2-preview-1cc9329c",
  "@metamask-previews/polling-controller": "12.0.3-preview-1cc9329c",
  "@metamask-previews/preferences-controller": "15.0.2-preview-1cc9329c",
  "@metamask-previews/profile-sync-controller": "8.1.0-preview-1cc9329c",
  "@metamask-previews/queued-request-controller": "9.0.1-preview-1cc9329c",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-1cc9329c",
  "@metamask-previews/remote-feature-flag-controller": "1.5.0-preview-1cc9329c",
  "@metamask-previews/selected-network-controller": "21.0.1-preview-1cc9329c",
  "@metamask-previews/signature-controller": "23.2.1-preview-1cc9329c",
  "@metamask-previews/token-search-discovery-controller": "2.1.0-preview-1cc9329c",
  "@metamask-previews/transaction-controller": "46.0.0-preview-1cc9329c",
  "@metamask-previews/user-operation-controller": "25.0.0-preview-1cc9329c"
}

@shane-t shane-t force-pushed the MMI-5803-deferral-proposal-2 branch from 62f47cf to b5c69f0 Compare March 27, 2025 13:58
- Added flow only will be activated if chainId is defined in feature flags.
- Configure pending transaction polling intervals using remote feature flags ([#5549](https://github.com/MetaMask/core/pull/5549))

### Changed

@matthewwalsh0 matthewwalsh0 Mar 31, 2025

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.

This is the wrong place now, probably a bad merge.

But I also had comments concerning the formatting below, so maybe quickest to remove this and I can add back when we release?

We'd ideally want separate categories like Removed for the deletions, and we can group things together under a single pull request reference.

/**
* Request parameters for updating a custodial transaction.
*
* @param transactionId - The ID of the transaction to update.

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 move these to the properties themselves rather than JSDoc?

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.

@matthewwalsh0 matthewwalsh0 merged commit ee00da5 into main Mar 31, 2025
@matthewwalsh0 matthewwalsh0 deleted the MMI-5803-deferral-proposal-2 branch March 31, 2025 13:59
matallui added a commit that referenced this pull request Mar 31, 2025
…roller

* origin/main:
  feat: support transactions from account snaps that should not be published (#5045)
  chore: bump accounts dependencies (#5565)
  chore: remove `goerli` and `linea goerli` from `network-controller` as default network (#5560)
  export Caip25Errors from @metamask/chain-agnostic-permission package (#5566)
github-merge-queue Bot pushed a commit to MetaMask/metamask-extension that referenced this pull request Apr 8, 2025
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Upgrades `@metamask/transaction-controller` to v53.0.0

Also removes the MMI hooks, so that we are no longer dependent on the
custodyStatus/custodyId properties from transaction controller, given
that they were removed in v53.0.0. MMI is deprecated, so this code is
gradually being cleared out.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/31597?quickstart=1)

## **Related issues**

Core PR: MetaMask/core#5045

## **Manual testing steps**

`yarn lint` will break otherwise

## **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**

- [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.

---------

Co-authored-by: Matthew Walsh <matthew.walsh@consensys.net>
Co-authored-by: Vinicius Stevam <vinicius.stevam@consensys.net>
Co-authored-by: Vinicius Stevam <45455812+vinistevam@users.noreply.github.com>
github-merge-queue Bot pushed a commit to MetaMask/metamask-extension that referenced this pull request Apr 9, 2025
…andling (#30180)

## **Description**

Explanation
Relates to MetaMask/core#5045

References
[Institutional Snap
RAPID](https://docs.google.com/document/d/16vKfRpbJrdtTMKaCU7wS61ffaEUe8vLZgZbxdLF39MY/edit?tab=t.0#heading=h.r7r3tthf4lsf)

>The majority of our custodians are still on ECA-1 (or have APIs with an
equivalent functionality).

> This presents a limitation because the keyring API does not support a
workflow where the keyring does not return a signature for publication.

> We propose to repurpose the existing asynchronous transaction workflow
that was used for MMI. Accordingly, we would bring a small amount of MMI
logic (currently code-fenced) into MetaMask, and decide on publication
at an account level.

We use the existing beforePublish hook in metamask-controller to read
this `custodianPublishesTransaction` option (set at account level by the
institutional snap and tell the transaction controller not to publish
based on it. As a side effect, this hook also sets the hash of the
transaction and marks it as submitted.

Additionally, custodians can change some transaction parameters. In
order to update the params before they are compared with the signature,
the InstitutionalSnapController fetches these parameters from the snap.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/30180?quickstart=1)

## **Related issues**

Fixes:

## **Manual testing steps**



## **Screenshots/Recordings**


https://github.com/user-attachments/assets/b17e6776-6ae8-457a-988a-da9d2716598a



### **Before**

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

### **After**

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

## **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.

---------

Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.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