Home › Learn › Silent payments explained (BIP 352)

Silent payments explained (BIP 352)

Silent payments (BIP 352) let you publish one static address, starting with sp1, that anyone can pay without the payments being linkable on-chain. The sender combines their own input keys with your public keys to compute a fresh Taproot output that only you can find and spend. There is no notification transaction and no interaction. The cost moves to the receiver, whose wallet has to scan the blockchain to detect incoming payments.

Updated · 8 min read

What are silent payments?

Silent payments are a way to receive bitcoin at a reusable address without the privacy problems of address reuse. BIP 352, by josibake, Ruben Somsen and Sebastian Falbesoner, describes them as "static payment addresses in Bitcoin without on-chain linkability of payments or a need for on-chain notifications".

You publish one address, for example on a website, an invoice template or a donation page. Each sender derives a different, unique Taproot output from it. To everyone else on the network these outputs look like any other Taproot payment, and nothing on-chain connects them to your address or to each other.

The problem: address reuse

Using a new address for every payment is one of the basic privacy practices in Bitcoin. If you post one ordinary address publicly, anyone can look it up and see every payment you received and every time you spent from it.

Fresh addresses avoid that, but they need interaction: you have to give each payer a new address, a batch of addresses, or an extended public key. BIP 352 points out that this "is often infeasible and in many cases undesirable". Think of a donation page, or a payment you want to receive while your wallet is offline.

Earlier protocols, such as BIP 47 payment codes, solved this with a reusable identifier plus a one-time notification transaction on the blockchain. BIP 352 lists the trade-offs of that approach: extra cost for one-time payments, a visible footprint on-chain that can reveal metadata, and the ability for the receiver to link every payment from the same sender. Silent payments remove the notification entirely.

How do silent payments work?

The key idea is Elliptic Curve Diffie-Hellman (ECDH): two parties can each combine their own private key with the other's public key and arrive at the same shared secret, without ever sending it.

  1. The receiver publishes public keys inside a silent payment address.
  2. The sender picks the inputs to fund the payment and adds up their private keys.
  3. The sender computes a shared secret from that sum and the receiver's public scan key. The calculation also includes a hash of the smallest outpoint being spent, so that the same sender paying twice from the same key never produces the same output.
  4. The sender derives the output key: the receiver's spend key, tweaked by a hash of the shared secret. It is encoded as a normal Taproot (P2TR) output.
  5. The receiver scans. For each eligible transaction, the receiver's wallet adds up the input public keys, does the same ECDH calculation with its private scan key, and checks whether the expected output appears.
  6. The receiver spends with its spend private key plus the same tweak.

Because all of the sender's inputs are summed, the receiver needs only one elliptic-curve multiplication per transaction, and doesn't learn which particular input belonged to the sender. A sender can also pay the same address several times in one transaction: each extra output adds a counter to the hash.

Scan key and spend key

A silent payment address contains two public keys:

  • The scan key is needed online, to detect payments. A wallet that only has the scan private key can see incoming payments but cannot spend them.
  • The spend key is needed to spend, and can stay in cold storage.

This split lets a watch-only machine do the scanning while the spending key lives on a hardware signer.

What does a silent payment address look like?

A silent payment address is a Bech32m string:

  • The prefix is sp on mainnet and tsp on test networks such as testnet and signet.
  • After the separator 1, the character q marks version 0, so mainnet addresses start with sp1q.
  • The payload is 66 bytes: the 33-byte scan public key followed by the 33-byte spend public key.

That makes a version 0 address 116 characters long on mainnet (117 on testnets), much longer than a normal address. BIP 173 limits regular SegWit addresses to 90 characters, so BIP 352 suggests implementations accept up to 1,023 characters to leave room for future versions. Version 31 is reserved for a backward-incompatible change.

The address itself is never written to the blockchain. Only the derived Taproot outputs are.

Labels: telling payments apart

A receiver may want to know which payments came from which source, such as one address for a website and another for an invoice. Scanning for several separate addresses would multiply the work, so BIP 352 adds labels: an integer m tweaks the spend key, producing a different address that shares the same scan key. The wallet scans once and recognizes all of them.

Labels aren't separate identities. Every labelled address contains the same scan key, so anyone can see they belong to the same wallet. Label m = 0 is reserved for the wallet's own change, and the wallet must never hand it out.

Which transactions can pay a silent payment address?

The sender's inputs must expose public keys the receiver can read. BIP 352 uses these input types to compute the shared secret: P2TR, P2WPKH, P2SH-P2WPKH and P2PKH. A transaction can include other inputs, such as multisig, but they are ignored for the calculation. At least one eligible input is required.

Receivers only need to scan transactions that have at least one Taproot output and at least one eligible input, and that don't spend SegWit outputs of version 2 or higher. Receiving outputs are always Taproot, so the payment's address type is bc1p on-chain.

The cost: scanning

Silent payments shift work from the sender to the receiver. An ordinary wallet watches a list of known addresses; a silent payment wallet must check every eligible transaction in every new block, performing the ECDH calculation for each. BIP 352 describes this as "generally feasible for full nodes but poses a challenge for light clients".

Recovering a wallet from backup means scanning the chain from the wallet's birthday, which can take a while. That's one reason BIP 393 proposes a bh annotation for the block height to start scanning from, and an ml annotation for the highest label used.

Light clients

For phones and other light wallets, BIP 352 calls light client support "an area of open research" and sketches options in an appendix:

  • Tweak data from a server. A full node or index server can precompute the summed input key for each eligible transaction, about 33 bytes per transaction, and serve it to light clients.
  • Compact block filters. With that data, the client can use BIP 158 filters to check whether a block contains one of its outputs before downloading it.
  • Optional out-of-band notifications from the sender. The receiver can always ignore them and scan instead.

Silent payments vs BIP 47 payment codes

Both aim to give you a reusable identifier without on-chain address reuse. They make different trade-offs:

BIP 47 payment codes BIP 352 silent payments
Static identifier Payment code, Base58Check, starts with P Address, Bech32m, starts with sp1q
Before the first payment Sender broadcasts a notification transaction with an OP_RETURN output Nothing
On-chain footprint Notification transaction is visible None beyond ordinary Taproot outputs
Can the receiver link payments from the same sender? Yes Not by design
Receiving outputs P2PKH (versions 1 and 2) Taproot (P2TR)
Receiver's work Watch the addresses derived for each known sender Scan every eligible transaction
Light clients Designed for SPV wallets Open research
Authors Justus Ranvier (2015) josibake, Ruben Somsen, Sebastian Falbesoner (2023)

BIP 47's own text notes that versions 3 and later of payment codes are developed outside the BIP process. Neither approach is strictly better: BIP 47 puts a one-time cost and footprint on each new sender relationship, while silent payments put an ongoing scanning cost on the receiver.

Silent payments are spreading into the rest of the wallet stack through several proposals:

  • BIP 374: Discrete Log Equality (DLEQ) proofs, which let a signer prove an ECDH share was computed with the right private key without revealing it.
  • BIP 375: sending to silent payment addresses with PSBTs, using ECDH shares and DLEQ proofs so hardware signers and multi-party transactions can create the outputs safely.
  • BIP 376: spending silent payment outputs with PSBTs, by carrying the tweak each input needs.
  • BIP 392: an sp() output descriptor, with spscan (watch-only) and spspend (full wallet) key encodings, for backups and wallet exports.

Backups and derivation paths

One of BIP 352's goals is to use "existing seed phrase or descriptor methods for backup and recovery". When keys come from a BIP 32 seed, BIP 352 defines hardened paths under purpose 352:

scan key:  m/352'/0'/0'/1'/0
spend key: m/352'/0'/0'/0'/0

(for mainnet, account 0). Your seed phrase is enough to recreate the keys, but finding the payments requires scanning, so a note of when the wallet was created makes recovery faster.

Things to know before using silent payments

  • Wallet support varies. Both the sender's and the receiver's wallets must implement BIP 352. Check your wallet's documentation, and send a small test payment first.
  • Senders use their input keys. BIP 352 recommends that all inputs in a silent payment transaction belong to the same person, because the protocol has no formal security proof for collaborative transactions such as CoinJoins.
  • Signature types matter. BIP 352 calls SIGHASH_ANYONECANPAY unsafe for senders, and strongly recommends SIGHASH_ALL (or SIGHASH_DEFAULT for Taproot inputs).
  • Amounts are still public. Silent payments hide the link between your address and your outputs, not the amounts or what you later do with the coins.

Frequently asked questions

What is a silent payment address?

A silent payment address is a static address defined in BIP 352 that starts with sp1q on mainnet. It contains a scan public key and a spend public key, encoded with Bech32m, and is 116 characters long. Senders use it to compute a unique Taproot output for each payment, so the address itself never appears on the blockchain.

Are silent payments the same as stealth addresses?

They share the goal of a reusable address that can't be linked on-chain, and both use Diffie-Hellman key exchange. BIP 352 silent payments differ from earlier designs by needing no notification transaction or extra data on-chain: the shared secret comes from the sender's input keys, and outputs look like ordinary Taproot payments.

What is the downside of silent payments?

The receiver has to scan the blockchain. A silent payment wallet must check every eligible transaction in every block and perform an elliptic-curve calculation for each, instead of watching a fixed list of addresses. That is manageable with a full node, but light clients such as phone wallets are still an area of open research.

What is the difference between BIP 47 and silent payments?

BIP 47 payment codes need a one-time notification transaction on-chain before a sender's first payment, and the receiver can link payments from the same sender. BIP 352 silent payments need no notification and don't link payments, but the receiver must scan every eligible transaction. BIP 47 versions 1 and 2 pay to P2PKH outputs; silent payments pay to Taproot.

Can I receive silent payments to a hardware wallet?

The design allows it: the spend key can stay on a hardware or cold-storage device while a separate online wallet scans with the scan key. Spending needs signer support for the extra tweak, which BIP 376 adds to PSBTs. Whether a particular device supports this depends on its software, so check its documentation.

BIPs in this article

  • BIP 352: Silent Payments: Complete. Silent Payments let someone publish one static address that anyone can pay, while each payment lands at a different, unlinkable address on the blockchain. Unlike similar schemes, it needs no extra…
  • BIP 47: Reusable Payment Codes for Hierarchical Deterministic Wallets: Deployed. Introduces reusable payment codes that someone can publish once, for example on a website, without the privacy loss of reusing an address. Senders use the code to derive fresh addresses for each…
  • BIP 375: Sending Silent Payments with PSBTs: Draft. Adds fields and rules to the version 2 Partially Signed Bitcoin Transaction (PSBT) format so wallets can send to Silent Payment addresses. Since a Silent Payment's final address depends on the…
  • BIP 376: Spending Silent Payment outputs with PSBTs: Draft. Adds fields to version 2 Partially Signed Bitcoin Transactions (PSBTs) for spending coins received via Silent Payments. Those coins require a special adjustment to the recipient's key when signing,…
  • BIP 374: Discrete Log Equality Proofs: Draft. Standardizes a short cryptographic proof that someone used the same secret key in two related calculations, without revealing the key itself. This is useful, for example, to prove that a shared…
  • BIP 392: Silent Payment Output Script Descriptors: Draft. Defines an 'sp()' descriptor for Silent Payment wallets, describing the keys needed to detect and spend payments sent to a reusable Silent Payment address. This lets such wallets be backed up and…
  • BIP 393: Output Script Descriptor Annotations: Draft. Introduces optional tags that can be attached to a descriptor, such as the block height to start scanning from or how many unused addresses to check. These hints speed up and simplify wallet…
  • BIP 341: Taproot: SegWit version 1 spending rules: Deployed. Taproot introduces a new kind of Bitcoin output that can be spent either with a single signature or by revealing just one of many possible alternative spending conditions, kept hidden in a tree…
  • BIP 350: Bech32m format for v1+ witness addresses: Deployed. Introduces Bech32m, a corrected version of the Bech32 address format used for SegWit addresses (those starting with 'bc1'). A subtle flaw in Bech32 could let certain typos go undetected, so Bech32m…

Learn more

Guides

Free tools

Glossary