fix/account-tracker-prevent-empty-state-update #5942
Merged
+54
−19
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.
Explanation
This change prevents AccountTrackerController from overwriting cached balances with empty or unchanged state during refresh operations.
Currently, if all balance requests for a chain fail or return undefined (e.g., due to a temporary network issue), the controller updates the state with an empty object, erasing previous data. Additionally, even when the new balance data is identical to the current state, an update is still triggered, resulting in unnecessary stateChange emissions and potential UI re-renders.
This update introduces guards within the refresh method to:
These changes help improve performance and stability, particularly under poor network conditions or when balance polling is frequent.
References
Changelog
@metamask/assets-controllers
UPDATE: Prevent AccountTrackerController from updating state with empty or unchanged data during balance refresh. Adds checks to avoid overwriting valid cached balances and reduce unnecessary stateChange emissions.
Checklist