Outcomes public. Wagers redacted. Markets created by anyone. Built on iExec Nox + Arbitrum. Selective-disclosure attestations you can show your accountant — or seal forever.
The same question. The same odds. The same outcome. The only difference is who can see your wager.
Will Bitcoin close above $100,000 by December 31, 2026?
Source: gamma-api.polymarket.com — public, real-time.
Will Bitcoin close above $100,000 by December 31, 2026?
Source: encrypted on iExec Nox — visible only to the bettor.
A bettor's path through DarkOdds in plain English. What's public stays public. What's private stays private. Math runs in a TEE.
Anyone can create the market. Anyone can bet. The math runs in the enclave. The privacy is mathematical.
Deposit TestUSDC into the cUSDC contract. Your balance becomes an encrypted handle, ACL'd to your wallet only.
Encrypt your stake off-chain via the Nox SDK, bound to a specific market. Submit to Market.placeBet. Your handle commits to the on-chain ACL — the bet is locked, the size stays sealed.
When the market resolves, call claimWinnings. The TEE computes your proportional payout in plaintext inside the enclave, re-encrypts the result, and transfers cUSDC back to your wallet. Optionally generate an audit attestation — signed, recipient-bound, downloadable.
The thesis of the iExec Vibe Coding Challenge applied to prediction markets — privacy-preserving financial primitives where compliance and confidentiality coexist. Below, the substrate this is built on, and the standards stance.
Static analysis: Slither 0.11.5 (clean). Audited contracts: 10. Multisig governance: 2-of-3 Safe. Tests: 178/180.
DarkOdds applies the iExec Vibe Coding Challenge thesis — privacy-preserving financial primitives with compliance and confidentiality — to permissionless prediction markets.
ERC-7984 is implemented in full, function-shape compliant via a Nox-native ConfidentialUSDC. ERC-3643 (permissioned RWA tokens) and ERC-7540 (async vaults) don't fit a prediction-market primitive natively; forcing them in would be checkbox-cargo, not engineering.
Selective-disclosure attestations provide the compliance surface the track calls for, in the shape that matches our domain. Confidentiality without opacity. Compliance without surveillance.
Three operational case files. Real markets, real cUSDC, real Arbitrum Sepolia. Bet sizes are encrypted on Nox. Outcomes resolve via on-chain oracle adapters. Anyone can create more.
After you claim, generate a TEE-signed attestation. Recipient-bound by default — only the address you specify can verify it. Bearer mode is explicit opt-in. Markets stay permissionless; disclosure stays selective.
After your claim, the TEE handler signs an attestation containing: your address, market ID, outcome, payout amount, optional recipient, nonce, and TDX measurement. All inside the enclave, signed by the measurement-bound key.
Click “Generate audit attestation” on /portfolio. JSON file downloads — recipient-bound to whomever you specify. Recipient is permanent in the signed payload — re-sharing breaks the signature.
Recipient pastes the JSON into /audit. ClaimVerifier on chain checks the TDX measurement matches our pinned anchor and the signer matches the deployed attestation key. Returns VALID or INVALID. Read-only.
// signed inside enclave { "version": "1.0", "user": "0xF979…1ab5", "marketId": 14, "marketQuestion": "Will BTC close above $100,000 by end of 2026?", "outcome": "NO", "payoutAmount": " cUSDC", "recipient": "0xACCOUNTANT…", "nonce": "0x…", "tdxMeasurement": "0x…", "signature": "0x…" }
Display note: the JSON contains plaintext. The redaction bar reinforces that the payout was confidential before disclosure — not after.
From people who didn't read the contracts.
Public: outcomes, odds, market addresses, transaction hashes, bettor counts, and pool totals (after each 60-second batch publish). Hidden:your individual bet size, your wallet's encrypted balance, and your payout amount — until you choose to disclose it.
Anyone, during the open-create window. Connect a wallet, click /create, describe your market in plain English, ChainGPT structures the parameters, deploy on-chain. Permissionless by design — the governance state badge in the topbar shows the current mode (open-create vs governance-curated). Both are legitimate protocol modes.
Bets are encrypted handles on iExec Nox (Intel TDX TEE on Arbitrum). The TEE decrypts inside the enclave to compute proportional payouts, then re-encrypts the result. FHE-equivalent privacy guarantee, TEE attestation trust model, proportional pari-mutuel actually works (FHE division is brutal — TEE plaintext compute is the wedge).
Polymarket is fully public AND curated. DarkOdds is private AND permissionless. Two axes, opposite stances. Same odds and outcomes, your wager hidden, anyone can deploy a new market.
Three oracle adapters: AdminOracle (commit-reveal multisig), ChainlinkPriceOracle (with mandatory L2 sequencer uptime check), and PreResolvedOracle (markets resolved before deployment). Resolution flows through whichever adapter the market is wired to. Two independent audits — ChainGPT (LLM pattern-matched) and Slither (dataflow). All HIGH findings remediated. Reports in KNOWN_LIMITATIONS.md.
Yes — anyone can deploy “Will Arsenal win the Premier League?” multiple times. Markets self-correct: liquidity flows to the most-trusted one. Centralized platforms avoid duplicates by fiat but miss the experimentation. Permissionless-with-emergent-coordination beats permissioned-by-fiat over time.
Yes — by two independent sources. 178/180 Foundry tests pass. ChainGPT Smart Contract Auditor on all 10 contracts (refresh dated April 28, 2026). Slither static analysis clean. All HIGH findings remediated. Multisig governance via 2-of-3 Safe (architecturally preserved through operational delegation for the open-create window). Reports in KNOWN_LIMITATIONS.md and contracts/audits/.
“Privacy permissionless prediction markets. Built for the iExec Vibe Coding Challenge × ChainGPT. Live on Arbitrum Sepolia.”