CurtainMarketsDocs
curtain/docs/securityLaunch app

Security and trust

This page names every party you trust and every fact an outsider can read.

What stays hidden

FactHidden from everyone but youNotes
Which side you betYesNever revealed, before or after settlement
How much you betYesNever revealed per bet; only batch sums enter the pools
Your balance inside CurtainYesSealed in your purse
Your payoutYesPaid into your purse, encrypted
Whether you wonYesWinners and losers are claimed the same way

What is public

FactWhy
That your wallet placed a bet, when, and on which marketA Solana transaction is public and your position account is derived from the market and your wallet
Whether a bet was acceptedOne bit: the size was in range or it was not
Deposit amountsA deposit is a token transfer into the vault
Withdrawal amounts and destinationsA withdrawal is a token transfer to your account
Each published batch: its ticket count and its Yes and No sumsThat is the odds board
Market totals, outcome, settling print, feeNeeded to settle

If you deposit exactly what you bet and withdraw right after settlement, those amounts can hint at your stake. Deposit round amounts, keep a balance, and withdraw on your own schedule.

Who you are trusting

Arcium

Bets are computed by Arcium, a network that runs computations on encrypted inputs across several nodes. Arcium's protocol keeps the inputs private as long as at least one node in the cluster is honest.

Arcium mainnet is in alpha, and today it runs on a permissioned set of 3 nodes. If all 3 worked together, they could read bets. No single node can. This is the main trust assumption of Curtain today, and we state it on the landing page for that reason.

The cluster can also refuse to answer. A purse operation or tally that is never answered can be released after one hour (release_purse, STUCK_AFTER_SECS), so a silent cluster cannot lock your balance forever.

Pyth

Markets settle on Pyth prints posted through the Pyth Solana Receiver (rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ). The program accepts only fully verified PriceUpdateV2 accounts for the market's own feed. A degraded feed at the deadline refunds the market instead of settling it; see stale and missing prints.

A print settles a market only if it was published within 15 seconds of the deadline, so a settler's whole choice is the prices Pyth published in those seconds, normally one. Settling is open to everyone and the keeper does it as soon as the first price lands.

Solana

Solana orders and stores everything public: deposits, sealed accounts, batch sums, settlement and transfers.

The single-bettor leak

If one person were the only bettor in a batch, the change in the totals would be their bet. Curtain closes that hole in three ways:

  1. A batch is added up only with at least 5 tickets. The engine refuses any minimum below 3: with two bettors, each could subtract their own ticket and read the other's.
  2. A purse holds at most one ticket per batch, so the ticket count is a count of different bettors.
  3. A batch below the minimum stays open across epochs until it fills. The final batch of a market that never fills is dropped and refunded instead of revealed.

What still leaks: the sums of each published batch. A very large bet among small ones moves the totals visibly, so the board shows that someone in that batch bet big on one side. It never shows who, or which of the 5 or more bettors it was.

A bettor who controls several wallets could fill a batch with their own tickets around one other bettor and subtract their own stakes. The minimum batch size and the minimum ticket raise the cost of that attack; they do not make it impossible. Treat a batch of 5 as hiding you among 5 accounts, not among 5 people.

What a claim reveals

claim pays a settled position into its owner's purse, for winners and losers alike, and anyone may call it for any position. A claim therefore says only that the position was settled. The payout amount stays sealed until you withdraw.

Operator powers

The authority (a key Curtain holds) can:

The authority cannot:

The vault's public books always satisfy: vault balance = deposited minus withdrawn minus fees swept.

Next: Architecture