Skip to content

Conversation

@dawnseeker8
Copy link
Contributor

@dawnseeker8 dawnseeker8 commented Nov 21, 2025

This PR will fix some issue caused by user reject transaction in hardware wallet, which cause a lot of incorrect event log in segment.

Updated the transaction approval logic to check the status of the transaction. If the transaction fails due to user rejection or other errors, it now publishes a failure message with the error details. This change improves error handling and user feedback during transaction processing.

Explanation

References

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, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

Note

Ensure post-approval emits transactionFailed (with error) instead of transactionApproved when the transaction ends in failed status (e.g., hardware wallet rejection).

  • Transaction approval flow (packages/transaction-controller/src/TransactionController.ts):
    • After approval, check updatedTransactionMeta.status; if failed, publish ${controllerName}:transactionFailed with error message, else publish ${controllerName}:transactionApproved.

Written by Cursor Bugbot for commit e0caebb. This will update automatically on new commits. Configure here.

Updated the transaction approval logic to check the status of the transaction. If the transaction fails due to user rejection or other errors, it now publishes a failure message with the error details. This change improves error handling and user feedback during transaction processing.
@dawnseeker8
Copy link
Contributor Author

@metamaskbot publish-preview

transactionMeta: updatedTransactionMeta,
actionId,
error: updatedTransactionMeta?.error?.message ?? 'Unknown error',
});
Copy link

Choose a reason for hiding this comment

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

Bug: Duplicate transaction failed event publication

The transactionFailed event is published twice when a transaction fails during approval. The #approveTransaction method already calls #failTransaction which publishes the transactionFailed event, but the new code checks the status and publishes it again. This creates duplicate event emissions that could cause incorrect analytics tracking and unexpected behavior in event listeners.

Fix in Cursor Fix in Web

@github-actions
Copy link
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/account-tree-controller": "4.0.0-preview-e0caebb",
  "@metamask-previews/accounts-controller": "35.0.0-preview-e0caebb",
  "@metamask-previews/address-book-controller": "7.0.1-preview-e0caebb",
  "@metamask-previews/analytics-controller": "0.0.0-preview-e0caebb",
  "@metamask-previews/announcement-controller": "8.0.0-preview-e0caebb",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-e0caebb",
  "@metamask-previews/approval-controller": "8.0.0-preview-e0caebb",
  "@metamask-previews/assets-controllers": "91.0.0-preview-e0caebb",
  "@metamask-previews/base-controller": "9.0.0-preview-e0caebb",
  "@metamask-previews/bridge-controller": "63.0.0-preview-e0caebb",
  "@metamask-previews/bridge-status-controller": "63.0.0-preview-e0caebb",
  "@metamask-previews/build-utils": "3.0.4-preview-e0caebb",
  "@metamask-previews/chain-agnostic-permission": "1.2.2-preview-e0caebb",
  "@metamask-previews/claims-controller": "0.2.0-preview-e0caebb",
  "@metamask-previews/composable-controller": "12.0.0-preview-e0caebb",
  "@metamask-previews/controller-utils": "11.16.0-preview-e0caebb",
  "@metamask-previews/core-backend": "5.0.0-preview-e0caebb",
  "@metamask-previews/delegation-controller": "2.0.0-preview-e0caebb",
  "@metamask-previews/earn-controller": "11.0.0-preview-e0caebb",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-e0caebb",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-e0caebb",
  "@metamask-previews/eip1193-permission-middleware": "1.0.2-preview-e0caebb",
  "@metamask-previews/ens-controller": "19.0.0-preview-e0caebb",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-e0caebb",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-e0caebb",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.0-preview-e0caebb",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-e0caebb",
  "@metamask-previews/foundryup": "1.0.1-preview-e0caebb",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-e0caebb",
  "@metamask-previews/gator-permissions-controller": "0.6.0-preview-e0caebb",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-e0caebb",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-e0caebb",
  "@metamask-previews/keyring-controller": "25.0.0-preview-e0caebb",
  "@metamask-previews/logging-controller": "7.0.1-preview-e0caebb",
  "@metamask-previews/message-manager": "14.1.0-preview-e0caebb",
  "@metamask-previews/messenger": "0.3.0-preview-e0caebb",
  "@metamask-previews/multichain-account-service": "4.0.0-preview-e0caebb",
  "@metamask-previews/multichain-api-middleware": "1.2.4-preview-e0caebb",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-e0caebb",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-e0caebb",
  "@metamask-previews/name-controller": "9.0.0-preview-e0caebb",
  "@metamask-previews/network-controller": "26.0.0-preview-e0caebb",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-e0caebb",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-e0caebb",
  "@metamask-previews/permission-controller": "12.1.1-preview-e0caebb",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-e0caebb",
  "@metamask-previews/phishing-controller": "16.1.0-preview-e0caebb",
  "@metamask-previews/polling-controller": "16.0.0-preview-e0caebb",
  "@metamask-previews/preferences-controller": "22.0.0-preview-e0caebb",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-e0caebb",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-e0caebb",
  "@metamask-previews/remote-feature-flag-controller": "2.0.1-preview-e0caebb",
  "@metamask-previews/sample-controllers": "4.0.0-preview-e0caebb",
  "@metamask-previews/seedless-onboarding-controller": "7.0.0-preview-e0caebb",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-e0caebb",
  "@metamask-previews/shield-controller": "3.0.0-preview-e0caebb",
  "@metamask-previews/signature-controller": "37.0.0-preview-e0caebb",
  "@metamask-previews/subscription-controller": "5.0.0-preview-e0caebb",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-e0caebb",
  "@metamask-previews/transaction-controller": "62.0.0-preview-e0caebb",
  "@metamask-previews/transaction-pay-controller": "10.0.0-preview-e0caebb",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-e0caebb"
}

@dawnseeker8
Copy link
Contributor Author

@metamaskbot publish-preview


// need to check status of updatedTransactionMeta to see if it is approved
// for special case like user reject request in hardware wallet, the transactionMeta is failed with error "user rejected request"
if (updatedTransactionMeta.status === TransactionStatus.failed) {
Copy link
Member

Choose a reason for hiding this comment

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

However the approval is rejected, it should already throw from this.#requestApproval above and be caught in the below catch meaning the approval event wouldn't fire?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants