Bip32-Hd-Wallets
如何將 NBitcoin 用於 BIP32 錢包
我正在使用 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,目前還不是很穩定。