Data sources
Milky's oracle does not invent prices. Every quote is grounded in real-world market data sourced from professional pricing providers and combined through an aggregation layer that prioritizes conservative outputs.
Primary source: Alt.xyz
The production primary data source is Alt.xyz, a graded-card analytics platform with deep coverage of cert-level pricing data.
For each price request, the Milky backend asks Alt for:
- The current value of the specific card at the specific grade, expressed in USD.
- A confidence band (lower bound, upper bound) reflecting recent sale dispersion.
- The graded-population statistics for the card (how many copies exist at each grade), which feeds into a confidence tier.
- Recent sale history that the backend can use for sanity checks.
Alt's data is cert-resolved end-to-end: a PSA cert number maps to a specific canonical asset, and pricing is grade-specific. This is the exact granularity Milky needs for loan-by-loan pricing.
Optional second source: CardHedger
The aggregator layer (OracleAggregator) supports a second source
that can be enabled per pool or globally. CardHedger is the canonical
secondary integration today: it provides comparable cert-level pricing
for sports and TCG cards.
When two sources are active, the aggregator:
- Compares the two sources' headline FMVs.
- Refuses to sign if the disagreement exceeds a configured tolerance (this protects against silently using a faulty source).
- When they agree within tolerance, picks the lower of the two headline FMVs as the value to sign. This is a conservative posture — it tilts toward under-lending rather than over-lending.
In production today the system can be operated in single-source mode (Alt only) for collections where Milky has high confidence in Alt's coverage and lower confidence in CardHedger, or in two-source mode where both are active and the conservative-min behavior kicks in.
How the FMV is chosen within a source
Within Alt's response, the protocol could in principle anchor the signed FMV on different points of the confidence band:
- The headline value (Alt's best-estimate current price).
- The lower bound of Alt's confidence band (more conservative).
- A moving average of recent values (smoother but more lagged).
Today's production behavior in single-source mode signs the headline value. The architecture supports anchoring on the lower bound and applying additional sanity bands; those are roadmap items as the protocol's risk tooling matures. The conservative LTV (default 70%) gives meaningful headroom regardless of which point on the band the FMV is anchored to.
What is not a data source today
For clarity:
- eBay sold listings are referenced indirectly through Alt's data pipeline, but the protocol does not scrape eBay directly.
- General Pyth / Switchboard feeds are not consulted for card prices. They are not a meaningful pricing surface for graded cards.
- Manual price overrides are not part of the production quote path.
How LTV is determined
In addition to the FMV, the oracle picks an LTV in basis points for each quote. The chosen LTV is constrained from above by:
- The global maximum LTV (currently 90%).
- The pool's
max_ltv_bps(often 70% in production pools). - The pricing source's confidence — for a card with a wide confidence band or thin recent sales, the oracle can drop the LTV below the pool ceiling.
The borrower sees the chosen LTV in the quote and can decide whether to proceed at that level.
When pricing is unavailable
If the oracle's data source returns no usable data — Alt is offline,
the cert lookup fails, or the confidence is too low to safely lend
against — the backend returns a PRICING_UNAVAILABLE error and the
loan request is rejected at the off-chain layer. The chain never sees
the request.
This is by design. The protocol prefers a clean rejection at the quote step over a degraded, possibly-incorrect signed price reaching the chain.
Read next
- Signed quotes — what the backend does once it has decided on a price.
- Trust assumptions — what you're trusting these data sources to get right.