bitcoindevkit / bitcoindevkit/bdk-cli

Add taproot privacy optimisations in policy compiler

Aperta
#244 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Rust
Stelle
141
Fork
99
Merge medio
6g 14m
PR unite (30g)
1

Descrizione

**Describe the enhancement**

`bdk-cli compile --type tr "$POL"` currently only calls `compile` and manually wraps the result into a single taproot leaf, instead of using `compile_tr` from rust-miniscript that splits disjunctions into separate leaves and Huffman-optimises the tree. Using `compile_tr` would be a good compromise, though `compile_tr_private_experimental` exists and goes one step further in privacy optimisation.

**Use case**

When compiling a disjunctive policy to a taproot descriptor, each spending condition should ideally be its own leaf so that only the used path is revealed on-chain. Currently all conditions are bundled into a single leaf, missing the privacy benefits of taproot's script tree.

**Additional context**

The following shows the output of all three rust-miniscript functions for reference:

**Example 1:** `or(pk(A),pk(B))`
```
compile:
or_b(pk(A),s:pk(B))
compile_tr:
internal key : B
tap tree leaves (1 total):
depth=0 script=pk(A)
compile_tr_private_experimental:
internal key : B
tap tree leaves (1 total):
depth=0 script=pk(A)
```

**Example 2:** `thresh(1,pk(A),pk(B),pk(C))`
```
compile:
multi_a(1,A,B,C)
compile_tr:
internal key : C
tap tree leaves (2 total):
depth=1 script=pk(B)
depth=1 script=pk(A)
compile_tr_private_experimental:
internal key : C
tap tree leaves (2 total):
depth=1 script=pk(B)
depth=1 script=pk(A)
```

**Example 3:** `thresh(2,pk(A),pk(B),pk(C))`
```
compile:
multi_a(2,A,B,C)
compile_tr:
internal key : UNSPENDABLE
tap tree leaves (1 total):
depth=0 script=multi_a(2,A,B,C)
compile_tr_private_experimental:
internal key : UNSPENDABLE
tap tree leaves (3 total):
depth=1 script=and_v(v:pk(A),pk(B))
depth=2 script=and_v(v:pk(B),pk(C))
depth=2 script=and_v(v:pk(A),pk(C))
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Segui il punto di ingresso `bdk-cli compile --type tr` e ispeziona la chiamata corrente a `compile` e il wrapping manuale di una singola leaf. Confronta questo percorso con l’output di `compile_tr` di rust-miniscript per gli esempi disgiuntivo e threshold; il lavoro è completato quando le policy taproot usano leaf separate e l’albero risultante riceve l’ottimizzazione Huffman prevista.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
rust
Ambito
cli
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.