@@ -14220,10 +14220,8 @@ size_t wallet2::import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<
1422014220 return m_transfers.size();
1422114221}
1422214222//----------------------------------------------------------------------------------------------------
14223- size_t wallet2::import_outputs_from_str (const std::string &outputs_st )
14223+ size_t wallet2::import_outputs (const std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> &outputs )
1422414224{
14225- PERF_TIMER(import_outputs_from_str);
14226-
1422714225 // devices
1422814226 const auto addr_dev = get_cryptonote_address_device();
1422914227 const carrot::hybrid_hierarchy_address_device_composed hybrid_addr_dev(&*addr_dev, nullptr);
@@ -14233,27 +14231,35 @@ size_t wallet2::import_outputs_from_str(const std::string &outputs_st)
1423314231 nullptr,
1423414232 &*addr_dev);
1423514233
14234+ // expand cold outputs
14235+ wallet2_basic::transfer_container expanded_outputs;
14236+ expanded_outputs.reserve(std::get<2>(outputs).size());
14237+ for (const wallet::cold::exported_transfer_details_variant &cold_output : std::get<2>(outputs))
14238+ expanded_outputs.push_back(wallet::cold::import_cold_output(cold_output, *addr_dev, key_image_dev));
14239+
14240+ // import in `wallet2_basic::transfer_details` form
14241+ return import_outputs({std::get<0>(outputs), std::get<1>(outputs), std::move(expanded_outputs)});
14242+ }
14243+ //----------------------------------------------------------------------------------------------------
14244+ size_t wallet2::import_outputs_from_str(const std::string &outputs_st)
14245+ {
14246+ PERF_TIMER(import_outputs_from_str);
14247+
1423614248 size_t imported_outputs = 0;
1423714249 try
1423814250 {
1423914251 // decrypt payload
14240- std::tuple<std::uint64_t, std::uint64_t, std::vector<transfer_details>> expanded_outputs;
14241- std::vector<wallet::cold::exported_transfer_details_variant> cold_outputs;
14252+ std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> cold_outputs;
1424214253 wallet::cold::decrypt_exported_outputs(outputs_st,
1424314254 m_account.get_keys().m_account_address.m_spend_public_key,
1424414255 m_account.get_keys().m_view_secret_key,
1424514256 m_kdf_rounds,
14246- std::get<0>(expanded_outputs),
14247- std::get<1>(expanded_outputs),
14248- cold_outputs);
14249-
14250- // expand cold outputs into transfer_details
14251- std::get<2>(expanded_outputs).reserve(cold_outputs.size());
14252- for (const wallet::cold::exported_transfer_details_variant &etd : cold_outputs)
14253- std::get<2>(expanded_outputs).push_back(wallet::cold::import_cold_output(etd, *addr_dev, key_image_dev));
14257+ std::get<0>(cold_outputs),
14258+ std::get<1>(cold_outputs),
14259+ std::get<2>(cold_outputs));
1425414260
1425514261 // import
14256- imported_outputs = import_outputs(expanded_outputs );
14262+ imported_outputs = import_outputs(cold_outputs );
1425714263 }
1425814264 catch (const std::exception &e)
1425914265 {
0 commit comments