The first dark pool for tokenised stocks

Trade tokenised stockswithout showing your hand.

Orders go in sealed, open together, and cross at the Uniswap midpoint in one batch on Robinhood Chain. Nobody sees your size before the batch stops taking orders.

On a public pool, every order is a signal.

A swap on Robinhood Chain is readable before it lands: the stock, the size, the worst price you will accept. That is enough to trade ahead of you or to learn what you hold. Blackpool keeps the order sealed until the batch closes, then fills it against the other side at the price the pool already shows.

A swap routed to the poolexample · public from the first byte
swap(
  pool      NVDA / USDG   fee 0.30%
  zeroFor1  true          selling USDG
  amount    250,000.00 USDG
  limit     ≤ 226.00 USDG per share
)

Anyone watching sees the stock, the side and the size, and has time to act on them.

The same order on Blackpool sealed until reveal
commit(
  0x9c4e7d21b0f65a3e8c12d4f07b9a6e3c
    5d80f2a91c47e6b3d05f8a29c1e7a1f0
)
bond      1.00 USDG

A hash and a fixed bond. Market, side, size and limit are not on-chain until the reveal window opens.

Commit. Reveal. Cross at the midpoint.

Batches run back to back on the Ethereum block clock that Robinhood Chain exposes as block.number, one block every 11.4 seconds.

commit · 16 L1 blocks · orders go in as hashesreveal · 5settleV4 midpointbuyers fill 6/10 pro rata, the rest returns to the vaultsellers fill in fullillustration · sizes in sharessealed
01Commit16 blocks

You post keccak256 of your order and a random salt, with a 1 USDG bond. The order itself stays in your browser.

02Reveal5 blocks

You open the order. The contract checks it against the hash, locks the size from your vault balance and returns the bond.

03Settlewithin 26 blocks

Anyone can settle. Every crossed order fills at the pool midpoint read in that block. What does not cross goes back to your vault.

The pool sets the price. Blackpool hides the order.

Each market reads the canonical Uniswap V4 pool of the stock against USDG. Blackpool never trades on it; it only reads slot0 through extsload.

Read from the chainL1 block 26,053,834 · 10:21:39 UTC
MarketPool midpointListing venue, lastGapPrice guardV4 pool
SPYSPYSPDR S&P 500 ETF Trust$768.84$767.18 NYSE Arca+0.22 %0.60 %0xfe2a…26cd
METAMETAMeta Platforms$778.13$777.59 Nasdaq+0.07 %1.00 %0x5875…ae36
NVDANVDANVIDIA$225.90$224.58 Nasdaq+0.59 %1.00 %0x3bb3…4bf1
AAPLAAPLApple$335.97$335.92 Nasdaq+0.02 %1.00 %0xc748…8fdb
GOOGGOOGLAlphabet Class A$343.07$342.36 Nasdaq+0.21 %1.00 %0xd4ec…ac5e
TSLATSLATesla$380.68$377.94 Nasdaq+0.72 %1.50 %0x8517…d32e
MSFTMSFTMicrosoft$497.97$497.93 Nasdaq+0.01 %1.00 %0x9194…9579
SPCXSPCXSpaceX$149.18$148.03 Nasdaq+0.78 %2.00 %0x8567…7448
AMZNAMZNAmazon$250.10$249.38 Nasdaq+0.29 %1.00 %0xd326…9333

Midpoint from each pool's slot0, the same value the contract reads at settlement. The listing venue price is for comparison and is the last regular-session trade, so the gap widens while the exchange is closed.

What stays sealed, and what never was.

Hidden until the reveal window

  • Which stockThe market id is inside the hash.
  • Buy or sellBoth sides post the same bond from the same USDG balance.
  • SizeNothing is locked from the vault until you reveal.
  • Limit priceInside the hash, with a salt only you hold.

Public, and we say so

  • Your vault balancesDeposits and withdrawals are ordinary transfers.
  • That you committedThe commitment and its bond are visible.
  • The order, once revealedPublic for the 5 reveal blocks and until settlement.
  • Your fillSettlement emits every fill with its price.

Version 2, not live: proof of funds in zero knowledge

A Noir circuit proving the vault can cover a sealed order without saying which one, so balances stop leaking intent. Written into the roadmap, not into the contract you can use today.

Read the plan

One price, fairly split.

Settlement takes the lighter side in full and fills the heavier side pro rata. Every division rounds in favour of the venue, so the contract never pays out more than it took in; the dust goes to the treasury.

mid      = price(PoolManager.extsload(slot0))
buys     = Σ usable USDG   where mid ≤ limit
sells    = Σ shares × mid  where mid ≥ limit
matched  = min(buys, sells)
fill(o)  = o.size × matched / side total
Batch21 L1 blocks, about 4.0 min
Reveal window5 blocks, about 57 s
Settlement window26 blocks, then the batch is void
Commit bond1.00 USDG, returned on reveal
Matching fee0.10 % per side, in USDG
Fee ceiling0.50 %, changes wait 48 h
Fee split80 % stakers, 20 % treasury
Price guard0.60 to 2.00 % from the batch average
Orders per market96 per batch

Stake $BPOOL. Share every matching fee.

80 % of every matching fee and every forfeited bond is streamed to $BPOOL stakers, in USDG, by the same settlement call that crosses the book. No emissions, no lockup.

$BPOOLnot launched
Launch venue
Pons, Robinhood Chain
Staking reward
USDG
Stake token setter
one call, then frozen

Stop showing your hand.

Launch appWhat the contract guarantees