# Withdrawal priced before loss update

Payout or share price fixed at request time, before slashing or loss changes the rate

_Area: DeFi accounting and math bugs. Seen in 3 disclosed reports; latest 2025-07-07. Updated 2026-10-25._

## How it works
A withdrawal's payout is computed and stored when the request is made, using the exchange rate or share price at that moment. Later events — a slashing, a loss report, a balance verification, or a market close — lower the real value of the pool, but the stored amount is not recomputed. The early withdrawer is paid at the old, higher rate; the shortfall lands on whoever withdraws later. The broken assumption is that the rate at request time equals the rate at settlement time. The invariant that must hold: every payout is priced against the pool's current, post-loss assets, so the sum of all payouts never exceeds what the pool actually holds.

## Where it shows up
- Withdrawal queues that store a fixed `sharesOwed`, `hypeAmount`, or normalized amount at request time and pay it unchanged at confirm time.
- Permissionless or oracle-driven updates that reduce TVL (slashing, `verifyBalanceUpdates`, loss reports) between queue and confirm.
- Pro-rata payout via `mulDiv(amount, scaledAmount, scaledTotalAmount)` where batches can execute partially, e.g. after a market closes.

## How to review
Check whether the payout amount is recomputed against the current rate at settlement, or whether the rate is guaranteed unchanged between request and payout. No request may be settled at a rate that ignores a loss already reflected on-chain. For pro-rata math, verify that many small requests cannot round the batch rate down enough that early executions break `sum <= normalizedAmountPaid` [E1](https://bugbountylibrary.com/r/c4%3A2024-08-wildcat%3AH-01.md).

## Variants seen
- Market close allows partial batch execution at a higher rate; rounding lets early withdrawers overdraw, later ones revert [E1](https://bugbountylibrary.com/r/c4%3A2024-08-wildcat%3AH-01.md).
- Withdrawal shares fixed at request time, front-running EigenPod slashing [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-rio-network-core-protocol%3AM-7.md).
- `queueWithdrawal` stores `hypeAmount`; `confirmWithdrawal` never recalculates after slashing [E3](https://bugbountylibrary.com/r/c4%3A2025-04-kinetiq%3AH-02.md).

## Impact and severity
High: funds trapped or shifted onto later users [E1](https://bugbountylibrary.com/r/c4%3A2024-08-wildcat%3AH-01.md)[E3](https://bugbountylibrary.com/r/c4%3A2025-04-kinetiq%3AH-02.md), losses avoidable by front-running [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-rio-network-core-protocol%3AM-7.md). Worse when losses are permissionless to trigger and queues are first-come-first-served.

## Evidence
- E1: https://bugbountylibrary.com/r/c4%3A2024-08-wildcat%3AH-01.md
- E2: https://bugbountylibrary.com/r/sherlock%3A2024-02-rio-network-core-protocol%3AM-7.md
- E3: https://bugbountylibrary.com/r/c4%3A2025-04-kinetiq%3AH-02.md
