From c6c35d5639b977f8b8266e1add5f92c6155f4cde Mon Sep 17 00:00:00 2001 From: Some Random Crypto Guy Date: Tue, 14 Oct 2025 06:19:45 +0100 Subject: [PATCH] fixed get_tx_key implementation for Carrot (kludgy) --- src/wallet/tx_builder.cpp | 15 ++++++++++----- src/wallet/wallet2.cpp | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/wallet/tx_builder.cpp b/src/wallet/tx_builder.cpp index c0a162c..f953d23 100644 --- a/src/wallet/tx_builder.cpp +++ b/src/wallet/tx_builder.cpp @@ -1360,11 +1360,16 @@ wallet2::pending_tx make_pending_carrot_tx(const carrot::CarrotTransactionPropos ptx.change_dts = change_dts; ptx.selected_transfers = std::move(selected_transfers); ptx.key_images = key_images_string.str(); - ptx.tx_key = shared_ephemeral_pubkey ? ephemeral_privkeys.at(0) : crypto::null_skey; - if (shared_ephemeral_pubkey) - ptx.additional_tx_keys = std::move(ephemeral_privkeys); - else - ptx.additional_tx_keys.clear(); + if (ephemeral_privkeys.size() == 1) { + ptx.tx_key = ephemeral_privkeys.at(0); + ptx.additional_tx_keys.clear(); + } else if (ephemeral_privkeys.size() == 2 && shared_ephemeral_pubkey) { + ptx.tx_key = (ephemeral_privkeys.at(0) == crypto::null_skey) ? ephemeral_privkeys.at(1) : ephemeral_privkeys.at(0); + ptx.additional_tx_keys.clear(); + } else { + ptx.tx_key = crypto::null_skey; + ptx.additional_tx_keys = std::move(ephemeral_privkeys); + } ptx.dests = std::move(dests); ptx.multisig_sigs = {}; ptx.multisig_tx_key_entropy = {}; diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 949323a..0ddd7c1 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -7824,7 +7824,7 @@ void wallet2::commit_tx(pending_tx& ptx) amount_in += m_transfers[idx].amount(); } add_unconfirmed_tx(ptx.tx, amount_in, dests, payment_id, ptx.change_dts.amount, subaddr_account, subaddr_indices); - if (store_tx_info() && ptx.tx_key != crypto::null_skey) + if (store_tx_info() && (ptx.tx_key != crypto::null_skey || ptx.additional_tx_keys.size() != 0)) { m_tx_keys[txid] = ptx.tx_key; m_additional_tx_keys[txid] = ptx.additional_tx_keys; @@ -12582,8 +12582,8 @@ bool wallet2::get_tx_key_cached(const crypto::hash &txid, crypto::secret_key &tx if (i == m_tx_keys.end()) return false; tx_key = i->second; - if (tx_key == crypto::null_skey) - return false; + //if (tx_key == crypto::null_skey) + // return false; const auto j = m_additional_tx_keys.find(txid); if (j != m_additional_tx_keys.end()) additional_tx_keys = j->second;