# Burning does not update reserves

ConcentratedLiquidityPool.burn decrements reserves only by fees, not by withdrawn amounts, leaving reserves inflated and breaking mint/swap balance checks.

- Payout: Audit contest
- Severity: high
- Program: Sushi
- Found by: cmichel
- Disclosed: 2021-11-30
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2021-09-sushitrident-2-findings/issues/51
- Library page: https://bugbountylibrary.com/r/c4%3A2021-09-sushitrident-2%3AH-13
- Tags: area:web3 domain:web3 impact:dos impact:funds-loss kind:contest platform:code4rena sev:high tech:evm tech:solidity technique:source-review vuln:accounting-error

**Target:** ConcentratedLiquidityPool.burn (Solidity AMM contract)
**Root cause:** burn transfers amount0/amount1 out but only subtracts amount0fees/amount1fees from reserve0/reserve1, so reserves stay higher than actual token balance.
**Steps:**
1. Call `ConcentratedLiquidityPool.burn` to withdraw liquidity, transferring amount0/amount1 out.
2. Observe reserve0/reserve1 decreased only by amount0fees/amount1fees, not by amount0/amount1.
3. Call `mint` or `swap`; the check `amount0Actual + reserve0 <= _balance(token0)` fails because reserve0 exceeds real balance.
4. LP/trader must supply extra tokens to satisfy the inflated reserve check.
**How found:** Code review of burn's unchecked block noticing reserve decrement used fee amounts instead of transferred amounts.
**Insight:** In AMM accounting, verify every token outflow path decrements reserves by the full transferred amount, not just fees; grep for reserve updates in burn/withdraw functions.

