Concepts
Normalization
Why a reference price and a pool price aren't the same number until you scale them onto one axis.
A reference price and a pool price rarely quote in exactly the same terms. One might be denominated against a stablecoin, another against a wrapped asset, each with its own rounding and update cadence. Normalization takes every quoted price and maps it onto a single comparable scale — the reference — before anything else is computed. Only after that mapping does a gap between two numbers mean anything; comparing un-normalized quotes from two different venues is comparing two different units and calling it a spread.
A worked example
Take a reference price of $229.58 for an asset. One tracked pool quotes $229.593 for the same asset. Normalization doesn't change either number — it's the step that establishes they're now on the same axis, so the difference between them, ((229.593 − 229.58) / 229.58) × 10,000 ≈ +0.6bp, is a real, comparable deviation rather than an artifact of quoting convention.
That +0.6bp figure is what shows up as a pool's "Δ Ref" in Markets and as its Normalized-vs-Reference row in the Topology inspector. It's a small, unremarkable number precisely because the normalization step already did the work of making the two prices comparable.
What normalization is not
It's not a fair-value model and it doesn't smooth or average anything. It's a unit conversion, applied once per pool, per read. State.OS normalizes on read, not on write — the raw pool quote is always kept alongside the normalized figure, so a divergence can be traced back to exactly which pool produced it and what its unconverted number was.