This repository has been archived by the owner on Nov 15, 2023. It is now read-only.
Return early when fees/balances/values are zero #4628
Merged
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.
Fixes #4402
This PR adds a simple check before relevant balances functions that the "action to be performed" would result in a change.
For example: the function
can_slash
would normally query the free balance of a user and do a comparison function. However, ifcan_slash
hasvalue.is_zero()
, we can simply return true without doing a storage read.Further, a function like
set_lock
used to write zero amount locks, which we now skip. Same withadd_vesting_schedule
.Ultimately, this PR also catches situations where some external logic, like the fee system, would try to do some action into the balances module with value zero. This may trigger unexpected side effects like emitting a
ReapedAccount
event when nothing changed in the system.Please do not treat this PR as insubstantial. Would really want a second pair of eyes to confirm I have not broken any assumptions.