From 8f93306ed526e0e573b33fc7dd40abbba7e7a00a Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Tue, 15 Oct 2024 18:00:05 +0200 Subject: [PATCH] fix for coin control patch --- src/wallet/api/coins.cpp | 1 + src/wallet/api/wallet.cpp | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/wallet/api/coins.cpp b/src/wallet/api/coins.cpp index 2321c638d..ef12141cf 100644 --- a/src/wallet/api/coins.cpp +++ b/src/wallet/api/coins.cpp @@ -114,6 +114,7 @@ void CoinsImpl::setFrozen(int index) { try { + LOG_ERROR("Freezing coin: " << index); m_wallet->m_wallet->freeze(index); refresh(); } diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index ec7d60ec0..db127dae4 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -2116,6 +2116,7 @@ PendingTransaction *WalletImpl::createTransactionMultDest(const std::vectornettype(), dst_addr[i])) { // TODO: copy-paste 'if treating as an address fails, try as url' from simplewallet.cpp:1982 @@ -2137,6 +2138,7 @@ PendingTransaction *WalletImpl::createTransactionMultDest(const std::vectorunlocked_balance(subaddr_account, true); + // if (maxAllowedSpend < amountSum) { + // error = true; + // setStatusError(tr("Amount you are trying to spend is larger than unlocked amount")); + // break; + // } std::vector preferred_input_list; if (!preferred_inputs.empty()) { + LOG_ERROR("empty"); + for (const auto &public_key : preferred_inputs) { crypto::key_image keyImage; bool r = epee::string_tools::hex_to_pod(public_key, keyImage); - if (!r) { + if (!r) { error = true; setStatusError(tr("failed to parse key image")); break; } + if (m_wallet->frozen(keyImage)) { + error = true; + setStatusError(tr("refusing to spend frozen coin")); + break; + } + preferred_input_list.push_back(keyImage); } + } else { + LOG_ERROR("not empty"); + + boost::shared_lock transfers_lock(m_wallet->m_transfers_mutex); + for (size_t i = 0; i < m_wallet->get_num_transfer_details(); ++i) { + const tools::wallet2::transfer_details &td = m_wallet->get_transfer_details(i); + LOG_ERROR("COIN: " << i << ": " << td.amount() << "; "<frozen(td)); + if (td.m_spent) continue; + LOG_ERROR("is frozen"); + if (!td.m_frozen) { + LOG_ERROR("isn't:"); + LOG_ERROR("hash: " << td.m_key_image << "; " << td.amount()); + preferred_input_list.push_back(td.m_key_image); + } + } + } + for (const auto &de : preferred_input_list) { + LOG_ERROR("preferred input: " << de); } if (error) { break; -- 2.39.5 (Apple Git-154)