Skip to main content
For the complete documentation index, see llms.txt.
Shakesco does not offer silent payments. These pages document an open source library you can add to your own app or website. The Shakesco app does not send or receive silent payments.
Built by the community - Special thanks to Ruben Somsen and Josie Bake for their groundbreaking work on BIP-352.

Installation

Import the SDK:

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:
If not using the signature-derived method, ensure you’re using a cryptographically secure random number generator for b_scan and b_spend.

Create a Change Address

Critical for privacy: Never send change to a public address after making silent payments.
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
Solution: Always use a labeled silent payment address for change.Reference: BIP-352 Labels for Change

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

Scanning trade-off: This is the main drawback of silent payments - you must scan the blockchain to detect incoming transactions.
Check if a transaction belongs to you:
If the output matches the taproot address → it’s yours! 🎉
  • Transaction input’s txid and output_index
  • Public key from the output
  • Script and amount from the taproot address
Learn more: BIP-352 Scanning

Step 4: Spend the Funds

Once you’ve confirmed funds belong to you, derive the private key:
Use this private key with bitcoinjs-lib to build and sign your taproot transaction.

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