WalletRead the docsLaunch app
New: verify in your browser

Recompute any closed batch from its ciphertexts and the drand beacon

Nobody sees your order. Not even us.

The Monero dark pool. Swap XMR and ETH with no bridge, in sealed batches that open only when they close.

Next batch closes in --:--drand

Every batch is published after it closes, and anyone can recompute the price it cleared at.

MoneroMonero side runs on monero-ts: wallet2 compiled to WebAssembly, in your browser.
…drand quicknet round, now
drandTimelock to a future beacon. A new one every 3 seconds, threshold-signed by independent operators.
0bridges and wrapped XMR
…orders sealed in batch
EthereumETH side locks in a swap contract that only releases against the right secret, or refunds.
none yetlast clearing price
10 minper batch, on the UTC clock
One price per batch. Every matched order fills at the same uniform clearing price, published with all ciphertexts.
0batches closed and published
…XMR in ETH, CoinGecko reference

Sealed in your browser,
opened by the beacon

Sealing previewROUND 33,691,012 · 11:00 UTC
What the server receives
Your order, in this browser only
Side
Size (XMR)
Limit (ETH per XMR)

This preview really encrypts with tlock-js to the round of batch 2989793. Change a field and the ciphertext changes; nobody can read it before the close.

What do you want to trade?

Wallet

Your Monero wallet,
running in your browser

Create or restore a wallet in the page. Monero's own wallet code runs as WebAssembly, syncs from a public node you pick, and saves its files encrypted with your passphrase in this browser's storage.

Keys never leave your device. The node sees block requests, never your view or spend key.

monero-ts · wallet2 in WASM · mainnet
Sealed batches

Orders nobody can read
until the batch closes

Your order is encrypted in your browser to the drand beacon round at the close of the batch. Our server stores a ciphertext and a hash. Every ten minutes the beacon appears, everything opens, and one price clears the batch.

Timelock encryption with tlock on drand quicknet: before the round exists, no one holds a key, us included.

tlock · drand quicknet · 10 min batches, UTC
Atomic swaps

XMR for ETH with
no bridge, no wrapped coin

Matched orders settle as atomic swaps. ETH locks in a contract, XMR locks to a shared address, and claiming the ETH reveals the key that releases the XMR. Timeouts refund both sides if anyone walks away.

Adaptor-key design with a cross-group DLEq proof between ed25519 and secp256k1.

XmrSwap.sol · 17 forge tests · 0.3% on the ETH leg
Verify

Recompute any batch
in your own browser

Each closed batch is published with every ciphertext, the beacon round and the result. Press verify and your browser fetches the beacon from drand, decrypts each order, checks its commitment and reruns the clearing.

The clearing function is deterministic, so if your result matches, the operator did not bend it.

commitments · beacon round · uniform price
Protocol

One price per batch,
the same for everyone

Read the clearing rules

There is no visible order book and no queue to jump. Buyers and sellers meet once per batch at the price that crosses the most volume, and every fill uses it.

Matched pairs become swaps in commitment order, so the operator cannot pick who trades with whom.

p* = argmaxp min(D(p), S(p))
D(p) = Σ buy sizes with limit ≥ p
S(p) = Σ sell sizes with limit ≤ p
ties: smallest |D − S|, then the midpoint

Follow one swap
from start to finish

Step 1 of 6

Both sides make keys

Each side draws a secret below 2^252. Its ed25519 half goes into the Monero address; its secp256k1 address goes into the contract. A DLEq proof shows both come from the same secret.

Step 2 of 6

ETH locks first

The ETH holder calls newSwap with the claim and refund commitments and two timeouts. The ETH sits in the contract, released only by the right secret.

Step 3 of 6

XMR locks to the shared address

The XMR holder sends XMR to an address whose spend key is the sum of both halves. Nobody can move it alone.

Step 4 of 6

Ready

The ETH holder sees the XMR confirmed with the shared view key and calls setReady. From now on the XMR holder may claim.

Step 5 of 6

Claim reveals the secret

Claiming the ETH publishes the XMR holder's secret onchain. With it, the ETH holder now has the full Monero spend key.

Step 6 of 6

Sweep, or refund

The ETH holder sweeps the XMR with a + b. If anything stalls, the timeouts let the ETH holder refund, which reveals their secret so the XMR side can take the XMR back.

Learn how it works

Timelock batches

How an order is sealed to a drand round, what the server can and cannot see, and how a batch opens at the close.

Read