# Asset identity mismatch in DeFi accounting

Same asset or pool value tracked under different identities or denominators across accounting paths

_Area: DeFi accounting and math bugs. Seen in 6 disclosed reports; latest 2025-06-27. Updated 2026-10-23._

## How it works
Accounting code assumes a token has one identity and one value basis everywhere it is referenced. That assumption breaks when the same economic asset is represented differently in two places: native ETH vs WETH vs `address(0)`, one shared receipt token across many pools, or a per-chain share computed from deposits in one function and from liquidation amounts in another. Each path is locally consistent, so nothing reverts at the point of the bug; the mismatch only surfaces when the two paths meet, and the ledger drifts from reality.

## Where it shows up
- Native ETH normalized to `address(0)` in one helper but compared against WETH (or vice versa) in redemption/swap branches [E1](https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md)
- A single receipt/ValueToken minted and burned without binding to a pool or closure id [E2](https://bugbountylibrary.com/r/sherlock%3A2025-04-burve%3AM-4.md)
- Two functions splitting the same pool using different denominators (deposit share vs liquidation share) [E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md)
- Wrap/unwrap steps that change token identity mid-flow, leaving later branches selling a token the vault no longer holds [E1](https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md)
- Aggregate totals reduced by one formula while per-chain shares are derived from another [E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md)

## How to review
The invariant: for any asset, every accounting path must use the same identity and the same denominator. Concretely:
- Trace each token through wrap/unwrap and confirm comparisons use the canonical form actually held at that point, not a sentinel [E1](https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md).
- For shared receipt tokens, confirm mint and burn are bound to the same pool id, so value cannot move between pools [E2](https://bugbountylibrary.com/r/sherlock%3A2025-04-burve%3AM-4.md).
- When two functions split one pool, verify both use the same base quantity; recompute a small example by hand and check the aggregate total cannot underflow [E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md).

## Variants seen
- Native-vs-wrapped sentinel mismatch breaking proportional exits [E1](https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md)
- One fungible receipt token shared across pools, redeemable cross-pool [E2](https://bugbountylibrary.com/r/sherlock%3A2025-04-burve%3AM-4.md)
- Per-chain share basis diverging from the aggregate reduction basis [E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md)

## Impact and severity
Ledger drift, blocked withdrawals, and value drain from LPs [E1](https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md)[E2](https://bugbountylibrary.com/r/sherlock%3A2025-04-burve%3AM-4.md)[E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md). Severity rises when the mismatch is silent (no revert on the bad path) and when an aggregate counter can underflow, since that blocks all later withdrawals for every user, not just the affected chain [E3](https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md).

## Evidence
- E1: https://bugbountylibrary.com/r/sherlock%3A2025-06-notional-exponent%3AM-22.md
- E2: https://bugbountylibrary.com/r/sherlock%3A2025-04-burve%3AM-4.md
- E3: https://bugbountylibrary.com/r/sherlock%3A2024-11-autonomint%3AH-19.md
