bitcoindevkit / bitcoindevkit/bdk-cli

`compile --type=sh` produces a descriptor Bitcoin Core rejects

Aperta
#313 2 commenti 0 reazioni 1 assegnatario Rivendicata da @vadim-anfv Vedi su GitHub
discussion
Lingua principale
Rust
Stelle
141
Fork
99
Merge medio
6g 14m
PR unite (30g)
1

Descrizione

`bdk-cli compile` accepts `--type` values `sh`, `wsh`, `sh-wsh` and `tr`. Only `sh` produces a descriptor Bitcoin Core rejects:

```console
$ A=$(bdk-cli --network bitcoin key generate | jq -r .xprv)
$ B=$(bdk-cli --network bitcoin key generate | jq -r .xprv)

$ D=$(bdk-cli compile "or(pk($A),pk($B))" --type=sh | jq -r .descriptor)

$ bitcoin-cli getdescriptorinfo "$D"
error code: -5
error message:
Miniscript expressions can only be used in wsh or tr.
```

The same policy with `--type=wsh`, `--type=sh-wsh` and `--type=tr` is accepted.

BIP 379 scopes Miniscript to P2WSH and Tapscript, and excludes P2SH explicitly, [spec](https://github.com/bitcoin/bips/blob/ed4ffcb6a48d4dc4fdfc11cdba783c233db8c66e/bip-0379.md#specification):

> These specifications apply to P2WSH (BIP 141) and Tapscript (BIP 342) scripts [...] P2SH and bare scripts are excluded from this specification.

Core enforces that where it parses the Miniscript expression, [src](https://github.com/bitcoin/bitcoin/blob/9be056a8a72b624dae9623b2f7bded92c2a21c91/src/script/descriptor.cpp#L2600-L2604):

```cpp
if (node) {
if (ctx != ParseScriptContext::P2WSH && ctx != ParseScriptContext::P2TR) {
error = "Miniscript expressions can only be used in wsh or tr.";
return {};
}
```

bdk-cli can still build the descriptor because `rust-miniscript` keeps the pre-BIP contexts. BDK also handles it end to end: `wallet config --ext-descriptor "$D"` followed by `new_address` derives a P2SH address, and the script itself is consensus-valid. Other descriptor-based wallets may not support this type though - Core rejects it outright, in both `getdescriptorinfo` and `importdescriptors`.

@tvpeter how would you like this handled?

1. drop `sh` from the accepted `--type` values
2. keep it, but warn on output and document that it is outside BIP 379 specification

Happy to open the PR once you have picked one.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.