1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 03:36:18 +02:00
metamask-extension/app/scripts
Mark Stacey 9c06b07c3c
Synchronously update transaction status (#8563)
All transaction status updates were moved into a `setTimeout` callback
and wrapped in a `try...catch` block in #4131, apparently in an attempt
to prevent failures in event subscribers from interrupting the
transaction logic. The `try...catch` block did accomplish that, but by
putting the status update in a `setTimeout` callback the operation was
made asynchronous.

Transaction status updates now happen unpredictably, in some future
event loop from when they're triggered. This creates a race condition,
where the transaction status update may occur before or after
subsequent state changes. This also introduces a risk of accidentally
undoing a change to the transaction state, as the update made to the
transaction inside the `setTimeout` callback uses a reference to
`txMeta` obtained synchronously before the `setTimeout` call. Any
replacement of the `txMeta` between the `setTxStatus` call and the
execution of the timeout would be erased. Luckily the `txMeta` object
is more often than not mutated rather than replaced, which may explain
why we haven't seen this happen yet.

Everything seems to work correctly with the `setTimeout` call removed,
and now the transaction logic is easier to understand.
2020-05-09 10:46:58 -03:00
..
account-import-strategies Clean up "JSON File" import strategy test output (#7855) 2020-01-17 19:59:47 -03:30
controllers Synchronously update transaction status (#8563) 2020-05-09 10:46:58 -03:00
lib Delete Balance controller and pending balances calculator (#8542) 2020-05-06 20:19:28 -03:00
migrations Delete Dai/Sai migration notification (#8418) 2020-04-27 16:23:43 -02:30
platforms Move export defaults statements alongside their objects (#8525) 2020-05-05 19:49:38 -02:30
background.js Open notification UI when eth_requestAccounts waits for unlock (#8508) 2020-05-05 07:03:21 -07:00
chromereload.js Fix console.error references 2016-08-29 17:32:39 -07:00
contentscript.js Merge pull request #8056 from whymarrh/arrow-parens 2020-02-17 15:26:43 -07:00
first-time-state.js Migrate codebase to use ESM (#7730) 2020-01-09 00:04:58 -03:30
inpage.js Add new inpage provider package (#8442) 2020-04-28 17:14:51 -07:00
metamask-controller.js Allow disabling alerts (#8550) 2020-05-08 16:45:52 -03:00
phishing-detect.js Replace METAMASK_UI_TYPE global with helper function (#8279) 2020-04-01 19:28:10 -03:00
ui.js Remove ineffectual close popup function (#8316) 2020-04-10 12:27:58 -03:00