Skip to content

Conversation

@matthewwalsh0
Copy link
Member

@matthewwalsh0 matthewwalsh0 commented Dec 12, 2025

Explanation

Simplify the transaction timeout mechanism to not count attempts, but instead check the time since submit, or when the transaction was last seen on the network.

Calculates the timeout duration using the blockTime from the accelerated polling feature flags.

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
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Replaces attempt-based pending transaction timeout with a time-based check (since submit or last seen), using blockTime * threshold, and updates feature flags/tests accordingly.

  • Transaction logic (src/helpers/PendingTransactionTracker.ts):
    • Replace attempt counter with time-based timeout using submittedTime or last seen timestamp; derive timeout from getAcceleratedPollingParams().blockTime * threshold.
    • Track last-seen times per hash via #lastSeenTimestampByHash; reset when tx is seen and clear on confirm/fail/drop.
    • Use new #cleanTransaction to clear force-poll and last-seen state; remove timeout counter usage.
  • Feature flags (src/utils/feature-flags.ts):
    • Add default blockTime (12s) and include optional blockTime in acceleratedPolling.perChainConfig.
    • Update getAcceleratedPollingParams to return { blockTime, countMax, intervalMs }.
  • Tests:
    • Update PendingTransactionTracker.test.ts to use fake timers and validate time-based timeout, last-seen resets, and threshold behavior.
    • Extend feature-flags.test.ts to assert blockTime defaults, per-chain overrides, and merging.
  • Changelog:
    • Note timeout change to time-based and usage of acceleratedPolling.blockTime.

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

@matthewwalsh0 matthewwalsh0 marked this pull request as ready for review December 14, 2025 23:31
@matthewwalsh0 matthewwalsh0 requested review from a team as code owners December 14, 2025 23:31
@matthewwalsh0 matthewwalsh0 force-pushed the feat/simplify-transaction-timeout branch 2 times, most recently from a09f150 to f861274 Compare December 17, 2025 10:33
@matthewwalsh0 matthewwalsh0 force-pushed the feat/simplify-transaction-timeout branch from c57f946 to e776a73 Compare December 18, 2025 14:43
@matthewwalsh0
Copy link
Member 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-e776a73",
  "@metamask-previews/accounts-controller": "35.0.0-preview-e776a73",
  "@metamask-previews/address-book-controller": "7.0.1-preview-e776a73",
  "@metamask-previews/analytics-controller": "1.0.0-preview-e776a73",
  "@metamask-previews/announcement-controller": "8.0.0-preview-e776a73",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-e776a73",
  "@metamask-previews/approval-controller": "8.0.0-preview-e776a73",
  "@metamask-previews/assets-controllers": "94.1.0-preview-e776a73",
  "@metamask-previews/base-controller": "9.0.0-preview-e776a73",
  "@metamask-previews/bridge-controller": "64.2.0-preview-e776a73",
  "@metamask-previews/bridge-status-controller": "64.2.0-preview-e776a73",
  "@metamask-previews/build-utils": "3.0.4-preview-e776a73",
  "@metamask-previews/chain-agnostic-permission": "1.3.0-preview-e776a73",
  "@metamask-previews/claims-controller": "0.3.1-preview-e776a73",
  "@metamask-previews/composable-controller": "12.0.0-preview-e776a73",
  "@metamask-previews/controller-utils": "11.17.0-preview-e776a73",
  "@metamask-previews/core-backend": "5.0.0-preview-e776a73",
  "@metamask-previews/delegation-controller": "2.0.0-preview-e776a73",
  "@metamask-previews/earn-controller": "11.0.0-preview-e776a73",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-e776a73",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-e776a73",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-e776a73",
  "@metamask-previews/ens-controller": "19.0.0-preview-e776a73",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-e776a73",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-e776a73",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.1-preview-e776a73",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-e776a73",
  "@metamask-previews/foundryup": "1.0.1-preview-e776a73",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-e776a73",
  "@metamask-previews/gator-permissions-controller": "0.8.0-preview-e776a73",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-e776a73",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-e776a73",
  "@metamask-previews/keyring-controller": "25.0.0-preview-e776a73",
  "@metamask-previews/logging-controller": "7.0.1-preview-e776a73",
  "@metamask-previews/message-manager": "14.1.0-preview-e776a73",
  "@metamask-previews/messenger": "0.3.0-preview-e776a73",
  "@metamask-previews/multichain-account-service": "4.1.0-preview-e776a73",
  "@metamask-previews/multichain-api-middleware": "1.2.5-preview-e776a73",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-e776a73",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-e776a73",
  "@metamask-previews/name-controller": "9.0.0-preview-e776a73",
  "@metamask-previews/network-controller": "27.1.0-preview-e776a73",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-e776a73",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-e776a73",
  "@metamask-previews/permission-controller": "12.1.1-preview-e776a73",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-e776a73",
  "@metamask-previews/phishing-controller": "16.1.0-preview-e776a73",
  "@metamask-previews/polling-controller": "16.0.0-preview-e776a73",
  "@metamask-previews/preferences-controller": "22.0.0-preview-e776a73",
  "@metamask-previews/profile-metrics-controller": "2.0.0-preview-e776a73",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-e776a73",
  "@metamask-previews/ramps-controller": "2.0.0-preview-e776a73",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-e776a73",
  "@metamask-previews/remote-feature-flag-controller": "3.1.0-preview-e776a73",
  "@metamask-previews/sample-controllers": "4.0.0-preview-e776a73",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-e776a73",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-e776a73",
  "@metamask-previews/shield-controller": "4.0.0-preview-e776a73",
  "@metamask-previews/signature-controller": "38.0.0-preview-e776a73",
  "@metamask-previews/storage-service": "0.0.1-preview-e776a73",
  "@metamask-previews/subscription-controller": "5.4.0-preview-e776a73",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-e776a73",
  "@metamask-previews/transaction-controller": "62.7.0-preview-e776a73",
  "@metamask-previews/transaction-pay-controller": "10.5.0-preview-e776a73",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-e776a73"
}

@matthewwalsh0 matthewwalsh0 added this pull request to the merge queue Dec 19, 2025
Merged via the queue into main with commit ae876da Dec 19, 2025
559 of 565 checks passed
@matthewwalsh0 matthewwalsh0 deleted the feat/simplify-transaction-timeout branch December 19, 2025 14:59
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