Silent Receipts is a receipt system for Bitcoin silent payments (BIP352). Silent payments give you one static address whose payments land on fresh, random-looking outputs that nobody can link to you — great for privacy, terrible in a dispute, because invisible money is easy to lie about. A scammer can point at any transaction and claim “that was me paying you”; a merchant who was paid can insist nothing arrived. Until now, refuting either lie meant surrendering your scan key — every payment you‘ve ever received, past and future, forever. Silent Receipts replaces that with a ~130-byte bundle: the per-transaction shared secret, bound by a BIP374 DLEQ proof to your published code and the transaction’s own inputs. A verifier armed with nothing but public chain data re-derives every slot where a payment to you could exist — and gets a cryptographic yes (“this payment went to me”), a cryptographic no (“that tx paid me nothing” — the sentence no signature scheme can say), or catches the forgery. Think Monero‘s InProof, finally ported to Bitcoin — an example the BIP352 ecosystem asked for but nobody had built.
The scheme has exactly one assumption its cryptography cannot cover: your code must provably pre-date the payment (otherwise an attacker can build an “address” backwards around someone else’s coins). We close it with OpenTimestamps — every demo identity is stamped into Bitcoin before it receives its first payment, turning the trust assumption into a verifiable artifact. Then we kept going: the receipts are timestamped, the source, the compiled binary, the web page, the stamping script (which stamps itself), the proofs of the proofs — and every verification a visitor triggers is itself written to disk and timestamped. One of these stamps is load-bearing; the rest are tribute. Everything is real and live: a Rust CLI built on bdk-sp mints and verifies receipts against actual signet transactions — including an ownership tier proving you can spend what you detected, a claim we backed by spending the demo‘s own received output on-chain. The live demo runs the real verifier on every button press, and its built-in wallet regenerates the entire demo — new identity, new timestamp, new payment, new receipts — with one click. Source on GitHub — MIT, containerized, CI-built.