Skip to content

fix(transaction-controller): resimulate latest transaction data instead of stale captured data#9287

Draft
vinistevam wants to merge 2 commits into
mainfrom
vs/fix-resimulate-stale-transaction
Draft

fix(transaction-controller): resimulate latest transaction data instead of stale captured data#9287
vinistevam wants to merge 2 commits into
mainfrom
vs/fix-resimulate-stale-transaction

Conversation

@vinistevam

@vinistevam vinistevam commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Explanation

ResimulateHelper re-simulates active unapproved transactions every 3 seconds. The timer's #start captured the transactionMeta in a closure and, because it returns early when a timer already exists for the id, never refreshed it. When a transaction was updated after resimulation began (e.g. editing a batch approval amount), the loop kept simulating the stale parameters, causing the simulation result to flicker between the old and new outcomes.

#start now takes a transactionId and the timer reads the latest transaction from state on each tick (via a new #getResimulatableTransactions helper), stopping itself if the transaction is gone or no longer active.

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

…sure active transactions are correctly handled
@vinistevam

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.3-preview-ea6456e61
@metamask-previews/accounts-controller@39.0.3-preview-ea6456e61
@metamask-previews/address-book-controller@7.1.2-preview-ea6456e61
@metamask-previews/ai-controllers@0.7.0-preview-ea6456e61
@metamask-previews/analytics-controller@1.2.0-preview-ea6456e61
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-ea6456e61
@metamask-previews/announcement-controller@8.1.0-preview-ea6456e61
@metamask-previews/app-metadata-controller@2.0.1-preview-ea6456e61
@metamask-previews/approval-controller@9.0.2-preview-ea6456e61
@metamask-previews/assets-controller@9.1.0-preview-ea6456e61
@metamask-previews/assets-controllers@109.2.2-preview-ea6456e61
@metamask-previews/authenticated-user-storage@2.1.0-preview-ea6456e61
@metamask-previews/base-controller@9.1.0-preview-ea6456e61
@metamask-previews/base-data-service@0.1.3-preview-ea6456e61
@metamask-previews/bitcoin-regtest-up@0.0.0-preview-ea6456e61
@metamask-previews/bridge-controller@77.0.0-preview-ea6456e61
@metamask-previews/bridge-status-controller@73.0.0-preview-ea6456e61
@metamask-previews/build-utils@3.0.4-preview-ea6456e61
@metamask-previews/chain-agnostic-permission@1.6.2-preview-ea6456e61
@metamask-previews/chomp-api-service@3.1.0-preview-ea6456e61
@metamask-previews/claims-controller@0.5.3-preview-ea6456e61
@metamask-previews/client-controller@1.0.1-preview-ea6456e61
@metamask-previews/compliance-controller@2.1.0-preview-ea6456e61
@metamask-previews/composable-controller@12.0.1-preview-ea6456e61
@metamask-previews/config-registry-controller@0.4.1-preview-ea6456e61
@metamask-previews/connectivity-controller@0.2.0-preview-ea6456e61
@metamask-previews/controller-utils@12.3.0-preview-ea6456e61
@metamask-previews/core-backend@6.3.3-preview-ea6456e61
@metamask-previews/delegation-controller@3.0.2-preview-ea6456e61
@metamask-previews/earn-controller@12.2.1-preview-ea6456e61
@metamask-previews/eip-5792-middleware@3.0.4-preview-ea6456e61
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-ea6456e61
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-ea6456e61
@metamask-previews/ens-controller@19.1.4-preview-ea6456e61
@metamask-previews/eth-block-tracker@15.0.1-preview-ea6456e61
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-ea6456e61
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-ea6456e61
@metamask-previews/foundryup@1.0.1-preview-ea6456e61
@metamask-previews/gas-fee-controller@26.2.3-preview-ea6456e61
@metamask-previews/gator-permissions-controller@4.2.1-preview-ea6456e61
@metamask-previews/geolocation-controller@0.1.3-preview-ea6456e61
@metamask-previews/java-tron-up@0.0.0-preview-ea6456e61
@metamask-previews/json-rpc-engine@10.5.0-preview-ea6456e61
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-ea6456e61
@metamask-previews/keyring-controller@27.1.0-preview-ea6456e61
@metamask-previews/local-node-utils@0.0.0-preview-ea6456e61
@metamask-previews/logging-controller@8.0.2-preview-ea6456e61
@metamask-previews/message-manager@14.1.2-preview-ea6456e61
@metamask-previews/messenger@1.2.0-preview-ea6456e61
@metamask-previews/messenger-cli@0.2.0-preview-ea6456e61
@metamask-previews/money-account-balance-service@2.1.1-preview-ea6456e61
@metamask-previews/money-account-controller@0.3.3-preview-ea6456e61
@metamask-previews/money-account-upgrade-controller@2.1.0-preview-ea6456e61
@metamask-previews/multichain-account-service@11.1.0-preview-ea6456e61
@metamask-previews/multichain-api-middleware@3.1.5-preview-ea6456e61
@metamask-previews/multichain-network-controller@3.2.0-preview-ea6456e61
@metamask-previews/multichain-transactions-controller@7.1.1-preview-ea6456e61
@metamask-previews/name-controller@9.1.2-preview-ea6456e61
@metamask-previews/network-controller@33.0.0-preview-ea6456e61
@metamask-previews/network-enablement-controller@5.4.0-preview-ea6456e61
@metamask-previews/notification-services-controller@24.2.0-preview-ea6456e61
@metamask-previews/passkey-controller@2.0.1-preview-ea6456e61
@metamask-previews/permission-controller@13.1.1-preview-ea6456e61
@metamask-previews/permission-log-controller@5.1.0-preview-ea6456e61
@metamask-previews/perps-controller@9.0.0-preview-ea6456e61
@metamask-previews/phishing-controller@17.2.0-preview-ea6456e61
@metamask-previews/polling-controller@16.0.7-preview-ea6456e61
@metamask-previews/preferences-controller@23.1.0-preview-ea6456e61
@metamask-previews/profile-metrics-controller@4.0.0-preview-ea6456e61
@metamask-previews/profile-sync-controller@28.2.0-preview-ea6456e61
@metamask-previews/ramps-controller@15.0.0-preview-ea6456e61
@metamask-previews/rate-limit-controller@7.0.1-preview-ea6456e61
@metamask-previews/react-data-query@0.2.1-preview-ea6456e61
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-ea6456e61
@metamask-previews/sample-controllers@5.0.2-preview-ea6456e61
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-ea6456e61
@metamask-previews/selected-network-controller@26.1.4-preview-ea6456e61
@metamask-previews/shield-controller@5.1.2-preview-ea6456e61
@metamask-previews/signature-controller@39.2.6-preview-ea6456e61
@metamask-previews/smart-transactions-controller@24.2.3-preview-ea6456e61
@metamask-previews/snap-account-service@1.0.0-preview-ea6456e61
@metamask-previews/social-controllers@2.3.1-preview-ea6456e61
@metamask-previews/solana-test-validator-up@0.0.0-preview-ea6456e61
@metamask-previews/storage-service@1.0.2-preview-ea6456e61
@metamask-previews/subscription-controller@6.2.0-preview-ea6456e61
@metamask-previews/transaction-controller@68.2.0-preview-ea6456e61
@metamask-previews/transaction-pay-controller@23.17.1-preview-ea6456e61
@metamask-previews/user-operation-controller@41.2.5-preview-ea6456e61
@metamask-previews/wallet@5.0.0-preview-ea6456e61
@metamask-previews/wallet-cli@0.0.0-preview-ea6456e61

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.

[Bug]: Confirmations - Estimated changes keeps pivoting its result from Tx likely to fail to balance estimations every 1-2secs

1 participant