@@ -14121,10 +14121,8 @@ size_t wallet2::import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<
14121
14121
return m_transfers.size();
14122
14122
}
14123
14123
//----------------------------------------------------------------------------------------------------
14124
- size_t wallet2::import_outputs_from_str (const std::string &outputs_st )
14124
+ size_t wallet2::import_outputs (const std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> &outputs )
14125
14125
{
14126
- PERF_TIMER(import_outputs_from_str);
14127
-
14128
14126
// devices
14129
14127
const auto addr_dev = get_cryptonote_address_device();
14130
14128
const carrot::hybrid_hierarchy_address_device_composed hybrid_addr_dev(&*addr_dev, nullptr);
@@ -14134,27 +14132,35 @@ size_t wallet2::import_outputs_from_str(const std::string &outputs_st)
14134
14132
nullptr,
14135
14133
&*addr_dev);
14136
14134
14135
+ // expand cold outputs
14136
+ wallet2_basic::transfer_container expanded_outputs;
14137
+ expanded_outputs.reserve(std::get<2>(outputs).size());
14138
+ for (const wallet::cold::exported_transfer_details_variant &cold_output : std::get<2>(outputs))
14139
+ expanded_outputs.push_back(wallet::cold::import_cold_output(cold_output, *addr_dev, key_image_dev));
14140
+
14141
+ // import in `wallet2_basic::transfer_details` form
14142
+ return import_outputs({std::get<0>(outputs), std::get<1>(outputs), std::move(expanded_outputs)});
14143
+ }
14144
+ //----------------------------------------------------------------------------------------------------
14145
+ size_t wallet2::import_outputs_from_str(const std::string &outputs_st)
14146
+ {
14147
+ PERF_TIMER(import_outputs_from_str);
14148
+
14137
14149
size_t imported_outputs = 0;
14138
14150
try
14139
14151
{
14140
14152
// decrypt payload
14141
- std::tuple<std::uint64_t, std::uint64_t, std::vector<transfer_details>> expanded_outputs;
14142
- std::vector<wallet::cold::exported_transfer_details_variant> cold_outputs;
14153
+ std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> cold_outputs;
14143
14154
wallet::cold::decrypt_exported_outputs(outputs_st,
14144
14155
m_account.get_keys().m_account_address.m_spend_public_key,
14145
14156
m_account.get_keys().m_view_secret_key,
14146
14157
m_kdf_rounds,
14147
- std::get<0>(expanded_outputs),
14148
- std::get<1>(expanded_outputs),
14149
- cold_outputs);
14150
-
14151
- // expand cold outputs into transfer_details
14152
- std::get<2>(expanded_outputs).reserve(cold_outputs.size());
14153
- for (const wallet::cold::exported_transfer_details_variant &etd : cold_outputs)
14154
- std::get<2>(expanded_outputs).push_back(wallet::cold::import_cold_output(etd, *addr_dev, key_image_dev));
14158
+ std::get<0>(cold_outputs),
14159
+ std::get<1>(cold_outputs),
14160
+ std::get<2>(cold_outputs));
14155
14161
14156
14162
// import
14157
- imported_outputs = import_outputs(expanded_outputs );
14163
+ imported_outputs = import_outputs(cold_outputs );
14158
14164
}
14159
14165
catch (const std::exception &e)
14160
14166
{
0 commit comments