Measurement method
The method is the product. A number nobody can reproduce is a marketing claim.
These are commitments, not aspirations. Each one is enforced by the response shape: if a result cannot state its size, its window and its source, it is not published.
- Observed, not modeled. Estimates derive from recorded depth snapshots. Where a modeled component is unavoidable, it is labeled as such in the response.
- Size is always explicit. There is no *the* fill price, only a fill price *for a size*. Every result states the size it was computed for.
- The observation window is disclosed.
as_ofanddays_observedappear on every result. - The depth source is disclosed. Which pools, which venues, which snapshot cadence.
- Stress over average. Headline risk fields report the worst observed condition in the window, not the mean.
- Verification is keyless.
evidence_urlresolves for anyone, with no account. - Estimates are scored against outcomes. Every published estimate is retained and compared to realized fills where observable.
What Crifine does not claim
- It does not predict price. It measures the cost of acting on a price.
- It does not model MEV, sandwich exposure or adversarial reordering in v1. Those are execution-layer risks stacked on top of depth risk, and conflating them would make the core number less honest, not more complete.
- It does not guarantee a fill. It reports what observed depth implies, with the window stated.
The ladder walk
For a requested size, each ladder band is filled in turn and its slippage weighted by the amount taken from it. The volume-weighted average is applied to the oracle price to produce realized_price_est.
let remaining = sizeUsd;
let weightedBps = 0;
let filled = 0;
for (const level of ladder) {
if (remaining <= 0) break;
const take = Math.min(remaining, level.usd);
weightedBps += take * level.bps;
filled += take;
remaining -= take;
}
// Past the last observed band the book is not merely thin, it is unmeasured.
// The remainder is charged at a penalty rate and the result is flagged rather
// than extrapolated — an estimate past the edge of the data is a guess.
const exceedsBook = remaining > 0;
if (exceedsBook) weightedBps += remaining * TAIL_PENALTY_BPS;
const slippageBps = (weightedBps / sizeUsd) * sessionPenalty;
const realizedPriceEst = oraclePrice * (1 - slippageBps / 10_000);The session penalty
When the underlying market is closed, the observed book is not the book that would absorb the trade — the participants who would have quoted against it have gone home. RWA results apply a session penalty to the walked slippage, and market_open: false is always present so you can strip it back out and reason about the raw ladder yourself.