bitcoindevkit / bitcoindevkit/bdk_wallet

Support for sending to silent payments

Open
#160 19 comments 2 reactions 0 assignees View on GitHub
new feature
Dominant language
Rust
Stars
59
Forks
105
Avg merge
10d 9h
Merged PRs (30d)
1

Description

https://github.com/bitcoin/bips/pull/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**

- [ ] bitcoin-core/secp256k1#1765
- [ ] rust-bitcoin/rust-secp256k1#876
- [x] rust-bitcoin/rust-bitcoin#3507 [^1][^6]: Unplanned because [`rust-psbt`](https://github.com/rust-bitcoin/rust-psbt/tree/master/src/v2) will replace `bitcoin::psbt`
- [x] rust-bitcoin/rust-bitcoin#2778

**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**

- [ ] bitcoin-core/secp256k1#1802 [^2][^3][^4]
- [ ] rust-secp256k1 with DLEQ module ([`rust-dleq`](https://github.com/macgyver13/rust-dleq/blob/master/src/native/ffi.rs) is a candidate to fill this gap). [^5]
- [x] rust-bitcoin/rust-psbt#45

**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](https://github.com/bitcoin/bips/blob/master/bip-0352.mediawiki#inputs-for-shared-secret-derivation) requires the re-computation of the silent payment output.
- [ ] [TRUC Transactions](https://bitcoinops.org/en/topics/version-3-transaction-relay/): 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)

[^1]: [PSBT SP Spec Delving Bitcoin Post](https://delvingbitcoin.org/t/bip352-psbt-support/877)
[^2]: [BIP 374 Draft](https://github.com/bitcoin/bips/blob/master/bip-0374.mediawiki)
[^3]: [BlockStream/secp256k1-zkp implementation](https://github.com/BlockstreamResearch/secp256k1-zkp/blob/6152622613fdf1c5af6f31f74c427c4e9ee120ce/src/modules/ecdsa_adaptor/dleq_impl.h)
[^4]: [BlockStream/secp256k1-zkp implementation exposed for BitBox](https://github.com/BitBoxSwiss/secp256k1-zkp/commit/a361bdc22dec88840375039cdad35bc21395f5cd)
[^5]: cashubtc/cdk#65 (Cashu Development Kit DLEQ Implementation in Rust)
[^6]: [BIP 375 Draft](https://github.com/bitcoin/bips/blob/master/bip-0375.mediawiki)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.