descriptors: Change Parse to return vector of descriptors
When given a descriptor which contins a multipath derivation specifier, a vector of descriptors will be returned.
This commit is contained in:
1 parent
0d640c6f02
commit
1bbf46e2da
22 files changed
+178
-111
No files matched your search
@@ -68,7 +68,7 @@ void ImportDescriptors(CWallet& wallet, const std::string& seed_insecure)
|
||||
|
||||
FlatSigningProvider keys;
|
||||
std::string error;
|
||||
auto parsed_desc = Parse(descriptor, keys, error, /*require_checksum=*/false);
|
||||
auto parsed_desc = std::move(Parse(descriptor, keys, error, /*require_checksum=*/false).at(0));
|
||||
assert(parsed_desc);
|
||||
assert(error.empty());
|
||||
assert(parsed_desc->IsRange());
|
||||
|
||||
@@ -69,10 +69,10 @@ static std::optional<std::pair<WalletDescriptor, FlatSigningProvider>> CreateWal
|
||||
|
||||
FlatSigningProvider keys;
|
||||
std::string error;
|
||||
std::unique_ptr<Descriptor> parsed_desc{Parse(desc_str.value(), keys, error, false)};
|
||||
if (!parsed_desc) return std::nullopt;
|
||||
std::vector<std::unique_ptr<Descriptor>> parsed_descs = Parse(desc_str.value(), keys, error, false);
|
||||
if (parsed_descs.empty()) return std::nullopt;
|
||||
|
||||
WalletDescriptor w_desc{std::move(parsed_desc), /*creation_time=*/0, /*range_start=*/0, /*range_end=*/1, /*next_index=*/1};
|
||||
WalletDescriptor w_desc{std::move(parsed_descs.at(0)), /*creation_time=*/0, /*range_start=*/0, /*range_end=*/1, /*next_index=*/1};
|
||||
return std::make_pair(w_desc, keys);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,13 +25,14 @@ wallet::ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string&
|
||||
|
||||
FlatSigningProvider keys;
|
||||
std::string error;
|
||||
std::unique_ptr<Descriptor> parsed_desc = Parse(desc_str, keys, error, false);
|
||||
BOOST_CHECK(success == (parsed_desc != nullptr));
|
||||
auto parsed_descs = Parse(desc_str, keys, error, false);
|
||||
BOOST_CHECK(success == (!parsed_descs.empty()));
|
||||
if (!success) return nullptr;
|
||||
auto& desc = parsed_descs.at(0);
|
||||
|
||||
const int64_t range_start = 0, range_end = 1, next_index = 0, timestamp = 1;
|
||||
|
||||
WalletDescriptor w_desc(std::move(parsed_desc), timestamp, range_start, range_end, next_index);
|
||||
WalletDescriptor w_desc(std::move(desc), timestamp, range_start, range_end, next_index);
|
||||
|
||||
LOCK(keystore.cs_wallet);
|
||||
|
||||
|
||||
@@ -21,8 +21,9 @@ static void import_descriptor(CWallet& wallet, const std::string& descriptor)
|
||||
AssertLockHeld(wallet.cs_wallet);
|
||||
FlatSigningProvider provider;
|
||||
std::string error;
|
||||
std::unique_ptr<Descriptor> desc = Parse(descriptor, provider, error, /* require_checksum=*/ false);
|
||||
assert(desc);
|
||||
auto descs = Parse(descriptor, provider, error, /* require_checksum=*/ false);
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 10, 0);
|
||||
wallet.AddWalletDescriptor(w_desc, provider, "", false);
|
||||
}
|
||||
|
||||
@@ -31,8 +31,9 @@ std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cc
|
||||
|
||||
FlatSigningProvider provider;
|
||||
std::string error;
|
||||
std::unique_ptr<Descriptor> desc = Parse("combo(" + EncodeSecret(key) + ")", provider, error, /* require_checksum=*/ false);
|
||||
assert(desc);
|
||||
auto descs = Parse("combo(" + EncodeSecret(key) + ")", provider, error, /* require_checksum=*/ false);
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
|
||||
if (!wallet->AddWalletDescriptor(w_desc, provider, "", false)) assert(false);
|
||||
}
|
||||
|
||||
@@ -65,8 +65,9 @@ static void AddKey(CWallet& wallet, const CKey& key)
|
||||
LOCK(wallet.cs_wallet);
|
||||
FlatSigningProvider provider;
|
||||
std::string error;
|
||||
std::unique_ptr<Descriptor> desc = Parse("combo(" + EncodeSecret(key) + ")", provider, error, /* require_checksum=*/ false);
|
||||
assert(desc);
|
||||
auto descs = Parse("combo(" + EncodeSecret(key) + ")", provider, error, /* require_checksum=*/ false);
|
||||
assert(descs.size() == 1);
|
||||
auto& desc = descs.at(0);
|
||||
WalletDescriptor w_desc(std::move(desc), 0, 0, 1, 1);
|
||||
if (!wallet.AddWalletDescriptor(w_desc, provider, "", false)) assert(false);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user