我有一个应用程序,我在其中创建了一个带有密码短语的HD钱包,并为用户将公共主密钥保存到数据库中。
然后,我希望用户能够将钱包备份到自己的钱包中,在本例中我使用的是Wallet32。我恢复了Wallet32中的帐户,它使用的密钥路径为m/44'/0'/0'/
在我的应用程序端,我像这样创建密钥路径(在c#中):
KeyPath newKeyPath = new KeyPath("44/0/0/0/0" + nextDerivation);
var childKey = pubkey.Derive(newKeyPath);每次购买时,nextDerivsation变量都会递增。在应用程序端创建派生公钥时,它与wallet32中的派生公钥不匹配。因此,如果付款是通过应用程序进行的,Wallet32不会提取它。
我使用的是C# NBitcoin库。当我尝试在keyPath字符串中添加撇号时,如下所示:
KeyPath newKeyPath = new KeyPath("44'/0'/0'/0/0" + nextDerivation);
var childKey = pubkey.Derive(newKeyPath);然后我得到一个"invalid input format“错误。我不确定这些撇号是否是必需的,但是当我将相同的派生路径输入到Bip32生成器中时,我就可以创建相同的公钥。我可以将付款发送到派生的地址,然后wallet32会取走它。
谁能给我指出正确的方向,告诉我在NBitcoin库中需要使用什么KeyPath才能获得相同的结果?
发布于 2014-12-24 04:12:58
要获得更及时的响应,请毫不犹豫地在github上询问,这样我就会收到通知。
我的猜测是,44‘表示Wallet32使用的是“强化密钥”44,而44表示您使用的是非强化密钥44 (更多信息请参见BIP32)。
我不知道这样的符号,我可以在NBitcoin中支持它,因为我认为它很有用,但我需要一些测试数据,你能为我生成一些吗?
现在,如果你想让它工作,假设密钥44‘等于(44u | (1u << 31)),换句话说,第一位为1的44表示它是坚固的。
如果你能给我一个(根硬盘密钥+路径+子硬盘密钥)的例子,我可以更深入地研究它,并将其直接实现到NBitcoin中。
更新
在1.0.7.10中实现(https://github.com/NicolasDorier/NBitcoin/commit/ce5b70d6d27d7fc2cedd089bfd1133a6cd490c97)
您的代码应该可以按原样运行,运行NBitcoin -Package来更新您的解决方案,谢谢您指出这一点。
https://stackoverflow.com/questions/27299204
复制相似问题