bitcoin++
§ Project file

SimplicityOS ZK: blind co-signing for Bark

The permanent record for this hackathon project: write-up, links, team, tags, and prizes.
Honorable Mention Hackathon
A Bark co-signer checks a zero-knowledge proof instead of reading your program, so it enforces the rules without learning what they are.
Project image
The write-up

Bark clients can attach spending rules to their VTXOs with SimplicityOS 🌸: a co-signer runs a Simplicity program and signs only if the spend follows it. Today that co-signer reads everything: the program, every rule, every coin.

We put BlockstreamResearch‘s simple-groth16 verifier inside the SimplicityOS engine, built on Christian Lewe’s architecture (one OS core, swappable engines, libsimplicity underneath). The app‘s rules become a Groth16 proof tied to the payment’s outputs. The co-signer runs the same verifier for every app and signs only on a valid proof. A Cashu mint‘s reserve rules, a payroll split or a guardian vote all look the same to it.

Only the Bark client side changes: wallet, co-signer and engine. The Ark server (captaind) stays stock. It always saw the transactions, and it still does. What changes is what the client reveals to everyone else.

Levels:

  • 0: a Groth16 gate in Bitcoin-environment Simplicity, bound to the payment.
  • 1: app-blind, with one universal policy circuit, so every coin runs the same verifier.
  • 2: blind signing, where the co-signer signs a blinded challenge and never sees the transaction.

Built: a Bitcoin pruner for Simplicity (upstream rust-simplicity spliced with our Bitcoin jet tables), simple-groth16 forked to bind to Bitcoin outputs_hash, and a test suite whose transcripts show what the co-signer received and check that no secret appears in it.