Security and trust
This page names every party you trust and every fact an outsider can read.
What stays hidden
| Fact | Hidden from everyone but you | Notes |
|---|---|---|
| Which side you bet | Yes | Never revealed, before or after settlement |
| How much you bet | Yes | Never revealed per bet; only batch sums enter the pools |
| Your balance inside Curtain | Yes | Sealed in your purse |
| Your payout | Yes | Paid into your purse, encrypted |
| Whether you won | Yes | Winners and losers are claimed the same way |
What is public
| Fact | Why |
|---|---|
| That your wallet placed a bet, when, and on which market | A Solana transaction is public and your position account is derived from the market and your wallet |
| Whether a bet was accepted | One bit: the size was in range or it was not |
| Deposit amounts | A deposit is a token transfer into the vault |
| Withdrawal amounts and destinations | A withdrawal is a token transfer to your account |
| Each published batch: its ticket count and its Yes and No sums | That is the odds board |
| Market totals, outcome, settling print, fee | Needed 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:
- 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.
- A purse holds at most one ticket per batch, so the ticket count is a count of different bettors.
- 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:
- pause new bets and new markets,
- change the defaults copied into future markets, within hard ceilings: fee at most 5% (
MAX_FEE_BPS = 500), epoch between 30 s and 1 day, minimum batch between 3 and 8, - hand the authority to a new key in two steps (propose, accept),
- sweep accrued fees to the treasury account fixed at initialization.
The authority cannot:
- change the rules of a live market (defaults are copied at creation),
- pause settlement, tallies, claims, deposits or withdrawals,
- choose a market's outcome or its settling print,
- move vault funds anywhere except a purse owner's own token account (on withdrawal) or the fixed treasury (fees only).
The vault's public books always satisfy: vault balance = deposited minus withdrawn minus fees swept.
Next: Architecture