@@ -602,19 +602,42 @@ UniValue dumpwallet(const UniValue& params, bool fHelp)
602
602
file << strprintf (" # * Best block at time of backup was %i (%s),\n " , chainActive.Height (), chainActive.Tip ()->GetBlockHash ().ToString ());
603
603
file << strprintf (" # mined on %s\n " , EncodeDumpTime (chainActive.Tip ()->GetBlockTime ()));
604
604
file << " \n " ;
605
+
606
+ // add the base58check encoded extended master if the wallet uses HD
607
+ CKeyID masterKeyID = pwalletMain->GetHDChain ().masterKeyID ;
608
+ if (!masterKeyID.IsNull ())
609
+ {
610
+ CKey key;
611
+ if (pwalletMain->GetKey (masterKeyID, key))
612
+ {
613
+ CExtKey masterKey;
614
+ masterKey.SetMaster (key.begin (), key.size ());
615
+
616
+ CBitcoinExtKey b58extkey;
617
+ b58extkey.SetKey (masterKey);
618
+
619
+ file << " # extended private masterkey: " << b58extkey.ToString () << " \n\n " ;
620
+ }
621
+ }
605
622
for (std::vector<std::pair<int64_t , CKeyID> >::const_iterator it = vKeyBirth.begin (); it != vKeyBirth.end (); it++) {
606
623
const CKeyID &keyid = it->second ;
607
624
std::string strTime = EncodeDumpTime (it->first );
608
625
std::string strAddr = CBitcoinAddress (keyid).ToString ();
609
626
CKey key;
610
627
if (pwalletMain->GetKey (keyid, key)) {
628
+ file << strprintf (" %s %s " , CBitcoinSecret (key).ToString (), strTime);
611
629
if (pwalletMain->mapAddressBook .count (keyid)) {
612
- file << strprintf (" %s %s label=%s # addr=%s\n " , CBitcoinSecret (key).ToString (), strTime, EncodeDumpString (pwalletMain->mapAddressBook [keyid].name ), strAddr);
630
+ file << strprintf (" label=%s" , EncodeDumpString (pwalletMain->mapAddressBook [keyid].name ));
631
+ } else if (keyid == masterKeyID) {
632
+ file << " hdmaster=1" ;
613
633
} else if (setKeyPool.count (keyid)) {
614
- file << strprintf (" %s %s reserve=1 # addr=%s\n " , CBitcoinSecret (key).ToString (), strTime, strAddr);
634
+ file << " reserve=1" ;
635
+ } else if (pwalletMain->mapKeyMetadata [keyid].hdKeypath == " m" ) {
636
+ file << " inactivehdmaster=1" ;
615
637
} else {
616
- file << strprintf ( " %s %s change=1 # addr=%s \n " , CBitcoinSecret (key). ToString (), strTime, strAddr) ;
638
+ file << " change=1" ;
617
639
}
640
+ file << strprintf (" # addr=%s%s\n " , strAddr, (pwalletMain->mapKeyMetadata [keyid].hdKeypath .size () > 0 ? " hdkeypath=" +pwalletMain->mapKeyMetadata [keyid].hdKeypath : " " ));
618
641
}
619
642
}
620
643
file << " \n " ;
0 commit comments