Bip32-Hd-Wallets

如何將 NBitcoin 用於 BIP32 錢包

  • April 3, 2018

我正在使用 c# NBitcoin 在離線伺服器上生成主密鑰

ExtKey privateKey = new ExtKey("[My seed]");
ExtPubKey pubKey = privateKey.Neuter();

我需要為線上伺服器提供主公鑰,它可以生成所需的任意數量的地址,我的問題是:

如何將主公鑰 ( pubKey ) 傳遞給線上伺服器中的此程式碼?

BitcoinAddress address1 = **pubKey**.Derive([some client data]).PubKey.GetAddress(Network.Main);

收聽此新地址收到的付款的最佳做法是什麼?我正在處理對<http://btc.blockr.io/api/v1/address/unconfirmed/[address1]>
的 Web 請求 我的語言是 c# 伺服器端。

當你在做

BitcoinAddress address1 = **pubKey**.Derive([some client data]).PubKey.GetAddress(Network.Main);

你得到的是比特幣地址,而不是主公鑰。(ExtPubKey) HD pub key 比 pubkey 有更多的資訊。

正確的程式碼是

string wifStr = **pubkey**.Derive([some client data]).ToString(Network.Main)

然後你可以重新載入它

ExtPubKey key = ExtPubKey.Parse(wifStr)

事實上,ExtPubKey 的字元串格式有它所屬的網路,這就是為什麼你也有類型“BitcoinExtKey”,它以物件導向的形式表示:ExtPubKey 和網路。如果你需要它:

BitcoinExtPubKey wif = **pubkey**.GetWif(Network.Main)

看看我的書,還有其他圍繞 HD 鍵的程式碼範例。

關於最佳實踐,目前沒有靈丹妙藥。我創建了一個名為 RapidBase 的 API,它允許您創建錢包並在此錢包中添加要監控的地址。(你可以在github上找到它)

如果你願意,你可以嘗試一下,但它現在非常不穩定(API 方面),所以期待未來會發生變化。如果您正在使用阻止程序,我認為您最好的選擇是按照您的要求請求每個地址。

如果您使用的是 bitcoinq RPC,您可以添加地址,但是這需要時間,因為比特幣核心每次都會重新掃描區塊鏈以獲取相關交易。

我可能錯了,但目前還沒有好用的解決方案,我開發的異常 rapidbase,目前還不是很穩定。

引用自:https://bitcoin.stackexchange.com/questions/36748