Search projects, hackathons, sponsors and tech

    ← All projects

    penumbra

    Private trades, unaffected markets, effortlessly.

    Demo

    About

    The problem it solves **On-chain auctions have no privacy.** On a public blockchain, every bid is visible to everyone in real time. This creates three critical issues: **1. Bid manipulation: **later bidders can see existing bids and only outbid by the minimum, suppressing the true price **2. Identity exposure: ** bidder addresses are public, linking financial activity to real-world identities **3. Front-running: ** bots and other participants can exploit visible bid data before it's finalized Traditional sealed-bid auctions (common in government bonds, real estate, spectrum allocation) solve manipulation, but no one had made them work privately on-chain. Penumbra brings sealed-bid auctions to Ethereum using ZK proofs, bid amounts and bidder identities never appear on-chain, not even after the auction ends. The winner claims tokens by proving knowledge of a secret, not by revealing who they are. Penumbra solves the transparency problem of on-chain auctions, bids, amounts, and winner identities stay private end-to-end using zero-knowledge proofs.

    How it's made

    Challenges we ran into **1. ZK proofs on a hackathon timeline** Generating and verifying ZK proofs server-side, then submitting them from a burner wallet so the winner's real address never touches the claim transaction. Getting the circuit, proof generation, and on-chain verifier to agree took significant iteration. **2. The off-chain/on-chain split** The whole point is that bids never appear on-chain, but Ethereum needs something to verify. Designing the nullifier scheme (bidders commit a hash on-chain, the backend knows the preimage, the winner proves knowledge without revealing it) required careful architecture so neither side could cheat. **3. Stealth address key derivation** Deriving spending and viewing keypairs deterministically from wallet signatures — without ever sending private keys to a server. The secp256k1 point multiplication needed to generate real uncompressed public keys is not natively available in the browser. **4. BitGo custody for private ETH deposits** Each bidder gets a unique deposit address so their ETH can't be correlated on-chain. Integrating BitGo's wallet API to generate these addresses, track confirmations, and route payouts to stealth addresses added a whole backend layer that most Ethereum projects don't need. **5. Auction phase state machine** Five phases (commit → settle → ended → claimed / cancelled) each with different UI, different allowed actions, and live on-chain polling. Keeping the frontend consistent across all states without race conditions was genuinely fiddly.