fix(bridge-ui): fix wrong balance updates on network switch #15980
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description:
There's a race condition in balance updates when switching networks. The
updateBalance
function is concurrently called byonNetworkChange
andonAccountChange
handlers leading to incorrect balance displays. This was because of the asynchronous execution ofupdateBalance
, which when invoked byonNetworkChange
, would update to the new network's balance. However, a simultaneous call fromonAccountChange
would still be running with data from the old network, sometimes resulting in the balance being updated with the outdated balance.Due to being a race condition, the issue only happens some of the time when switching the network.
Steps to Reproduce:
Resolution:
To address this issue, I added a check within the
onAccountChange
handler. Now, it verifies whetheronNetworkChange
already triggeres aupdateBalance
call due to a network switch. ThusupdateBalance
is not called with stale data on network change.Screenshot of the issue:
The screenshot bellow demonstrates the issue. It shows the user interface when executing the network switch, and how the balance was erroneously updated to 1 ETH instead of 10 ETH.