SOL perpetuals where only you can see your position.
Your cursor is the hunter's torch. Positions are sealed by Arcium and priced by Pyth, up to 5x.
On every perp exchange your position stands in a clearing. Its size, its side and the price that liquidates it are public, so anyone hunting can push price straight into it. SHROUD is the forest. Arcium's nodes check every position while it stays hidden, and a close shows one number: what it paid.
30 May 2025. James Wynn's leveraged BTC long on Hyperliquid was liquidated for about $100 million. Its liquidation price, near $105,000, sat in public view the whole way down.
Two days later CZ wrote: “The problem is worse on a perp DEX where there are liquidations.” He asked for a dark pool for perps.
Smith's dwarf chameleon matches its background more closely when a bird hunts it than when a snake does. Stuart-Fox, Moussalli and Whiting, 2008.
Four rules in the forest.
seal
cts = Rescue(size, w + side·2⁴⁰)Your browser seals the size, and the collateral per unit of size with the side folded in. The position goes into the forest as two ciphertexts that look like every other leaf.
fill
entry = first Pyth price ≥ 2 s after the orderEvery order fills at the first Pyth price published two seconds after it, so a faster trader has no stale price to lean on.
check
bit = (price ≤ line) == longOn each round Arcium's nodes visit all 128 positions in a book and answer one bit for each: still in, or bust. They work on secret shares and return only that bit.
show
payout = collateral + pnl − feesA close brings out one number: what the position paid. The position itself stays in the forest.
The forest, right now.
Live from mainnet: the price every position fills and is checked at, and the Arcium cluster that does the checking.
- SOL on Pyth
- ...
- Arcium answers, last 10 min
- ...
- Positions in the forest
- 0
- In the pool
- 0 USDC
The forest is empty. The first order is the first chameleon.
Hunt for one.
Somewhere in this patch sit 128 positions. Move the price and Arcium runs a round: a position past its liquidation line steps out of the leaves, and that is all it gives away. Try to find one worth pushing price into.
SOL price for this round, drag the ruler
At $79.20, 6 of 128 positions are bust and step out of the leaves. The round gave away no side, size or liquidation line, and the other 122 stay hidden.
Walk the round yourself.
Anyone can run the keeper. It fills orders at the next price, runs a round on a book whenever SOL moves 1% or six hours pass, and settles every bust; a liquidation pays the keeper 1% of the collateral.
npx tsc -p keeper/tsconfig.json
cat > ~/.config/shroud/keeper.env <<ENV
RPC_URL=<your RPC>
ARCIUM_CLUSTER_OFFSET=10000
KEEPER_KEYPAIR=~/.config/solana/keeper.json
KEEPER_TOKEN=<your USDC account>
STEP_BPS=100
ENV
keeper/run.sh ~/.config/shroud/keeper.envThe forest floor.
Every position trades against one USDC pool. Busted positions and the 1 USDC opening fee fall to it, and winning positions are paid from it.
The collateral of open positions stays under 10% of the pool, and the pool keeps at least what that collateral needs. Positions start at up to 5x.
Fund the poolWhat the hunters still see.
In the open
- The collateral going in and coming out
- That a wallet opened a position, and when
- Which slot the position sits in
- That a position went bust, after the round
- The payout when it closes
In the leaves
- Long or short
- Size, and so leverage
- The liquidation price
- Open profit or loss
The limits we measured
- Arcium mainnet, worst stall in 30 days
- about 70 min
- Leverage with zero bad debt through a 1 hour stall
- 2.7x
- Leverage the market starts with
- 5x
- Hands per check round
- 128
Privacy holds as long as Arcium's nodes do not collude. Speed depends on them answering.