bitcoindevkit / bitcoindevkit/bdk-cli
Add taproot privacy optimisations in policy compiler
- Ngôn ngữ chính
- Rust
- Star
- 141
- Fork
- 99
- Merge trung bình
- 6 ngày 14 phút
- Pull request đã merge (30 ngày)
- 1
Mô tả
**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))
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Theo dõi entry point `bdk-cli compile --type tr` và kiểm tra lệnh gọi `compile` hiện tại cùng việc wrapping thủ công một leaf duy nhất. So sánh đường dẫn đó với output của `compile_tr` trong rust-miniscript cho các ví dụ disjunctive và threshold; hoàn thành khi các policy taproot sử dụng các leaf riêng biệt và cây kết quả nhận được tối ưu hóa Huffman như dự định.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rust
- Lĩnh vực
- cli
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 55/100