PnL limitations and refusal states

When SquirtFi will not give you a number, and why that is the correct answer.

The principle

Every PnL result is either a full breakdown or an explicit refusal with a machine- readable reason. There is no third branch that returns a plausible-looking number from incomplete data.

A refusal is not an error state to be hidden. It is the honest answer to a question the available data cannot support, and it always says what is missing and what would fix it.

The refusal reasons

ReasonWhat happened
History incompleteThe indexed window does not cover the whole life of the position, so cost basis cannot be established.
Transferred inThe position NFT arrived from another address. Its history before that belongs to someone else.
Missing historical markNo usable price existed for a block an event happened in.
No current markNo usable price exists right now to value the position.
Stale current markA price exists but is too old to value with, given the market session and the feed’s update behaviour.
Claimable unavailableUncollected fees could not be read, so unrealized PnL would be understated.
No depositsThere is no deposit history to compute a basis from.

What you still get

A refusal can still carry facts that are certain: collected fee amounts, current liquidity, whether the position is in range. Those are shown. What is never shown is a PnL figure derived from the gap.

Gas specifically

Gas is attributed to a transaction and counted exactly once, valued at the ETH mark for that transaction’s own block time rather than at today’s price. A missing historical mark makes that cost unknown, and unknown propagates: gross PnL is still reported, net PnL is not.

Where one transaction touches several positions, any per-position allocation is explicit, deterministic, and reconciles back to the total.

Rebalancing continuity

Closing one position and opening another is two positions on-chain. SquirtFi tracks the link so a rebalance does not read as a realized loss followed by an unrelated new deposit, but the continuity has to be established from indexed events. Where it cannot be, the positions are reported separately rather than merged on an assumption. See Understanding your Portfolio.