fix: bug in calculation of the next id in MultiTroveGetter #801
+1
−1
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.
The function skips nodes when using continuation-based pagination.
When calling
getDebtPerInterestRateAscending(collIndex, startId, maxIter)
, the function does:currId = sortedTroves.getPrev(_startId);
This causes a skip when chaining calls. For example:
But when fetching multiple at once:
The 15.1% trove is missing when paginating one by one because we're using the returned
currId
as the nextstartId
. When we do this,getPrev(startId)
skips over thestartId
node itself.One fix would be modifying the startId logic in the function:
currId = _startId == 0 ? sortedTroves.getPrev(_startId) : _startId;
This would preserve the node we're starting from rather than skipping to its prev immediately.
The current workaround requires making an extra call to
sortedTroves.getNext()
between paginated fetches, but that adds some costs and latency that could be avoided with the suggested fix (and the IR canister should try to avoid it as much as possible as the calls take a long time already).