Skip to content

Commit b37a020

Browse files
committed
carrot+fcmp: fix libwallet hot/cold compile errors
1 parent ad79dc1 commit b37a020

6 files changed

Lines changed: 30 additions & 20 deletions

File tree

src/wallet/api/pending_transaction.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,12 @@ bool PendingTransactionImpl::commit(const std::string &filename, bool overwrite)
113113

114114
const bool tx_cold_signed = m_wallet.m_wallet->get_account().get_device().has_tx_cold_sign();
115115
if (tx_cold_signed){
116+
wallet2_basic::transfer_container transfers;
117+
m_wallet.m_wallet->get_transfers(transfers);
118+
116119
std::unordered_set<size_t> selected_transfers;
117120
for(const tools::wallet2::pending_tx & ptx : m_pending_tx){
118-
for(size_t s : ptx.selected_transfers){
121+
for(size_t s : tools::wallet::collect_selected_transfer_indices(ptx.construction_data, transfers)){
119122
selected_transfers.insert(s);
120123
}
121124
}

src/wallet/api/unsigned_transaction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ bool UnsignedTransactionImpl::checkLoadedTx(const std::string &extra_message)
175175
m_errorString = tr("Claimed change is larger than payment to the change address");
176176
return false;
177177
}
178-
if (!first_known_non_zero_change_dst == -1)
178+
if (!first_known_non_zero_change_dst)
179179
first_known_non_zero_change_dst = change_dst;
180180
if (change_dst.addr != first_known_non_zero_change_dst->addr)
181181
{

src/wallet/hot_cold.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,16 +431,16 @@ std::size_t num_unsigned_txs_ref(const UnsignedTransactionSetVariant &v)
431431
return std::visit(num_unsigned_txs_ref_visitor{}, v);
432432
}
433433
//-------------------------------------------------------------------------------------------------------------------
434-
std::size_t num_new_outputs(const UnsignedTransactionSetVariant &v)
434+
std::size_t num_new_outputs_ref(const UnsignedTransactionSetVariant &v)
435435
{
436-
struct num_new_outputs_visitor
436+
struct num_new_outputs_ref_visitor
437437
{
438438
std::size_t operator()(const UnsignedPreCarrotTransactionSet &x) const {
439439
return std::get<2>(x.transfers).size() + std::get<2>(x.new_transfers).size(); }
440440
std::size_t operator()(const UnsignedCarrotTransactionSetV1 &x) const { return x.new_transfers.size(); }
441441
};
442442

443-
return std::visit(num_new_outputs_visitor{}, v);
443+
return std::visit(num_new_outputs_ref_visitor{}, v);
444444
}
445445
//-------------------------------------------------------------------------------------------------------------------
446446
exported_pre_carrot_transfer_details export_cold_pre_carrot_output(const wallet2_basic::transfer_details &td)

src/wallet/hot_cold.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ using UnsignedTransactionSetVariant = std::variant<
206206
UnsignedCarrotTransactionSetV1
207207
>;
208208
std::size_t num_unsigned_txs_ref(const UnsignedTransactionSetVariant&);
209-
std::size_t num_new_outputs(const UnsignedTransactionSetVariant&);
209+
std::size_t num_new_outputs_ref(const UnsignedTransactionSetVariant&);
210210

211211
struct SignedFullTransactionSet
212212
{

src/wallet/wallet2.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{

src/wallet/wallet2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,7 @@ namespace tools
11671167
std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> export_outputs(bool all = false, uint32_t start = 0, uint32_t count = 0xffffffff) const;
11681168
std::string export_outputs_to_str(bool all = false, uint32_t start = 0, uint32_t count = 0xffffffff) const;
11691169
size_t import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_pre_carrot_transfer_details>> &outputs);
1170+
size_t import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<wallet::cold::exported_transfer_details_variant>> &outputs);
11701171
size_t import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<tools::wallet2::transfer_details>> &outputs);
11711172
size_t import_outputs_from_str(const std::string &outputs_st);
11721173
payment_container export_payments() const;

0 commit comments

Comments
 (0)