A prediction market where your position is private and the price is not.
Prediction markets are useful because of the price they produce. They are unusable for some of the people who most need them because that price is built out of public positions — betting against a ruling party, or holding a view your employer would read as disloyalty, means publishing it. Hiding everything is not the fix: hide the price and you have a private casino, not a market.
Atrum splits the difference deliberately. Individual orders, identities and balances are hidden — including from the operator. Odds, volume and settlement stay public and verifiable.
atrum-core — the shielded pool, live on Monad testnet. Groth16 over BN254, exponential ElGamal on BabyJubJub, a depth-20 commitment tree. Bets are hidden individually and only the parimutuel totals decrypt.
Every action is a real proof through the real snarkjs-generated verifier, measured on live Monad nodes rather than estimated:
| measured | |
|---|---|
deposit, end to end |
1,378,641 gas |
bet, end to end |
1,165,715 gas |
redeem, end to end |
1,137,382 gas |
| Client-side proving | ~995 ms median |
atrum-starknet — a sealed-bid batch auction, built on STRK20. Orders are unreadable until they are already binding, a uniform clearing price is published, and positions are tradeable before the event resolves. Because every order is committed before anything clears, front-running is not penalised — it is structurally impossible.
Numbers here are measured or they are not stated. atrum-core keeps a
MEASUREMENTS.md
that records what the repo measured against live nodes including where it contradicts
its own design reference, and a
deployment log
that documents the fund-stranding bugs found by deploying and then trying to use it —
each one invisible to a passing local test suite.
Privacy claims are specific and easy to overstate, so each repo states what is hidden and what is visible in a table, per build, because the two builds hide different things.
| atrum-core | Circuits, contracts and sequencer for the shielded pool |
| atrum-starknet | Sealed-bid batch auction on Starknet, built on STRK20 |
| atrum-client | Browser proving harness and client |
| atrum-markets | Front end — the full deposit → bet → settle → withdraw lifecycle |
| atrum-docs | Documentation |
| atrum-landing | Landing page |
Open, self-contained work is labelled
help wanted
in atrum-core — currently a batch auction simulator, oracle resolvers for new market
types, and a CLI for the shielded pool. Comment on the issue before starting so it can be
assigned.
One house rule, since it costs contributors time: gas figures must come from the Monad-patched Foundry toolchain, not stock Foundry. Stock reports Ethereum's prices and two tests fail without the fork.