Skip to content

Support for sending to silent payments #160

Open

Description

@benthecarman

bitcoin/bips#1458

Supporting receiving for silent payments would be a very large undertaking. However, supporting sending should be relatively pretty trivial.

Tracking issues for SP sending support:

Single party payments:

All inputs are signed by the same entity (MuSig considered here)

Upstream

Local

  • bdk_wallet coin select for SP inputs, single key types (p2wpkh, p2pkh)
  • bdk_wallet coin select for SP inputs, always uses key path spend for TR SP inputs (p2tr key path spend)

Multi party payments and hardware signers:

The inputs should be signed by different entities (e.g. CoinJoin)

Upstream

Local

  • bdk workspace and dependencies upgrade to DLEQ support

Extras:

  • RBF support: The removal of any input used to compute a silent payment output, or the addition of any new input included in the BIP 352: Inputs for Shared Secret Derivation requires the re-computation of the silent payment output.
  • TRUC Transactions: Allow wallets without eligible outputs to create silent payment transactions to create a zero fee transaction with a key path spend taproot transaction to create a silent payment output using the first transaction output as input.
  • rust-libsecp256k1 with MuSig2 and FROST support
  • rust-miniscript with MuSig2 and FROST support
  • bdk_wallet coin select for SP inputs, aggregate key types (MuSig2, FROST)

Footnotes

  1. PSBT SP Spec Delving Bitcoin Post ↩

  2. BIP 375 Draft ↩

  3. BIP 374 Draft ↩

  4. BlockStream/secp256k1-zkp implementation ↩

  5. BlockStream/secp256k1-zkp implementation exposed for BitBox ↩

  6. NUT12 DLEQ cashubtc/cdk#65 (Cashu Development Kit DLEQ Implementation in Rust) ↩

Activity

  1. LLFourn commented on Sep 11, 2023

    @LLFourn
    Contributor

    Although sending has less moving parts I'm less sure what's the right API inside transaction building system (mostly because we haven't re-designed transaction building yet). With receiving I know precisely how to approach it (as a new tx graph index) so I'd be tempted to do receiving first and leave sending until later. Of course the basic function to produce a silent payment tx would be needed at the same time as the receiving code which would allow you to manually construct a silent payment tx. We could consider upstreaming this to rust-bitcoin also.

    This would go all go in bdk_chain with bdk_tx_build proving more user friendly API coming later (when it exists).

  2. realeinherjar commented on Sep 12, 2023

    @realeinherjar
    Contributor

    This BIP is recent and still with a lot of comments addressing implementation details, e.g. bitcoin/bips#1458 (comment).

  3. evanlinjin commented on Sep 15, 2023

    @evanlinjin
    Member

    This BIP is recent and still with a lot of comments addressing implementation details, e.g. bitcoin/bips#1458 (comment).

    I think Steven was mostly addressing HOW the BIP should be structured, not WHAT was specified in the BIP.

  4. LLFourn commented on Sep 18, 2023

    @LLFourn
    Contributor

    While implementing it we might be able to contribute to the BIP if we find places it could be improved.

  5. notmandatory commented on Nov 13, 2023

    @notmandatory
    Member

    I assigned this to the 1.1 alpha release, but we may need to move it to 2.0 depending on priorities and who's available/able to work on this.

  6. sethforprivacy commented on May 16, 2024

    @sethforprivacy

    Traction behind Silent Payments is rapidly growing, with two wallets releasing with full Silent Payments support this week. The most important step for their traction to continue is that wallets simply add the ability to send to Silent Payment addresses (as this PR is for) so that there is proper incentive for receiving to be added to wallets, exchanges, etc.

    I started a bounty for this PR to be completed on X, and am offering 100k sats to the dev who's PR solves this issue (total bounty of 870k sats thanks to others on X).

    Would be amazing for all BDK wallets to be able to trivially enable sending to Silent Payment addresses!

  7. sethforprivacy commented on May 17, 2024

    @sethforprivacy

    Note that a crate for Silent Payment support already exists here:

    https://github.com/cygnet3/rust-silentpayments

  8. storopoli commented on May 22, 2024

    @storopoli

    The parsing of a SP address is being discussed upstream here rust-bitcoin/rust-bitcoin#2778

  9. moved this to Discussion in BDK Walleton May 22, 2024
  10. junderw commented on Jun 2, 2024

    @junderw

    I think this should wait for

    1. Add BIP352 silentpayments module bitcoin-core/secp256k1#1519
    2. merging 1 into the secp256k1 wrapper crate.

    rust-silentpayments crate is a great prototype, but it is weak to timing attacks.

  11. cygnet3 commented on Jun 3, 2024

    @cygnet3

    rust-silentpayments crate is a great prototype, but it is weak to timing attacks.

    This should be mitigated in v0.3.0. If you find other weaknesses or oversights, please let us know!

    Having said that, I agree that the purpose of rust-silentpayments is somewhat obsolete once the silentpayments module is added to secp256k1. Perhaps we will transition to become a more high-level silent payments utility library. Either way, we will rewrite rust-silentpayments to work on top of the silentpayments module once that is finalized.

  12. junderw commented on Jun 3, 2024

    @junderw

    This should be mitigated in v0.3.0.

    I see you just released this about an hour ago. Nice!

  13. notmandatory commented on Aug 13, 2024

    @notmandatory
    Member

    Tracking issues for SP sending support:

    Related issues

    • rust-libsecp256k1 with MuSig2 and FROST support
    • rust-miniscript with MuSig2 and FROST support
    • bdk_wallet coin select for SP inputs, aggregate key types (MuSig2, FROST)
  14. notmandatory commented on Jan 14, 2025

    @notmandatory
    Member

    I moved the above tracking checklist to the description of this issue.

  15. stevenroose commented on Feb 2, 2026

    @stevenroose
    Contributor

    Any update on SP support in BDK?

  16. luisschwab commented on Feb 2, 2026

    @luisschwab
    Member

    @stevenroose see the bdk-sp crate.

  17. nymius commented on Feb 2, 2026

    @nymius
    Contributor

    Hello @stevenroose, bdk-sp is an experimental project which demonstrates how to send, how to receive and how to spend silent payment outputs in a very hacky way.
    I developed it as a base to lay down the components needed by a stable implementation to work with BDK, and I'm using it now as a reference.
    SP sending in BDK requires the following:

    1. BIP 375 (psbt support).
    2. BIP 374 (dleq proofs for psbts)
    3. address parsing.
    4. coin selection adapted for silent payments.

    For 1, BIP 375 support has been recently added to rust-psbt.
    For 2, there is a BIP 374 PR which implements the DLEQ proof required by BIP 375.
    For 3, address parsing has been isolated in the feat/full-lib branch from bdk-sp
    An asterisk (*) to all this is that BDK now depends of the bitcoin::psbt crate for its non silentpayment applications, so it has to first move from bitcoin::psbt to rust-psbt.

    Now I'm focusing on (*) and on the coin-selection side (4).

    Consider the libsecp256k1 PR for silent payments isn't merged yet, although we already have rust-bindings for it in rust-bitcoin/rust-secp256k1#876.
    BIP 374 PR has not bindings yet.

    This is key because no implementation will move forward in BDK without the cryptographic support from libsecp256k1.

  18. nymius commented on Feb 2, 2026

    @nymius
    Contributor

    I've updated the issue with the latest PR references and removed the less accountable steps.

  19. github-actions commented on Aug 24, 2026

    @github-actions

    This issue has been inactive for 180 days and labeled stale, comment to keep it open. It will be closed in 30 days if there is no activity.

  20. added
    staleAn issue or PR that's considered stale (180d inactivity).
    on Aug 24, 2026
  21. nymius commented on Aug 24, 2026

    @nymius
    Contributor

    This is in progress.

  22. removed
    staleAn issue or PR that's considered stale (180d inactivity).
    on Aug 31, 2026
  23. startupcompliancekit commented on Oct 30, 2026

    @startupcompliancekit

    @nymius @notmandatory Would a separate contribution covering single-party Silent Payment transaction rebuilding and regression tests fit alongside the ongoing PSBT and coin-selection work?

    Proposed scope: test that changing an eligible input recomputes the Silent Payment output, including fee-bump/RBF cases; cover P2PKH/P2WPKH inputs and Taproot key-path selection; and document the supported boundaries. I would target the active integration branch, with any implementation changes limited to an agreed scope. Any PR would follow the project's signed-commit and testing requirements.

    Before implementation, could you confirm whether this slice is available, the target branch and acceptance checks, and whether the bounty sponsors would allocate a specific BTC amount to it? The public bounty page lists 0.011 BTC for completed sending support; a separately payable portion and current funding have not been confirmed.

  24. nymius commented on Oct 30, 2026

    @nymius
    Contributor

    30. Would a separate contribution covering single-party Silent Payment transaction rebuilding

    You mean silent payment transaction building?

    30. and document the supported boundaries. I would target the active integration branch, with any implementation changes limited to an agreed scope.

    This vocabulary is too broad and lacks substance. If you (I'm assuming human) have the knowledge to do it, your PR is welcomed.

    30. Before implementation, could you confirm whether this slice is available, the target branch and acceptance checks, and whether the bounty sponsors would allocate a specific BTC amount to it? The public bounty page lists 0.011 BTC for completed sending support; a separately payable portion and current funding have not been confirmed.

    I'm already working on it. As a new contributor, I would say your time is more valuable reviewing PRs than opening new ones, particularly for those that may overlap with other ongoing efforts.
    I don't represent the person offering the bounty, so I cannot speak of his intentions As far as I understand from the text, the bounty can't be split and the only way to claim it is to provide full sending support through PRs merged in BDK projects.
    As the person championing the silentpayments effort in BDK, I won't engage reviewing PRs that don't consider the current BDK architecture
    in favor of introducing a feature, or which I consider extractive: https://llvm.org/docs/AIToolPolicy.html#extractive-contributions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    new featureNew feature or request

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions