forked from dashpay/dash
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge bitcoin#14021: Import key origin data through descriptors in im…
…portmulti cb3511b Add release notes for importing key origin info change (Andrew Chow) 4c75a69 Test importing descriptors with key origin information (Andrew Chow) 02d6586 Import KeyOriginData when importing descriptors (Andrew Chow) 3d235df Implement a function to add KeyOriginInfo to a wallet (Andrew Chow) eab63bc Store key origin info in key metadata (Andrew Chow) 345bff6 Remove hdmasterkeyid (Andrew Chow) bac8c67 Add a method to CWallet to write just CKeyMetadata (Andrew Chow) e7652d3 Add WriteHDKeypath function and move *HDKeypath to util/bip32.{h,cpp} (Andrew Chow) c45415f Refactor keymetadata writing to a separate method (Andrew Chow) Pull request description: This PR allows for key origin data as defined by the descriptors document to be imported to the wallet when importing a descriptor using `importmulti`. This allows the `walletprocesspsbt` to include the BIP 32 derivation paths for keys that it is watching that are from a different HD wallet. In order to make this easier to use, a new field `hdmasterkeyfingerprint` has been added to `getaddressinfo`. Additionally I have removed `hdmasterkeyid` as was planned. I think that this API change is fine since it was going to be removed in 0.18 anyways. `CKeyMetadata` has also been extended to store key origin info to facilitate this. Tree-SHA512: 9c7794f3c793da57e23c5abbdc3d58779ee9dea3d53168bb86c0643a4ad5a11a446264961e2f772f35eea645048cb60954ed58050002caee4e43cd9f51215097
- Loading branch information
1 parent
f451701
commit ee69976
Showing
7 changed files
with
167 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
Miscellaneous RPC Changes | ||
------------------------- | ||
- Descriptors with key origin information imported through `importmulti` will have their key origin information stored in the wallet for use with creating PSBTs. | ||
- If `bip32derivs` of both `walletprocesspsbt` and `walletcreatefundedpsbt` is set to true but the key metadata for a public key has not been updated yet, then that key will have a derivation path as if it were just an independent key (i.e. no derivation path and its master fingerprint is itself) | ||
|
||
Miscellaneous Wallet changes | ||
---------------------------- | ||
|
||
- The key metadata will need to be upgraded the first time that the HD seed is available. | ||
For unencrypted wallets this will occur on wallet loading. | ||
For encrypted wallets this will occur the first time the wallet is unlocked. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// Copyright (c) 2019 The Bitcoin Core developers | ||
// Distributed under the MIT software license, see the accompanying | ||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
#include <sstream> | ||
#include <stdio.h> | ||
#include <tinyformat.h> | ||
#include <util/bip32.h> | ||
#include <util/strencodings.h> | ||
|
||
|
||
bool ParseHDKeypath(const std::string& keypath_str, std::vector<uint32_t>& keypath) | ||
{ | ||
std::stringstream ss(keypath_str); | ||
std::string item; | ||
bool first = true; | ||
while (std::getline(ss, item, '/')) { | ||
if (item.compare("m") == 0) { | ||
if (first) { | ||
first = false; | ||
continue; | ||
} | ||
return false; | ||
} | ||
// Finds whether it is hardened | ||
uint32_t path = 0; | ||
size_t pos = item.find("'"); | ||
if (pos != std::string::npos) { | ||
// The hardened tick can only be in the last index of the string | ||
if (pos != item.size() - 1) { | ||
return false; | ||
} | ||
path |= 0x80000000; | ||
item = item.substr(0, item.size() - 1); // Drop the last character which is the hardened tick | ||
} | ||
|
||
// Ensure this is only numbers | ||
if (item.find_first_not_of( "0123456789" ) != std::string::npos) { | ||
return false; | ||
} | ||
uint32_t number; | ||
if (!ParseUInt32(item, &number)) { | ||
return false; | ||
} | ||
path |= number; | ||
|
||
keypath.push_back(path); | ||
first = false; | ||
} | ||
return true; | ||
} | ||
|
||
std::string FormatHDKeypath(const std::vector<uint32_t>& path) | ||
{ | ||
std::string ret; | ||
for (auto i : path) { | ||
ret += strprintf("/%i", (i << 1) >> 1); | ||
if (i >> 31) ret += '\''; | ||
} | ||
return ret; | ||
} | ||
|
||
std::string WriteHDKeypath(const std::vector<uint32_t>& keypath) | ||
{ | ||
return "m" + FormatHDKeypath(keypath); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Copyright (c) 2019 The Bitcoin Core developers | ||
// Distributed under the MIT software license, see the accompanying | ||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
#ifndef BITCOIN_UTIL_BIP32_H | ||
#define BITCOIN_UTIL_BIP32_H | ||
|
||
#include <attributes.h> | ||
#include <string> | ||
#include <vector> | ||
|
||
/** Parse an HD keypaths like "m/7/0'/2000". */ | ||
NODISCARD bool ParseHDKeypath(const std::string& keypath_str, std::vector<uint32_t>& keypath); | ||
|
||
/** Write HD keypaths as strings */ | ||
std::string WriteHDKeypath(const std::vector<uint32_t>& keypath); | ||
std::string FormatHDKeypath(const std::vector<uint32_t>& path); | ||
|
||
#endif // BITCOIN_UTIL_BIP32_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters