mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-30 02:31:05 +02:00
wallet: Parse hdKeypath if key_origin is not available
When topping up an inactive HD chain, either key_origin will be available and we can use the path given there, or we need to figure out the path from the string hdKeypath.
This commit is contained in:
@ -382,14 +382,22 @@ std::vector<WalletDestination> LegacyScriptPubKeyMan::MarkUnusedAddresses(const
|
|||||||
if (it != mapKeyMetadata.end()){
|
if (it != mapKeyMetadata.end()){
|
||||||
CKeyMetadata meta = it->second;
|
CKeyMetadata meta = it->second;
|
||||||
if (!meta.hd_seed_id.IsNull() && meta.hd_seed_id != m_hd_chain.seed_id) {
|
if (!meta.hd_seed_id.IsNull() && meta.hd_seed_id != m_hd_chain.seed_id) {
|
||||||
if (meta.key_origin.path.size() < 3) {
|
std::vector<uint32_t> path;
|
||||||
WalletLogPrintf("%s: Adding inactive seed keys failed, insufficient path size: %d, has_key_origin: %s\n",
|
if (meta.has_key_origin) {
|
||||||
|
path = meta.key_origin.path;
|
||||||
|
} else if (!ParseHDKeypath(meta.hdKeypath, path)) {
|
||||||
|
WalletLogPrintf("%s: Adding inactive seed keys failed, invalid hdKeypath: %s\n",
|
||||||
__func__,
|
__func__,
|
||||||
meta.key_origin.path.size(),
|
meta.hdKeypath);
|
||||||
|
}
|
||||||
|
if (path.size() != 3) {
|
||||||
|
WalletLogPrintf("%s: Adding inactive seed keys failed, invalid path size: %d, has_key_origin: %s\n",
|
||||||
|
__func__,
|
||||||
|
path.size(),
|
||||||
meta.has_key_origin);
|
meta.has_key_origin);
|
||||||
} else {
|
} else {
|
||||||
bool internal = (meta.key_origin.path[1] & ~BIP32_HARDENED_KEY_LIMIT) != 0;
|
bool internal = (path[1] & ~BIP32_HARDENED_KEY_LIMIT) != 0;
|
||||||
int64_t index = meta.key_origin.path[2] & ~BIP32_HARDENED_KEY_LIMIT;
|
int64_t index = path[2] & ~BIP32_HARDENED_KEY_LIMIT;
|
||||||
|
|
||||||
if (!TopUpInactiveHDChain(meta.hd_seed_id, index, internal)) {
|
if (!TopUpInactiveHDChain(meta.hd_seed_id, index, internal)) {
|
||||||
WalletLogPrintf("%s: Adding inactive seed keys failed\n", __func__);
|
WalletLogPrintf("%s: Adding inactive seed keys failed\n", __func__);
|
||||||
|
Reference in New Issue
Block a user