Bitcoin Core描述符錢包如何導出私鑰?

avatar
Bitpush
07-24

去年2024.6.23教鏈文章《真的假的?Bitcoin Core不支持導入私鑰了?》介紹了手搓BTC私鑰後如何導入到Bitcoin Core最新的描述符錢包(descriptor wallet)的方法和相關具體指令。有朋友看後問了一些延伸問題,作此文簡要補充。


問題一:描述符錢包是否支持導入BIP39助記詞?


答:不支持。


描述符錢包雖然支持BIP32分層確定性錢包,但是並不支持BIP39助記詞。


這就是教鏈為何在《劉教鏈超級小白課》中不建議使用助記詞製作囤BTC的冷錢包,而是直接創建並抄寫私鑰的原因之一。而即便是助記詞,不同的軟硬件錢包也可能按照不同的規範實現,導致你在A軟件中創建的助記詞無法導入到B軟件,或者導入進去後得到的是全然不同的地址,從而找不到自己囤的BTC了。


問題二:如何創建支持私鑰的描述符錢包?


答:最新版本Bitcoin Core不會自動幫你初始化錢包。你需要使用命令自行創建錢包。創建時禁用私鑰則會創建為觀察錢包(watch-only wallet),不禁用私鑰創建標準錢包。具體命令如下:

$ bitcoin-cli -named createwallet wallet_name="testwallet" descriptors=true disable_private_keys=false


請注意上述命令中的 disable_private_keys=false 顯式指明不禁用私鑰。


如果要增加安全性,最好把錢包加密。

$ bitcoin-cli -rpcwallet=testwallet encryptwallet "你的本地加密密碼"


問題三:那麼,如何導出描述錢包中某個地址的私鑰呢?


答:十分簡單!直接把描述符顯示出來就可以了。具體命令:

$ bitcoin-cli listdescriptors true{  "wallet_name": "testwallet",  "descriptors": [    {      "desc": "pkh(5KQ2upQdz2wPfYCT2MfXdgmqZKZtFPDmzm8ubXimR76pYMANUdM)#8rrz94h2",      "timestamp": 1753270055,      "active": false    },...


上面命令的結果所顯示的就是2024.6.23教鏈文章《真的假的?Bitcoin Core不支持導入私鑰了?》中導入的私鑰描述符。可見,Bitcoin Core既不加密、也不隱藏你導入的描述符,而是完整地展現出來。


請注意listdescriptors命令後面的參數true,它指明瞭顯示私鑰描述符。如果不加這個參數的話,則只會顯示公鑰描述符,那麼你就看不見私鑰。


看到私鑰描述符後,我們就可以用2024.6.23教鏈文章《真的假的?Bitcoin Core不支持導入私鑰了?》中介紹過的getdescriptorinfo進行驗證:

$ bitcoin-cli getdescriptorinfo "pkh(5KQ2upQdz2wPfYCT2MfXdgmqZKZtFPDmzm8ubXimR76pYMANUdM)"{  "descriptor": "pkh(04e510bfa12225bbc2044a1847eda44a26e8a842cbf45c11d74ade893e506fc9e209c7c0044c5321ea22edf9dc1d8e45bed3663ed7c637eb564a7dd0a23ca8e45c)#afvrzgrk",  "checksum": "8rrz94h2",  "isrange": false,  "issolvable": true,  "hasprivatekeys": true}


結果不是很直觀,看不見私鑰描述符對應的BTC地址。我們還需要使用下面的命令來查看對應地址:

$ bitcoin-cli deriveaddresses "pkh(04e510bfa12225bbc2044a1847eda44a26e8a842cbf45c11d74ade893e506fc9e209c7c0044c5321ea22edf9dc1d8e45bed3663ed7c637eb564a7dd0a23ca8e45c)#afvrzgrk"[  "13cuZK94jvtCBPDoXd86MiiFTyMnQWkCS6"]


注意上面deriveaddresses指令後面給的參數是上一命令執行結果中的公鑰描述符。


至此我們就足夠確信最初從描述符列表中獲取到的私鑰描述符及其所對應的地址了。


是不是很簡單?啊,其實並不是!所以教鏈偷懶,用的其實是electrum。這在之前手搓私鑰等文章中早就說過了。


另外說一句,上面演示命令教鏈其實是使用Bitcoin Knots操作的。Knots是Core的一個分支版本,增加了一些過濾瘦身功能,有助於節省運行節點所需的資源。


什麼,你還想問HD錢包地址和私鑰的問題?這篇文章已經太長了。這個更復雜、困難的話題,我們還是留著以後再說吧!

相关赛道:
來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論