# Utilization rate includes incremental action

Rate or fee computed from pool state that already includes, or ignores, the pending action

_Area: DeFi accounting and math bugs. Seen in 2 disclosed reports; latest 2024-11-16. Updated 2026-10-29._

## How it works

A price, rate, or fee is derived from pool state (utilization, open notional, balances). The bug is a mismatch between the state the formula reads and the state the action actually produces. Two opposite failures: the formula includes the pending amount, so each incremental call is priced at a different point on the curve than the final state; or the formula ignores the pending amount, so the action is priced at stale pre-action state. Either way the average price of a split or sequenced action differs from the price of the equivalent single action, and the actor picks the cheaper path.

## Where it shows up

- Interest/APR functions that call a utilization helper, with or without an amount delta argument [E1](https://bugbountylibrary.com/r/sherlock%3A2024-11-teller-finance-update%3AM-2.md)[E3](https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AM-7.md)
- Fee formulas keyed off a maker's open notional or receiver utilization ratio [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md)
- Any rate that is monotonic in utilization and recomputed per call
- Borrow/accept paths where the borrower chooses the minimum rate
- Whitelisted or fee-exempt actors who can move the state that prices others [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md)

## How to review

Identify the state variable the rate depends on, then ask: does the function read that variable before or after the action's effect is applied, and is that consistent with how the fee is charged? The invariant: the total cost of N sequential actions must equal the cost of one action of the same total size, and the rate charged must reflect the post-action state the position actually creates. Check both directions — including the delta can underprice splits [E1](https://bugbountylibrary.com/r/sherlock%3A2024-11-teller-finance-update%3AM-2.md); excluding it can underprice large single borrows [E3](https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AM-7.md). For maker-keyed fees, check whether a taker can grow the maker's notional while netting to zero, and whether the maker pays the fee they inflate [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md).

## Variants seen

- Post-borrow utilization included in the rate, so splitting a loan lowers average APR [E1](https://bugbountylibrary.com/r/sherlock%3A2024-11-teller-finance-update%3AM-2.md)
- Pre-borrow utilization used, so a large borrow pays the old lower rate and the max APR is unreachable [E3](https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AM-7.md)
- Maker open notional inflated by offsetting trades, raising fees charged to traders while the maker is fee-exempt [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md)

## Impact and severity

Underpriced interest cuts LP yield and lets borrowers pay less than intended [E1](https://bugbountylibrary.com/r/sherlock%3A2024-11-teller-finance-update%3AM-2.md)[E3](https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AM-7.md); inflated fees overcharge traders with no added liquidity [E2](https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md). Severity is moderate: value leaks steadily rather than in one drain, and worsens where the actor controls granularity or is fee-exempt.

## Evidence
- E1: https://bugbountylibrary.com/r/sherlock%3A2024-11-teller-finance-update%3AM-2.md
- E2: https://bugbountylibrary.com/r/sherlock%3A2024-02-perpetual%3AM-10.md
- E3: https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AM-7.md
