Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/rpcdump.cpp
Show First 20 Lines • Show All 1,316 Lines • ▼ Show 20 Lines | if (!parsed_desc->IsRange() && data.exists("range")) { | ||||
"Descriptor is ranged, please specify the range"); | "Descriptor is ranged, please specify the range"); | ||||
} | } | ||||
std::tie(range_start, range_end) = ParseDescriptorRange(data["range"]); | std::tie(range_start, range_end) = ParseDescriptorRange(data["range"]); | ||||
} | } | ||||
const UniValue &priv_keys = | const UniValue &priv_keys = | ||||
data.exists("keys") ? data["keys"].get_array() : UniValue(); | data.exists("keys") ? data["keys"].get_array() : UniValue(); | ||||
// Expand all descriptors to get public keys and scripts. | // Expand all descriptors to get public keys and scripts, and private keys | ||||
// TODO: get private keys from descriptors too | // if available. | ||||
for (int i = range_start; i <= range_end; ++i) { | for (int i = range_start; i <= range_end; ++i) { | ||||
FlatSigningProvider out_keys; | FlatSigningProvider out_keys; | ||||
std::vector<CScript> scripts_temp; | std::vector<CScript> scripts_temp; | ||||
parsed_desc->Expand(i, keys, scripts_temp, out_keys); | parsed_desc->Expand(i, keys, scripts_temp, out_keys); | ||||
std::copy(scripts_temp.begin(), scripts_temp.end(), | std::copy(scripts_temp.begin(), scripts_temp.end(), | ||||
std::inserter(script_pub_keys, script_pub_keys.end())); | std::inserter(script_pub_keys, script_pub_keys.end())); | ||||
for (const auto &key_pair : out_keys.pubkeys) { | for (const auto &key_pair : out_keys.pubkeys) { | ||||
ordered_pubkeys.push_back(key_pair.first); | ordered_pubkeys.push_back(key_pair.first); | ||||
} | } | ||||
for (const auto &x : out_keys.scripts) { | for (const auto &x : out_keys.scripts) { | ||||
import_data.import_scripts.emplace(x.second); | import_data.import_scripts.emplace(x.second); | ||||
} | } | ||||
parsed_desc->ExpandPrivate(i, keys, out_keys); | |||||
std::copy(out_keys.pubkeys.begin(), out_keys.pubkeys.end(), | std::copy(out_keys.pubkeys.begin(), out_keys.pubkeys.end(), | ||||
std::inserter(pubkey_map, pubkey_map.end())); | std::inserter(pubkey_map, pubkey_map.end())); | ||||
std::copy(out_keys.keys.begin(), out_keys.keys.end(), | |||||
std::inserter(privkey_map, privkey_map.end())); | |||||
import_data.key_origins.insert(out_keys.origins.begin(), | import_data.key_origins.insert(out_keys.origins.begin(), | ||||
out_keys.origins.end()); | out_keys.origins.end()); | ||||
} | } | ||||
for (size_t i = 0; i < priv_keys.size(); ++i) { | for (size_t i = 0; i < priv_keys.size(); ++i) { | ||||
const auto &str = priv_keys[i].get_str(); | const auto &str = priv_keys[i].get_str(); | ||||
CKey key = DecodeSecret(str); | CKey key = DecodeSecret(str); | ||||
if (!key.IsValid()) { | if (!key.IsValid()) { | ||||
▲ Show 20 Lines • Show All 500 Lines • Show Last 20 Lines |