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

@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

Updated the transaction approval logic to differentiate between approved and failed transactions. If a transaction is not approved, a failure message is now published with relevant error details, improving error handling and user feedback during transaction processing.
});

if (approvalResult === ApprovalState.NotApproved) {
this.messenger.publish(`${controllerName}:transactionFailed`, {
Copy link
Member

Choose a reason for hiding this comment

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

This is already published in #failTransaction whenever the status is changed to failed.

So we can just check ApprovalState.Approved here instead, before publishing approved event.

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