Live: https://blindbidauction.vercel.app · Network: Solana Devnet
BlindBid is a trustless sealed-bid auction protocol built on Solana, powered by Arcium's Multi-Party Computation (MPC) network. Bid amounts are encrypted client-side using the Arcium MXE public key before ever touching the blockchain — no one, including the auction creator, can see individual bids until the auction closes.
- Create Auction — Pay a small SOL fee to register an auction on-chain via a Memo transaction referencing the deployed BlindBid MXE program
- Place Sealed Bid — Your bid is encrypted using x25519 Diffie-Hellman key exchange + RescueCipher (Arcium's ZK-friendly cipher) against the real MXE public key fetched from devnet
- Encrypted Commitment — The ciphertext and commitment hash are anchored on Solana devnet, referencing the deployed MXE program ID
- Resolve Auction — After the auction ends, trigger the Arcium MPC
reveal_winnercircuit which compares encrypted bids without revealing individual values
| Component | Details |
|---|---|
| MXE Program | 87ze8FFkYPnUaXUQZwoC2K14p6ju8YYCaAG7nGB8HLUh |
| MXE Account | 4xRjKx6paGdVp3zcignmS5JZzsAEQEW7ifuyUty4mk4n |
| Cluster Offset | 456 (Arcium devnet cluster) |
| Encryption | x25519 key exchange + RescueCipher via @arcium-hq/client SDK |
| MPC Circuits | submit_bid + reveal_winner (compiled .arcis circuits) |
| Network | Solana Devnet |
submit_bid— Accepts encrypted bid, queues MPC computation, storesBidRecordon-chainreveal_winner— Compares two encrypted bids via Arcium MPC nodes, emitsWinnerRevealedEventsubmit_bid_callback— EmitsBidCommittedEventwith encrypted commitment after MPC finalizationreveal_winner_callback— EmitsWinnerRevealedEventwith winner index after threshold decryption
- Frontend: Next.js 15, TypeScript, Tailwind CSS v4
- Blockchain: Solana Web3.js, Wallet Adapter (Phantom)
- MPC: Arcium SDK (
@arcium-hq/client), Anchor 0.32.1 - Program: Rust +
arcium-anchormacros - Deployment: Vercel (frontend), Solana Devnet (program)
blindbid/
├── app/
│ ├── api/
│ │ ├── arcium/encrypt/ # Server-side Arcium encryption API
│ │ └── chain/
│ │ ├── auctions/ # Fetch on-chain auctions from Memo txs
│ │ └── bids/ # Fetch sealed bids per auction
│ └── (pages)/ # Next.js app router pages
├── components/
│ ├── BidModal.tsx # Sealed bid flow with Arcium encryption
│ ├── CreateAuctionModal.tsx # Auction creation with on-chain tx
│ └── ResolveModal.tsx # MPC reveal_winner trigger
├── lib/
│ ├── arcium.ts # Arcium client functions
│ └── blindbid_mxe_idl.json # Deployed program IDL
└── program/
├── src/lib.rs # Anchor program (Solana smart contract)
├── circuits.rs # Arcium MPC circuits (submit_bid, reveal_winner)
├── Anchor.toml # Anchor config
└── Arcium.toml # Arcium MXE config
git clone https://github.com/addnad/blindbid
cd blindbid
npm install
npm run devOpen http://localhost:3000 and connect a Phantom wallet on Solana Devnet.
The BlindBid MXE program is deployed and verified on Solana Devnet:
Built for the Arcium RTG Hackathon by @1st_bernice