Commit
Bidders post a hashed commitment keccak256(amount, salt, bidder) and escrow a masked deposit. The pool is gated; nobody can trade.
OKX Build X · Hook the Future · Uniswap v4 on X Layer
A sealed batch-auction launch hook for Uniswap v4 on X Layer. Bids are sealed during the window; everyone clears at one price, pro-rata. Snipers can't pay their way to the front, because there is no front.
Whoever orders the trade first, or pays the most to be ordered first, walks away with the cheap supply. Retail eats the markup. That's the default.
In December 2025 X Layer migrated to the OP Stack and runs a flashblocks sequencer. We tested real mainnet blocks: transactions are not ordered by priority fee, and block-level ordering is effectively unpredictable. That breaks the priority-fee MEV-tax designs, and there's no general-purpose price oracle live on X Layer to power LVR-aware AMMs.
Sealed Launch doesn't fight ordering. It makes ordering irrelevant.
Four phases. One price. Everyone clears the same.
Bidders post a hashed commitment keccak256(amount, salt, bidder) and escrow a masked deposit. The pool is gated; nobody can trade.
Bidders open their bid by revealing the real amount + salt. The overage refunds atomically. Bid sizes appear on-chain only here.
Anyone calls settle(). The auction clears at one uniform price P = totalRevealed / offeredTokens, the pool seeds full-range LP at that price, trading opens.
Every revealer claims their pro-rata token allocation. Non-revealers reclaim their masked deposit. First-block and last-block buyers walk away with the identical price.
Fairness is a property of the mechanism, not a tunable parameter.
Two managers, one shared hook. v2 adds size-sealed bids on top of v1's clearing.
Two managers, one gating hook, one ERC-20 per launch — all wired through the official Uniswap v4 PoolManager on X Layer.
A v4 BaseHook with permission flags beforeInitialize | beforeAddLiquidity | beforeSwap (0x2880). Reverts every swap until markSettled is called. Blocks non-manager liquidity adds pre-settlement. Holds no funds; runs no price math. The hook is shared across v1 and v2 — same address gates every pool.
Escrows commitments, clears at the uniform price P = totalCommitted / offeredTokens, seeds full-range LP via poolManager.unlock → modifyLiquidity, and opens trading. Misses minRaise? Everyone refunds.
Adds a hashed commit + masked deposit on top of v1's clearing. Bidders post keccak256(amount, salt, bidder) during the commit window, reveal the real amount during the reveal window (overage refunded), and settle at the uniform clearing price. Bid sizes stay hidden on-chain until reveal.
A vanilla ERC-20 deployed per-launch by the manager. offeredTokens are distributed pro-rata to revealers at the clearing price; lpTokens are seeded into the v4 pool. Pre-mint goes nowhere a launcher can rug.
All managers initialize their pools against the official Uniswap v4 PoolManager on X Layer at 0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32. The hook address is CREATE2-mined so its low bits carry the required permission flags.
Chain 196. The v2 demo settled end-to-end on-chain — read the state of that demo, live, below.
Read straight from the deployed v2 manager + the v4 pool. No wallet, no backend.
Querying the v2 manager and the v4 pool on X Layer…
A read-only viewer for the mainnet demo, or open a brand-new launch with your own params.
Drive any auction's lifecycle from a single URL: commit, reveal, settle, claim. Defaults to the mainnet demo.
OpenDeploy a fresh ERC-20 and open a CommitRevealLaunch pool in one transaction, with your own window, raise, and tick spacing.
CreateHonest, full disclosure. We audited 61 findings across contracts, SDK, frontend and Foundry scripts on the day of submission.
Frontend, SDK, scripts.
KNOWN_LAUNCHES allowlist for ?launch= URLs + opt-in ack.chain-id == 196 assertions on every mainnet script.resolveChain(ctx) throws on missing chain (no wrong-chain broadcasts).deriveSalt normalizes salt input to NFC.hasCommitted(b) helper, faucet cooldown + amount cap, QuoteFaucet chain-gated.Two CRITICAL contract findings. The deployed addresses can't be patched in place; mitigated today because only the demo runs on the deployed managers.
SealedLaunch.settle() uses a balanceOf sweep; drains other launches' escrow if multiple launches share the same manager + quote.CommitRevealLaunch LP can over-consume the shared quote balance: no quoteUsed <= totalRevealed bound, no tickSpacing / sqrtPrice bounds.balanceOf sweep).nonReentrant on every external state-changing function.SealedLaunchHook.configure restricted to a manager allowlist.require(quoteUsed <= totalRevealed) invariant, plus tickSpacing / sqrtPrice bounds.Full findings, severity breakdown and per-file references in the README — see Internal security audit (2026-05-28).
From a hackathon hook to the fair-issuance rail.
62/62 Foundry tests, v1 + v2 deployed to X Layer mainnet, real auction settled on-chain.
Demo video, submission, multi-bidder live demo with on-chain pro-rata fairness.
SDK, hosted dApp, commit-reveal v2, fee routing in OKB, third-party audit.
flap partnership, launchpad-as-a-service, fairness reputation, OKX integration.
Tiered / Dutch curves, allowlist + KYC gates, deploy on every chain with official v4.
Open standard for on-chain launch covenants; the default way a token comes to market.