Skip to content

Commit 1c2ba85

Browse files
committed
carrot+fcmp: fix libwallet hot/cold compile errors
1 parent 61a849a commit 1c2ba85

File tree

6 files changed

+30
-20
lines changed

6 files changed

+30
-20
lines changed

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
@@ -14121,10 +14121,8 @@ size_t wallet2::import_outputs(const std::tuple<uint64_t, uint64_t, std::vector<
1412114121
return m_transfers.size();
1412214122
}
1412314123
//----------------------------------------------------------------------------------------------------
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)
1412514125
{
14126-
PERF_TIMER(import_outputs_from_str);
14127-
1412814126
// devices
1412914127
const auto addr_dev = get_cryptonote_address_device();
1413014128
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)
1413414132
nullptr,
1413514133
&*addr_dev);
1413614134

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+
1413714149
size_t imported_outputs = 0;
1413814150
try
1413914151
{
1414014152
// 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;
1414314154
wallet::cold::decrypt_exported_outputs(outputs_st,
1414414155
m_account.get_keys().m_account_address.m_spend_public_key,
1414514156
m_account.get_keys().m_view_secret_key,
1414614157
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));
1415514161

1415614162
// import
14157-
imported_outputs = import_outputs(expanded_outputs);
14163+
imported_outputs = import_outputs(cold_outputs);
1415814164
}
1415914165
catch (const std::exception &e)
1416014166
{

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)