Informational Final
BIP-384: 組合描述符
定義 combo() 描述符函數,自動生成多種腳本類型以提高相容性。
Pieter Wuille, Andrew Chow 2021年6月27日
BIP 編號
384
類型
Informational
狀態
Final
創建日期
2021-06-27
摘要
BIP-384 定義了 combo() 描述符函數。
它是一個便利函數,自動為給定的密鑰生成所有可能的標準輸出類型, 主要用於導入可能使用任何類型輸出的舊密鑰。
格式
語法:combo(KEY) 等同於同時導入: • pk(KEY) — P2PK(如果 KEY 是非壓縮公鑰則只有這個) • pkh(KEY) — P2PKH • wpkh(KEY) — P2WPKH(僅壓縮公鑰) • sh(wpkh(KEY)) — P2SH-P2WPKH(僅壓縮公鑰)
展開規則
壓縮公鑰
當 KEY 是壓縮公鑰(33 bytes,02 或 03 開頭): combo(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5) 展開為: 1. pk(02c6047f...) // 裸公鑰 2. pkh(02c6047f...) // P2PKH(1... 地址) 3. wpkh(02c6047f...) // P2WPKH(bc1q... 地址) 4. sh(wpkh(02c6047f...)) // P2SH-P2WPKH(3... 地址) 共 4 種輸出類型
非壓縮公鑰
當 KEY 是非壓縮公鑰(65 bytes,04 開頭): combo(04c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5...) 展開為: 1. pk(04c6047f...) // 裸公鑰 2. pkh(04c6047f...) // P2PKH 共 2 種輸出類型 注意:SegWit 要求壓縮公鑰,所以 wpkh 和 sh(wpkh) 不包含
使用場景
導入舊密鑰
當你有一個舊的私鑰(WIF 格式)但不確定它被用於哪種地址類型時, 使用 combo() 可以監控所有可能的地址。
資金恢復
嘗試恢復不知道使用了哪種腳本類型的資金時, combo() 確保不會遺漏任何可能的輸出。
區塊鏈掃描
區塊瀏覽器或分析工具可能使用 combo() 來追蹤 與特定公鑰相關的所有可能輸出。
範例
# 導入一個舊的 WIF 私鑰
$ bitcoin-cli importdescriptors '[{
"desc": "combo(L1a2b3c4...)#checksum",
"timestamp": 0,
"label": "舊錢包密鑰"
}]'
# 這會監控該密鑰的所有可能地址類型
# 導入 xpub 的組合描述符
$ bitcoin-cli importdescriptors '[{
"desc": "combo([d34db33f/44h/0h/0h]xpub.../0/*)#checksum",
"timestamp": "now",
"range": [0, 999]
}]'
# 這會為每個派生的公鑰監控所有輸出類型 限制與注意事項
不建議用於新錢包
- 效率問題:combo() 會創建多個輸出監控,增加資源使用。
- 不夠精確:新錢包應該使用明確的描述符(如 wpkh)。
- 隱私考量:將所有地址類型關聯到同一密鑰可能降低隱私。
- 不含 Taproot:combo() 不包含 tr(),Taproot 需要單獨處理。
與其他描述符比較
| 場景 | 推薦描述符 |
|---|---|
| 新建 SegWit 錢包 | wpkh() |
| 新建 Taproot 錢包 | tr() |
| 導入已知類型的舊錢包 | pkh() 或 wpkh() |
| 導入未知類型的舊密鑰 | combo() |
總結
BIP-384 定義的 combo() 是一個便利工具,用於處理不確定腳本類型的舊密鑰。 它自動展開為所有可能的標準輸出類型,確保不會遺漏任何資金。 但對於新錢包,應該使用更精確的描述符如 wpkh() 或 tr()。
延伸閱讀: 查看 GitHub 上的完整 BIP-384 文件
已複製連結