Mark-to-Truth Auctions
Mark-to-Truth auctions provide a self-correcting, capital-based price discovery mechanism when the pool's spot price is called into question. Instead of relying on external oracles or appraisals, the protocol randomly samples actual assets from the pool and auctions them to discover what the market will actually pay.
Core principle: Truth should cost money. To move the protocol's reference price, participants must put real capital at risk—either through binding bids in auctions or accepting probability of delivery via micro-settlement. Opinions and appraisals don't update marks. Only capital does.
Design philosophy: Match mechanism weight to deviation severity. Small drifts (60-80 bps) get fast, low-friction corrections via informational auctions (RECENTER). Large deviations (200+ bps) get heavyweight proof via real asset sales (WIND-DOWN). Most of the time you're retuning the mark, not liquidating the pool. When things genuinely break, you prove it in cash.
Goal: Oracle-free price discovery that nudges spot toward objective NAV, and proves value in cash when deviations are severe.
How it works:
- Anyone can challenge the mark by posting a bond.
- The protocol runs a random-sample, sealed, uniform-price auction of real lots.
- From the executed book, it computes:
- Clearing price () and deviation ()
- Standard error ()
- -score ()
- Decision:
- CONFIRM (healthy): → keep , slash caller.
- RECENTER (soft reset): & not extreme → set ; informational by default; optional micro-settlement (%) to keep bids honest; protocol LP re-ranges around and adds temporary frictions.
- WIND-DOWN (severe): (confirmed) → execute tranched real sales to cash-prove value until stability returns.
Why it converges: To move the mark you must (i) marshal enough matched notional (scaled with ), (ii) create a tight book (low ), and (iii) accept a probability of real settlement (micro-fill or full WIND-DOWN). Cheap talk doesn't move price.
Notation / units: Percentages are decimals (10 bps = 0.0010). = current mark, = auction clearing price, , = lot count, = standard error, .
The problem: when pools lose their anchor
Pool prices can drift from fair value for many reasons. Thin liquidity makes price discovery unreliable. Manipulation pushes prices without fundamental justification. Information goes stale. Death spirals from cascading liquidations create reflexive downward pressure.
TWAP and RWAP provide manipulation resistance for short-term volatility, but they cannot detect sustained mispricings where the pool trades away from what assets are actually worth. When a $100 million pool of luxury watches drifts 120 basis points from fair value and stays there for days, you need something stronger than smoothing functions.
The core challenge: How do you know when the pool is mispriced versus when the market has legitimately re-evaluated the assets? You can't rely on external oracles (subjective, manipulable, stale). You can't trust continuous trading alone (manipulable, thin). You need a mechanism that forces participants to prove their conviction with capital.
Mark-to-Truth auctions are the backstop mechanism that answers this question through actual bids for actual assets. When pool health is questioned, the protocol runs a capital-based price discovery event. Most of the time this just validates the current mark (CONFIRM) or makes a small adjustment (RECENTER). Rarely, it discovers something is fundamentally broken (WIND-DOWN).
The key insight: Not all price movements are created equal. A 60 basis point drift needs different treatment than a 220 basis point crater. The mechanism matches response severity to deviation magnitude, proven through statistical confidence.
How it works: auction-driven price discovery
The mechanism works in three phases: first it checks whether an auction is even worth running, then it runs a sealed uniform-price auction on randomly sampled assets, and finally it uses statistical analysis to decide what action to take. Think of it as a forensic investigation where the evidence is capital—not opinions, not appraisals, but actual bids from people willing to put money on the table.
The beauty is in the progression. Pre-flight checks prevent spam and ensure minimal credibility. The auction itself forces price discovery through sealed bids on random samples—no cherry-picking, no gaming the selection. And the outcome rule is mechanical, driven by a single number (the -score) that captures both the size of the deviation and how confident we are about it.
Let's walk through each phase.
Pre-flight checks: can you even run an auction?
Running an auction costs gas, coordinator time, and participant attention. You don't want someone triggering auctions frivolously just to grief the system or farm rebates. So before anything happens, the protocol checks: Is this caller serious? Has enough time passed since the last auction? Can we actually draw a meaningful sample?
Before triggering an auction, basic anti-spam guards must pass:
- Cooldown elapsed: Minimum time since last auction (typically 48 hours)
- Caller bond posted: where is pool TVL, bp, and rises with thin depth, order-book imbalance, or cross-product risk
- Sampling target: Draw random lots (typically 3-6) via PPS within strata
If these pass, the auction runs. After clearing, we check post-clearing validity to decide if the result is informative. See Trigger Conditions for complete rules.
The auction: sealed, uniform-price, random sample
Here's where capital meets truth. The protocol randomly selects a few assets from the pool—you don't know which ones until after bidding closes—and runs a sealed auction. Everyone submits their bids privately, committed on-chain so they can't be changed. Once bidding closes, all bids become visible, and the auction clears at a single uniform price where supply meets demand. Winners are randomly assigned to lots, so you can't cherry-pick the best items.
Why this structure? Because it eliminates every common manipulation vector. Sealed bidding prevents last-second sniping and front-running. Random sampling prevents cherry-picking (bidders can't avoid the scratched-up Rolex and only bid on the mint-condition Patek). Uniform pricing means everyone pays what they bid—no weird auction dynamics where the winner overpaid. And random allocation means you're bidding on "any sampled lot," not specific items, which keeps pricing honest across the pool.
The protocol runs a sealed, uniform-price auction on randomly sampled lots:
- Stratify the pool by acquisition ratio or quality band
- Draw lots using VRF seed (PPS within strata, anti-cherry-pick)
- Sealed bidding: Bidders submit price-per-$ for "any sampled lot"
- Clear at : Uniform clearing price where demand meets supply
- Random allocation: Winners get lots randomly, no cherry-picking
From the executed book, the protocol computes:
- Clearing price and deviation
- Bid dispersion (from executed fills within ±25 bps band)
- Standard error
- -score (signal-to-noise ratio)
Post-clearing validity checks must all pass:
- Matched-notional floor (scaled with claim): matched where . Big claimed moves require deeper books.
- Diversity: distinct counterparties with fills (e.g., )
- Concentration: (e.g., 0.45)
- Confidence bound: (e.g., 25 bps)
If any validity check fails → INCONCLUSIVE (no mark change; light fixed penalty to cover ops).
See Auction Mechanics for sampling details, Statistical Confidence for formulas, and Kernel Rebates for bidder incentives.
The decision: four possible outcomes
Now comes the moment of truth: what do we do with this information? The auction discovered a clearing price that might differ from the current mark . It also gave us a measure of confidence—how tight were the bids, how many participants, how dispersed were the results? From these two pieces of data, the protocol needs to make a decision that could be anywhere from "pool is fine, penalize the caller" to "something is catastrophically broken, start selling assets."
The elegance is that one number captures it all. The -score combines the size of the deviation (how far is from ) with our confidence in that measurement (the standard error ). High -score means the deviation is real and provable. Low -score means it's probably just noise. Combined with hard thresholds on deviation magnitude, this gives us four clean outcomes that handle everything from false alarms to existential crises.
After the auction clears and validity checks pass, the protocol uses a single statistic—the -score —combined with hard thresholds to pick one of four outcomes.
Outcome rule (binding and mechanical)
IF t < t* (default 2.0):
→ CONFIRM (pool healthy; slash caller)
ELSE IF t ≥ t* AND |Δ| < ε₂ (default 150-250 bps):
→ RECENTER (update mark to P*; informational or micro-settlement)
ELSE IF |Δ| ≥ ε₂:
→ WIND-DOWN SIGNAL (requires confirmation; then progressive real sales)
If validity checks fail (high , high , low ) → INCONCLUSIVE regardless of or .
Let's break down what each outcome means.