Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: transaction-controller – approveTransaction should not throw awa…
…y raw signed transaction (#4255) ## Explanation Changed `approveTransaction` to use `#updateTransactionInternal`. Addresses MetaMask/metamask-extension#24183 – Manually verified in extension. @matthewwalsh0 observed: The implementation of approveTransaction is throwing away the raw signed transaction that signTransaction was adding to the metadata state by holding onto a stale version of the tx metadata. ```typescript function approveTransaction(id) { const updatedMetadata = ... // signTransaction calls updateTransaction // So any existing references to the txMetadata will be stale. this.signTransaction(updatedMetadata) updateTransaction(updatedMetadata) // BUG: updatedMetadata is now stale. //... ``` Long-term @matthewwalsh0 recommends replaying updateTransaction with the more modern updateTransactionInternal everywhere to avoid bugs like this. ## References <!-- Are there any issues that this pull request is tied to? Are there other links that reviewers should consult to understand these changes better? For example: --> * Related to MetaMask/metamask-extension#24183 ## Changelog <!-- If you're making any consumer-facing changes, list those changes here as if you were updating a changelog, using the template below as a guide. (CATEGORY is one of BREAKING, ADDED, CHANGED, DEPRECATED, REMOVED, or FIXED. For security-related issues, follow the Security Advisory process.) Please take care to name the exact pieces of the API you've added or changed (e.g. types, interfaces, functions, or methods). If there are any breaking changes, make sure to offer a solution for consumers to follow once they upgrade to the changes. Finally, if you're only making changes to development scripts or tests, you may replace the template below with "None". --> ### `@metamask/transaction-controller` - **FIXED**: When resubmitting a pending transaction – if an 'already seen' error is caught (which indicates that the tx is still pending in the mempool), we should ignore the error instead of failing the transaction. ## 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
- Loading branch information