The bid stays sealed. The winner is provable.
Sealed-bid procurement auctions where the winner proves they had the lowest valid bid in zero knowledge — no reveal phase, no leaked bids, no griefing.
settle(proof, winnerIndex, ax, ay)
→ valid → payout + rebate ✓
→ tampered → reject ✗
Stellar Hacks: Real-World ZK · DoraHacks
Bid leaking & collusion
Sealed bids run over email get leaked — a favored contractor underbids competitors by exactly $1.
Reveal-phase griefing
Commit-and-reveal needs everyone to reveal after the deadline. A losing bidder refuses — and freezes the escrow indefinitely.
Procurement is a multi-trillion-dollar flow. A 1% manipulation on a $10M contract = $100K skimmed, per deal.
Bids stay on-chain as Poseidon commitments. After close, only the winner proves: valid bid, lowest of all commitments, matches their commitment, signed by their key.
Private
losing bids never revealed
No griefing
losers do nothing
Winner-bound
in-circuit EdDSA
Vickrey
auto payout + rebate
$ npm run prove:demo
1. create_auction(budget, reserve, deadline) → escrow
2. submit_bid(Poseidon(bid, salt)) × N (sealed)
3. ledger sequence passes deadline time-lock
4. winner proof: lowest valid bid + EdDSA sig
5. settle(...) → BN254 pairing on-chain
valid → payout to winner + rebate ✓
tampered → rejected ✗
The auction settles and pays out without any loser ever revealing their bid. Hosted app = UX sandbox; load-bearing ZK = prove:demo + deployed verifier.
ZK Circuit
Circom 2.1.6 / Groth16 bn128 · LowestBidVerifier(N) · Poseidon + comparators + EdDSA over C_w · nPublic = 8
Verifier
env.crypto().bn254().pairing_check() — Groth16 at host speed (Protocol 25/26)
Auction logic
ledger-sequence time-lock · instance storage for commitments/nullifiers · token escrow
App
Next.js 16 / Supabase · ECIES-encrypted bid storage
Poseidon ~110× cheaper in-circuit than SHA-256 → on-chain verification is one pairing. EdDSA binds the settler to the winning bidder.
$T+
global B2B procurement spend flowing through reverse auctions every year.
$B
e-procurement & e-sourcing software market — all exposed to bid leakage today.
Gov
tenders legally require auditable integrity — Sotto's exact wedge.
Per-auction settlement fee — basis points on contract value, or flat per sourcing event.
Enterprise SaaS — white-label sealed-bid module for ERP / e-sourcing suites.
Audit exports — verifiable settlement receipts for government / regulated tenders.
Cost moat — sub-cent settlement undercuts every legacy e-sourcing platform.
| Email/PDF | Commit-reveal | Sotto | |
|---|---|---|---|
| Private after close | ❌ | ❌ | ✅ |
| Griefing-proof | ❌ | ❌ | ✅ winner-only |
| Trustless settlement | ❌ | ⚠️ | ✅ |
| Winner authenticity | manual | ❌ | ✅ EdDSA |
| Cost / auction | staff hrs | gas | sub-cent |
✅ Verifies on testnet
Real Groth16 winner proof accepted on-chain — npm run prove:demo.
✅ Negative control
Tampered inputs rejected on-chain.
✅ Soundness hardened
Winner bound via in-circuit EdDSA (nPublic 6 → 8); settle rewired to real signals.
✅ Cheap settlement
ZK verify + Vickrey payout ≈ 74,454 CPU (~0.07% budget). 101 unit tests green.
30 DAYS
Redeploy BN254 + EdDSA verifier; stellar.expert verified; public testnet auction.
60 DAYS
Variable bidder count, in-browser proving, bind winnerBid to public payout.
90 DAYS
Combinatorial auctions, ERP connector, first live pilot tender.
Edy Cu
full-stack + applied-ZK engineer
Solo-built the Circom auction circuit (lowest-bid + Poseidon + EdDSA), the Rust/Soroban auction & verifier contracts with Vickrey economics, and the Next.js procurement console. One of five real on-chain ZK products shipped for this hackathon.
Sotto turns procurement integrity from a procedure you trust into a proof you verify — settled natively on Stellar.