BatchedAuction

spec ยท config

A periodic auction that collects orders over a batch window, then clears all at a single uniform price that maximizes traded volume. This models systems like Penumbra (sealed-bid batch auctions with privacy on Cosmos), CoW Protocol (batch auctions for MEV protection), and NYSE/NASDAQ opening/closing auctions. The academic foundation is Budish, Cramton, and Shim's "The High-Frequency Trading Arms Race" (2015), which proposes frequent batch auctions to eliminate the latency arms race.

Because OrderingIndependence is verified, batch auctions are safe to decentralize โ€” validators only need to agree on the set of orders, not their sequence. This is why Penumbra and CoW Protocol can run batch auctions across distributed validators without the consensus problems that plague decentralized CLOBs.

graph LR
    subgraph Collecting
        BO[Buy Orders]
        SO[Sell Orders]
    end

    O1[Submit Buy] --> BO
    O2[Submit Sell] --> SO

    BO --> CB[Close Batch]
    SO --> CB

    subgraph Clearing
        CB --> D[Demand Curve]
        CB --> S[Supply Curve]
        D --> CP[Clearing Price<br/>max volume]
        S --> CP
    end

    CP -- "all at uniform price" --> T[Trades]
    T --> R[Reset]
    R -. "next batch" .-> BO

Orders accumulate during the collection phase without matching. When the batch closes, a single clearing price is computed that maximizes traded volume. All trades execute at this uniform price โ€” no spread to capture.

  • Collection phase: orders accumulate without matching
  • Clearing phase: compute clearing price from aggregate supply/demand curves, fill eligible orders at the uniform price
  • Self-trade prevention: buyer-seller pairs with the same trader are skipped during clearing

Verified properties

PropertyTypeDescription
UniformClearingPriceInvariantAll trades in a batch execute at the same price
PriceImprovementInvariantTrade price <= buyer's limit and >= seller's limit
PositiveTradeQuantitiesInvariantEvery trade has quantity > 0
NoSelfTradesInvariantNo trade has the same buyer and seller
OrderingIndependenceInvariantClearing result matches the deterministic clearing price regardless of submission order
NoSpreadArbitrageInvariantNo price difference to exploit within a batch
EventualClearingLivenessEvery batch eventually clears

All 6 invariants above are proven to carry over unchanged when privacy is added โ€” see ZKRefinement.