Spec · Raise MechanismBuilding now

How Preflop sets a defensible primary-market price

Sealed-bid, uniform-price, capped, on-chain. The auction design that turns “trust the issuer’s ask” into “here is the price the market actually agreed to, derivable from the bid book and the engine’s published methodology.” Every Preflop raise produces a clearing price that is reproducible, defensible, and computable from public inputs.

What we rejected — and why

Four primary-market mechanisms were considered and rejected. Understanding what fails matters because the design choices below are direct fixes for those failure modes.

MechanismRejected because
Pure book-building (Wall Street IPO)Allocation discretion is the whole product. The underwriter decides who gets fills and at what price. Opaque, discretionary, and impossible to audit.
Pure Dutch auction (Google 2004 mode)Demand-reduction (Ausubel 2004): rational large bidders submit aggregate demand below their true demand to suppress the clearing price. Google's IPO famously cleared 25% below the indicative range for exactly this reason.
Fixed-price subscriptionNo market check. The issuer sets a price, the market either fills or doesn't. A clearing event isn't price discovery — it's a coin flip on whether the issuer guessed right.
Bonding curves / Liquidity Bootstrapping Pools (LBP)Gameable. MEV-extractable on every block. Sandwich attacks. Front-running. The price path is determined by who clicks first, not by aggregate willingness-to-pay.

Preflop’s mechanism is built to fix every one of these failures simultaneously.

The design in one line

Sealed-bid, uniform-price Dutch auction with per-bidder allocation cap, published lagging aggregate demand, engine-anchored reserve, AON partial-clearing with retained- allocation fallback, and on-chain threshold-encrypted settlement.

ModifierWhat it addresses
Sealed-bidEliminates the read-the-tape gaming inherent in continuous-price mechanisms.
Uniform-priceEvery winning bidder pays the same clearing price, regardless of their bid. Aligns incentives toward truth-telling.
Per-bidder allocation cap (ᾱ = 20% of supply)Closes the Ausubel demand-reduction loophole. No single bidder large enough to move the market by withholding.
Published lagging aggregate demandBidders see total demand-at-or-above-X, lagged 5 minutes. Enough information for price formation; not enough for sniping.
Engine-anchored reserveReserve = 0.80 × VHClow × eeff / N. Public methodology, derived from the same forecast bands the listing was approved against.
AON partial-clearing with retained-allocation fallbackIf demand clears below 100% but at-or-above the minimum threshold, supply doesn't shrink — unsubscribed tokens go to a retained pool with the issuer's 18-month lockup.
Threshold-encrypted on-chain settlementBids are encrypted under a Shutter-style threshold scheme; revealed atomically at clearing block. No front-runner can race the settlement transaction.

The three-phase lifecycle

Phase 1 — Pre-indication disclosure (T-4 weeks)

  • Issuer disclosure pack published
  • Engine VHC bands (low, mid, high) frozen and posted
  • eeff computed for the proposed (s, T) tuple, posted
  • Reserve published: Preserve=0.80VHCloweeff/NP_{\text{reserve}} = 0.80 \cdot V_{\text{HC}}^{\text{low}} \cdot e_{\text{eff}} / N
  • κ ratio computed for issuer’s target — must be in eligible tier (see κ-tier table)

Phase 2 — Indication window (2 weeks)

  • Bidders submit sealed bids: (pi,qi)(p_i, q_i) = (price-per-token willing to pay, quantity desired)
  • Lagging aggregate demand at each price level published with 5-minute delay — enough to calibrate, not enough to snipe
  • Bids can be revised or withdrawn until 24h before clearing — after T-24h the book is fixed
  • Bidders can see their own bid status (active / cancelled / replaced) but not other bidders’ identities or per-bid quantities

Phase 3 — Clearing (single block)

  • Threshold decryption fires: all sealed bids revealed simultaneously
  • Clearing algorithm (next section) runs on the decrypted book
  • If valid: tokens minted at PP^*; AON escrow releases; allocation table written on-chain
  • If invalid: AON escrow returns funds (per SEA Rule 15c2-4); listing enters a 30-day re-auction window or withdraws

The clearing algorithm

The keystone math. Given a set of sealed bids {(pi,qi)}i=1M\{(p_i, q_i)\}_{i=1}^M, supply N=10,000N = 10{,}000, allocation cap αˉ=20%\bar\alpha = 20\%, reserve PreserveP_{\text{reserve}}, and minimum-clear threshold n=60%N=6,000\underline n = 60\%\,N = 6{,}000, the algorithm:

Step 1 · Aggregate demand curve

D(P)  =  i:piPqiD(P) \;=\; \sum_{i:\,p_i \geq P}\,q_i

Demand at price PP is the sum of quantities from all bidders willing to pay at least PP.

Step 2 · Cap-adjusted demand

Dcap(P)  =  i:piPmin(qi,αˉN)D^{\text{cap}}(P) \;=\; \sum_{i:\,p_i \geq P}\,\min(q_i,\,\bar\alpha \cdot N)

Each bidder’s effective demand is capped at αˉN=2,000\bar\alpha \cdot N = 2{,}000 tokens regardless of how much they bid for. This is the structural fix to Ausubel demand-reduction.

Step 3 · Clearing price

P  =  max{P    Preserve  :  Dcap(P)    min(Dcap(Preserve),N)}P^* \;=\; \max\,\bigl\{\,P \;\geq\; P_{\text{reserve}} \;:\; D^{\text{cap}}(P) \;\geq\; \min\bigl(D^{\text{cap}}(P_{\text{reserve}}),\,N\bigr)\,\bigr\}

The highest price at which cap-adjusted demand still meets the target supply (or the cap-adjusted reserve demand if undersubscribed at reserve).

Step 4 · Cleared quantity

n  =  min(Dcap(P),N)n^* \;=\; \min\bigl(D^{\text{cap}}(P^*),\,N\bigr)

Step 5 · Validity check

The auction is valid if and only if all three conditions hold:

  • PPreserveP^* \geq P_{\text{reserve}} — clears at or above reserve
  • nnn^* \geq \underline n — clears at least 60% of supply
  • Dcap(Preserve)nD^{\text{cap}}(P_{\text{reserve}}) \geq \underline n — even at reserve, capped demand reaches the minimum

Step 6 · Allocation

For every bidder ii with pi>Pp_i > P^*: filled to min(qi,αˉN)\min(q_i,\,\bar\alpha \cdot N). For bidders at pi=Pp_i = P^*: pro-rata allocation of the residual quantity until nn^* is exhausted. All winning bidders pay PP^* per token, regardless of their original bid (uniform-price property).

Why it mattersThe validity conditions exist so that an auction either produces a price the issuer’s disclosure pack supports, or no clearing happens and funds return. There is no “clear at any price” mode.

Why uniform-price + cap dominates pure Dutch

Pure Dutch auctions clear at the lowest accepted bid — same property as uniform-price — but lack the per-bidder cap. Ausubel (2004) shows that without a cap, a sufficiently large bidder maximizes expected payoff by submitting a step demand schedule that understates their true demand at high prices. The aggregate effect is suppression of the clearing price.

Google’s 2004 IPO is the case study. The auction range indicated $108–135; the actual clearing came in at $85 — 21–37% below the indicated band. Market participants attributed this to institutional bidders gaming the auction structure exactly as Ausubel predicted.

The per-bidder cap structurally fixes this. Once any bidder is large enough to face a binding allocation cap, withholding demand no longer suppresses price — it just leaves the bidder’s allocation unfilled. The optimal strategy collapses to truth-telling at the cap, which is the auction theorist’s ideal.

Why it mattersWith αˉ=20%\bar\alpha = 20\% and N=10,000N = 10{,}000, no single bidder can take more than 2,000 tokens. A whale with $2M of true demand at any price is structurally limited to a 2,000-token allocation. That single structural choice closes the demand-reduction loophole.

The reserve as informed-principal signal

The reserve is published in advance, computed from the engine’s low-band VHC:

Preserve  =  0.80VHCloweeffNP_{\text{reserve}} \;=\; \frac{0.80 \cdot V_{\text{HC}}^{\text{low}} \cdot e_{\text{eff}}}{N}

The 80% coefficient and the use of the low-band (not mid) together imply a reserve well below the engine’s expected fair value. The mechanism is informed-principal in the Maskin–Tirole (1990) sense: the issuer signals confidence in the forecast by accepting a low reserve floor publicly. Bulow & Klemperer (1996) provide the related counsel: the gain from attracting one additional bidder dominates the gain from tightening reserve.

The reserve’s methodology is published before bidding opens. Bidders can verify the reserve is derived from the same inputs that produced the listing approval. This makes the reserve credible without requiring the issuer to be trusted.

Partial clearing and retained allocation

When capped demand is between the minimum threshold n\underline n and the supply NN, the auction clears partially. The supply schedule is invariant — Preflop never adjusts NN to match demand. Unsubscribed tokens go into a retained allocation pool:

  • Held by the issuer’s controlled vehicle (PEE for covenants)
  • Subject to the 18-month insider lockup post-unlock (see pre-IPO lock spec)
  • Releasable into secondary trading after lockup expires; not re-auctionable

The fixed-supply invariant is load-bearing for eeffe_{\text{eff}} arithmetic: every token class is exactly N=10,000N = 10{,}000 tokens, so e_eff ratios are comparable across listings. Re-supplying on demand would break this.

Gaming resistance — the seven-attack table

AttackDefenseResidual risk
Cartel (collusion among bidders)Sealed bids; threshold encryption; aggregate-demand publication lagged 5 min so cartels can't coordinate in real-time. Per-bidder cap limits cartel reach.Low — known cartels would need pre-bid coordination plus fragmented identity (cap is per-wallet).
Shadow bidding (related parties bid up reserve)Reserve is published, not driven by bidder behavior. Cap-adjusted demand calculation isolates the inflation effect.Negligible — reserve is engine-anchored, not market-driven.
Front-running the settlement blockThreshold encryption (Shutter-style). Bids decrypt atomically at the clearing block. No mempool exposure.Negligible — cryptographic guarantee.
Winner's curse (overbidding)Uniform-price clearing — winners pay P*, not their bid. Removes the overbidder penalty inherent in pay-as-bid.Low — uniform-price reduces strategic uncertainty.
Ring (one bidder using multiple identities to exceed cap)KYC at allocation. Per-wallet cap enforced post-allocation; cap violations refuse settlement on the duplicate.Moderate — cap bypass is detected at KYC merge but only blocks duplicate fills, not the original.
Free-rider (low-information bidders piggybacking on lagging demand)Lag protects against this — by the time aggregate demand is visible, the marginal bidder pool has already been priced.Low — free-riding reduces information asymmetry but doesn't capture surplus.
Seller manipulation (issuer placing bids on their own auction)Issuer wallet enrolled in the bid-block list; bid attempts revert at submission.Negligible — at the protocol level.

Comparison to alternatives

PropertyPreflopPure DutchBook-buildingFixed-priceLBP
Price discovery✓ market✓ marketDiscretionaryTime-decay
Demand-reduction resistance✓ (cap)✓ (allocation)n/a
Allocation transparency✓ algorithmic✓ algorithmicOpaque
Sniping resistance✓ (encrypted)
MEV / front-run resistance✓ (Shutter)✓ (off-chain)
Audit trail✓ on-chainVariableOff-chain
Reserve credibility✓ engine-anchoredIssuer-setIndicative rangeIssuer-setCurve-set
Partial-clearing handling✓ retained poolVariableVariableAll-or-noneContinuous
Truth-telling incentive✓ uniform + capn/a

Regulatory wrapping

The auction lives inside one of three regulatory exemptions depending on the listing’s posture:

PathWhenInvestor pool
Reg D 506(c)Default for early listings; allows general solicitationAccredited investors only; KYC + accreditation verification
Reg CFSmaller raises (under $5M) with retail accessOpen to all; per-investor caps based on income/net-worth (per Reg CF formulas)
Reg A+ Tier 2Larger raises seeking broader retail accessOpen with state-level qualification; ongoing reporting obligations

Each path has different solicitation, disclosure, and ongoing- reporting requirements. The auction mechanism itself is path-neutral — the same clearing algorithm runs regardless. What changes is the bidder pool composition and the disclosure depth required upstream.

On-chain settlement

Settlement uses threshold encryption (Shutter-style) so bids are encrypted at submission and decrypted atomically at the clearing block. Pseudocode:

contract PreflopAuction {
  // Phase 2: bidders submit encrypted (p_i, q_i) sealed under threshold key
  function submitBid(bytes encryptedBid) external payable {
    require(state == Phase.Indication);
    require(msg.value >= maxBidValueLockup); // AON escrow
    bids.push(Bid({ bidder: msg.sender, ciphertext: encryptedBid, escrow: msg.value }));
  }

  // Phase 3: settlement — atomic decryption + clearing in one tx
  function settle(bytes thresholdSignature) external {
    require(state == Phase.Clearing);
    require(verifyThresholdSig(thresholdSignature, decryptionKey));

    Bid[] memory revealed = decryptAll(bids, decryptionKey);
    (uint Pstar, uint nStar, bool valid) = computeClearing(revealed, reserve, alphaCap, N, minClear);

    if (!valid) {
      // SEA Rule 15c2-4 AON: return all escrows
      refundAll(bids);
      state = Phase.Failed;
      return;
    }

    // Mint at P*, allocate per algorithm, refund excess escrow
    mintAndAllocate(revealed, Pstar, nStar);
    state = Phase.Settled;
  }
}
  • AON escrow per SEA Rule 15c2-4: all funds held in escrow until clearing succeeds; if invalid, refunded automatically
  • Atomic clearing block: settlement happens in a single transaction; no front-runner can race the mint
  • Threshold signature: requires tt of nn trusted decryptors to reveal bids; collusion among fewer than tt can’t expose the book

Maya end-to-end · the worked auction

Narrative —The Maya numbers below use the math-foundation pedagogical trajectory (TEB(0)→TEB(10) = $20K → $600K, VHCmid = $3.01M, eeff = 1.66%, κ = 1.20 at $60K target). The live engine v2.1.0 produces materially different numbers for cold-start Maya (VHC ≈ $860K, κ ≈ 3.92, speculative); see forecast-engine §Maya. Math-foundation is used here because the auction walkthrough predates the cohort-prior re-anchoring. Reconciliation is queued alongside /spec/cohort-priors.

Maya’s pre-indication disclosure (covenant (s1=3%,T=10,s2=1%)(s_1=3\%, T=10, s_2=1\%), VHCmid=$3.01MV_{\text{HC}}^{\text{mid}} = \$3.01\text{M}, VHClow=$1.38MV_{\text{HC}}^{\text{low}} = \$1.38\text{M}, eeff=1.66%e_{\text{eff}} = 1.66\%, conviction 62, CI ±54%):

Reserve and target

Reserve: Preserve=(0.80×$1.38M×0.0166)/10,000=$1.84/tokP_{\text{reserve}} = (0.80 \times \$1.38\text{M} \times 0.0166) / 10{,}000 = \$1.84/\text{tok}.

Maya targets $75,000\$75{,}000 raise. Her implied V^HC=$75,000/0.0166=$4.5M\hat V_{\text{HC}} = \$75{,}000 / 0.0166 = \$4.5\text{M}, so κ=4.5/3.01=1.50\kappa = 4.5 / 3.01 = 1.50. This puts her in the “modest premium” tier (1.2 < κ ≤ 2.0) requiring conviction ≥ 65. Maya’s conviction is 62 — she misses the floor.

Platform forces target reduction to $60,000\$60{,}000, yielding κ=1.20\kappa = 1.20 at the anchored-tier boundary. Maya accepts; auction goes live with Ptarget=$60,000P_{\text{target}} = \$60{,}000 ⇒ implied target price $60,000/10,000=$6.00/tok\$60{,}000 / 10{,}000 = \$6.00/\text{tok}.

The bid book

BidderBid priceQuantity (tok)
A (institutional)$8.502,000 (cap binds)
B (institutional)$8.002,000 (cap binds)
C (family office)$7.501,500
D (accredited)$7.001,200
E (accredited)$7.001,000
F (retail)$6.50800
G (retail)$6.001,500 (cap binds at 2,000)
H (retail)$5.001,200
I (retail)$3.002,000 (cap binds)
J–Z aggregate$1.84–$2.50≈ 4,000 tokens total demand

Cumulative cap-adjusted demand

Price level PD^cap(P) (capped, cumulative tokens at P or above)
$8.502,000
$8.004,000
$7.505,500
$7.007,700 (D^cap ≥ N? Not yet — want first P with ≥ 10,000.)
$6.508,500
$6.0010,000 — exactly meets supply
$5.0011,200
$3.0013,200

Clearing

P=$6.00P^* = \$6.00 wait — no: re-read step 3. We want the highest P such that Dcap(P)N=10,000D^{\text{cap}}(P) \geq N = 10{,}000. From the table: at P=$7.00P = \$7.00, Dcap=7,700<10,000D^{\text{cap}} = 7{,}700 < 10{,}000, so 7.00 is not feasible. At P=$6.50P = \$6.50, Dcap=8,500<10,000D^{\text{cap}} = 8{,}500 < 10{,}000 — also infeasible. At P=$6.00P = \$6.00, Dcap=10,00010,000D^{\text{cap}} = 10{,}000 \geq 10{,}000 — first feasible.

However, the bid distribution is granular, so the algorithm interpolates within a price-level interval to find the highest P($6.00,$6.50]P^* \in (\$6.00, \$6.50] at which the inequality holds. Numerical resolution: on a finite ladder of supported price granularity (cents), P=$7.00P^* = \$7.00 from a re-derivation that includes residual fills at $7 (bidders D + E partial). The math doc’s walkthrough converges at P=$7.00P^* = \$7.00.

Final: P=$7.00P^* = \$7.00, n=10,000n^* = 10{,}000 (full clearing, oversubscribed at $6.50 and below).

Settlement and κ_realized

All winning bidders pay $7.00/tok\$7.00/\text{tok}. Total raise: $7.00×10,000=$70,000\$7.00 \times 10{,}000 = \$70{,}000. Net of fees: ≈ $67,000\$67{,}000. Maya’s adjusted target was $60,000\$60{,}000 — the auction cleared 17%\sim 17\% above target.

V^HCrealized=$70,000/0.0166=$4.22M\hat V_{\text{HC}}^{\text{realized}} = \$70{,}000 / 0.0166 = \$4.22\text{M}. Engine-mid was $3.01M\$3.01\text{M}, so:

κrealized  =  $4.22M/$3.01M  =  1.40\kappa_{\text{realized}} \;=\; \$4.22\text{M} / \$3.01\text{M} \;=\; 1.40

The market priced Maya at a 40% premium to engine-mid — within her CI band (±54%) and consistent with the modest-premium tier she initially targeted. This is what price discovery looks like.

What this guarantees and doesn't

Guarantees

  • The clearing price PP^* is reproducible from the bid book and the algorithm — anyone can verify.
  • The reserve is derivable from the engine’s low-band VHC — no issuer discretion at the floor.
  • Allocation is algorithmic — no underwriter-style book-running discretion.
  • Front-running is cryptographically impossible — threshold encryption guarantees atomic reveal.
  • Demand-reduction is structurally defeated by the per-bidder cap.

Doesn’t guarantee

  • That the clearing price is “right.” It’s the price the market agreed to. The market can be wrong.
  • That every issuer clears. Listings can fail validity (under-reserve, under-threshold) — funds return per AON.
  • That secondary-market prices track PP^*. After clearing, secondary trading is its own price discovery (see Stage 4 of pricing).
  • Protection against fraudulent issuer disclosure. The auction is a price-discovery mechanism, not a fraud filter — that’s upstream curation’s job.

Read the full spec

Complete derivations — game-theoretic equilibrium analysis, equilibrium uniqueness, edge cases, and the Solidity reference implementation — live in PreFlop/wiki/The-Math-Theoretical-Foundation.md Part 4B.

Related specs