bitcoindevkit / bitcoindevkit/bdk-cli
Add taproot privacy optimisations in policy compiler
- 主要言語
- Rust
- スター
- 141
- フォーク
- 99
- 平均マージ
- 6日 14分
- マージ済み PR(30日)
- 1
説明
**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))
```
コントリビューションガイド
調査の方向性
`bdk-cli compile --type tr` のエントリーポイントを追跡し、現在の `compile` 呼び出しと単一 leaf の手動ラッピングを調査してください。その経路を、選言および threshold の例に対する rust-miniscript の `compile_tr` の出力と比較してください。taproot ポリシーが個別の leaf を使用し、結果のツリーに意図した Huffman 最適化が適用されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- rust
- 領域
- cli
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 55/100