# MultiInvoker closableAmount the calculation logic is wrong

MultiInvoker._latest() used latestPosition.magnitude() instead of pendingPosition.magnitude() for previousMagnitude, corrupting closableAmount and causing liquidation reverts.

- Payout: Contest reward
- Severity: medium
- Program: Perennial
- Credited: bin2chen
- Disclosed: 2023-10-26
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-10-perennial-judging/issues/41
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-10-perennial%3AM-11
- Tags: domain:web3 impact:dos kind:contest platform:sherlock sev:medium tech:evm tech:solidity technique:source-review vuln:accounting-error vuln:liquidation

**Target:** MultiInvoker._latest() view helper in perennial-extensions
**Root cause:** In the pending-position loop, previousMagnitude is set to latestPosition.magnitude() rather than the current pendingPosition.magnitude(), so the closableAmount subtraction uses a stale magnitude inconsistent with Market.sol's _processPendingPosition logic.
**Steps:**
1. Read Market.sol _processPendingPosition: after each pending position, set context.previousPendingMagnitude = newPendingPosition.magnitude().
2. Read MultiInvoker._latest(): in the else branch it sets `previousMagnitude = latestPosition.magnitude();` instead of `pendingPosition.magnitude()`.
3. Construct an account with multiple pending positions where magnitudes differ; closableAmount diverges from Market's computation.
4. Observe downstream consumers like _liquidationFee() misjudge closability, causing liquidation to revert.
**How found:** Compared the closableAmount loop in MultiInvoker._latest() against the equivalent loop in Market._processPendingPosition and noticed the previousMagnitude assignment referenced latestPosition instead of the pending position.
**Insight:** When a helper re-implements a core accounting loop, diff it line-by-line against the canonical implementation; subtle variable-source swaps (latest vs pending) silently diverge and break downstream judgments.
