# [Perennial Self Review] Incorrect price used during liquidation calculation

Perennial liquidation logic used an incorrect oracle price, causing liquidations to be computed against a stale/wrong price rather than the latest valid market price.

- Payout: Contest reward
- Severity: medium
- Program: Perennial
- Credited: Protocol Team
- Disclosed: 2023-09-14
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-09-perennial-judging/issues/59
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-09-perennial%3AM-7
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity vuln:liquidation vuln:oracle-manipulation

**Target:** Perennial V2 liquidation / oracle price logic
**Root cause:** Liquidation calculation consumed an oracle price that did not match the latest valid price the Market process would use, so liquidations were evaluated against an incorrect price.
**Steps:**
1. Read liquidation path in Perennial V2 market code
2. Observe liquidation uses oracle.latest().price directly
3. Compare with Market process which uses latest valid oracle price
4. Note divergence when oracle price is requested/stale
5. Fix in PR #108 aligns liquidation price with correct market price
**How found:** Protocol team self-review of the liquidation calculation path, comparing the price source used in liquidation against the price the Market process uses.
**Insight:** When auditing liquidation math, verify the price source in the liquidation path matches the price source used by the core market accounting; a divergence (e.g. latest() vs latest valid) silently misprices liquidations.
