bitcoindevkit / bitcoindevkit/bdk-cli

Add taproot privacy optimisations in policy compiler

Abierto
#244 3 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Rust
Estrellas
141
Forks
99
Merge medio
6 d 14 min
PR fusionados (30 d)
1

Descripción

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

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Sigue el punto de entrada `bdk-cli compile --type tr` e inspecciona la llamada actual a `compile` y el wrapping manual de una única leaf. Compara ese camino con la salida de `compile_tr` de rust-miniscript para los ejemplos disyuntivo y de threshold; se considera completado cuando las políticas de taproot usan leaves separadas y el árbol resultante recibe la optimización de Huffman prevista.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rust
Área
cli
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.