Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Add taproot privacy optimisations in policy compiler

Aberta
#244 3 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
55/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Pouca atividade
Stack de tecnologia
rust
Domínio
cli

Direção de pesquisa

Rastreie o ponto de entrada bdk-cli compile --type tr e inspecione a chamada atual de compile e o wrapping manual de uma única leaf. Compare esse caminho com a saída de compile_tr do rust-miniscript para os exemplos disjuntivo e de threshold; considera-se concluído quando as políticas taproot usam leaves separadas e a árvore resultante recebe a otimização de Huffman pretendida.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

enhancement

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))
Linguagem predominante
Rust
Estrelas
143
Forks
103
Merge médio
2d 8h
PRs com merge (30d)
4

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de bitcoindevkit/bdk-cli

Todas as issues de bitcoindevkit/bdk-cli

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.