perf: clear deallocation queue once per strategy in modifyAllocations #1676
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.
Motivation:
The deallocationQueue is indexed only by (operator, strategy), not by operatorSet, therefore:
with multiple sets (operatorSet) and/or multiple strategies in a single call, the same queue will attempt to clear itself multiple times;
after the first complete clearing, subsequent calls only read the length and exit immediately, but these are still unnecessary reads and cycles.
Modifications:
Switched modifyAllocations to take AllocateParams[] calldata params and added per-call tracking of seen strategies so clearDeallocationQueue(operator, strategy, type(uint16).max) is invoked at most once per (operator, strategy) per transaction instead of on every inner loop iteration.
Result:
For a batch modifyAllocations that touches the same strategy across multiple operator sets, the contract will do fewer reads and iterations over deallocationQueue[operator][strategy], reducing gas, while still guaranteeing that all completable pending deallocations for that strategy are cleared before applying any new allocation changes.