Built by the community - Special thanks to Ruben
Somsen and Josie Bake
for their groundbreaking work on BIP-352.
Installation
Integration Workflow
1
Generate silent payment address
Create a reusable address for receiving private payments
2
Create destination address
Generate a one-time taproot address for each payment
3
Scan for incoming funds
Detect payments without exposing spending keys
4
Spend received funds
Derive private keys and move Bitcoin
Step 1: Generate Silent Payment Address
Choose your key generation method based on your use case:- From Private Keys (Recommended)
- From Mnemonic (Wallets)
Best for: Non-wallet applications where users control their keys
Create a Change Address
Critical for privacy: Never send change to a public address after making silent payments.Why this matters
Why this matters
Scenario: You send 10 silent payments to friends, then send change to your public address.Result: You’ve exposed:
- ❌ Your own private transaction history
- ❌ Your friends’ payment patterns
- ❌ Links between all 10 transactions
Step 2: Create Destination Address
Generate a unique taproot address for the payment:What you need:
- UTXO transaction ID and output index
- UTXO private key
- Amount in satoshis
- Recipient’s scan and spend public keys (
B_scan,B_spend)
Step 3: Scan for Incoming Funds
Check if a transaction belongs to you:What you need for scanning
What you need for scanning
- Transaction input’s
txidandoutput_index - Public key from the output
- Script and amount from the taproot address
Step 4: Spend the Funds
Once you’ve confirmed funds belong to you, derive the private key:That’s It
You’ve successfully implemented Bitcoin silent payments. Your users can now:- ✅ Share a single address for all payments
- ✅ Receive Bitcoin privately
- ✅ Maintain transaction unlinkability
- ✅ Avoid notification transaction fees
Additional Resources
BIP-352 Specification
Complete technical specification
bitcoinjs-lib
Build Bitcoin transactions in JavaScript
Silent Payments Explained
Protocol deep dive
ECDSA Signatures
Learn about signature-based key derivation