I’m sharing a small proof-of-concept for zkPoH, a Zero-Knowledge Proof of Hodl system for Bitcoin.
The idea is simple: prove that you control a set of Bitcoin UTXOs whose combined value is at least 1 BTC, without revealing the UTXOs, addresses, exact balance, tx history, or private keys.
How it works in the current prototype:
-
A Bitcoin UTXO snapshot is generated off-chain.
-
The snapshot is committed into a Merkle tree.
-
The Merkle root becomes the public commitment.
-
The prover privately selects up to four UTXOs from that snapshot.
-
Rust generates the witness inputs for Noir.
-
The Noir circuit checks:
-
each selected UTXO belongs to the committed snapshot;
-
the Merkle paths are valid;
-
the sum of the selected UTXO values is at least
100,000,000 sats.
-
-
If the constraints pass, the verifier only learns: this prover satisfies the 1 BTC threshold against this snapshot.
For the prototype, the Merkle tree uses Blake2s over fixed encodings, and Bitcoin ownership is checked off-circuit with signed WIF ownership proofs. Future work could move ownership verification into the circuit, add Schnorr/Taproot support, snapshot epochs, nullifiers, Utreexo commitments, and arbitrary thresholds.
This is experimental and educational, not production-ready, but it shows a concrete path for private Bitcoin proof-of-hold primitives.
Repo: GitHub - fabohax/zkPoH: Zero Knowledge Proof of Hodl · GitHub