aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-10-15 19:18:52 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-10-15 19:18:52 +0100
commit8231997b6674b8cd3e01ca242ac71fd829432c8e (patch)
tree66700ad86959bd7d3d46151d26e8a1e41c380027 /src
parentwallet: force 0 mixin transactions to use pre-rct txes (diff)
downloadmonero-8231997b6674b8cd3e01ca242ac71fd829432c8e.tar.xz
simplewallet: fix sweep_all misreporting sweeped amount for rct outputs
RingCT outputs will be 0 in the vin, so we need to get the actual amount from elsewhere.
Diffstat (limited to 'src')
-rw-r--r--src/simplewallet/simplewallet.cpp14
-rw-r--r--src/wallet/wallet2.cpp6
-rw-r--r--src/wallet/wallet2.h1
3 files changed, 11 insertions, 10 deletions
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index b27113473..64cf82800 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -2897,11 +2897,8 @@ bool simple_wallet::sweep_unmixable(const std::vector<std::string> &args_)
for (size_t n = 0; n < ptx_vector.size(); ++n)
{
total_fee += ptx_vector[n].fee;
- for (const auto &vin: ptx_vector[n].tx.vin)
- {
- if (vin.type() == typeid(txin_to_key))
- total_unmixable += boost::get<txin_to_key>(vin).amount;
- }
+ for (auto i: ptx_vector[n].selected_transfers)
+ total_unmixable += m_wallet->get_transfer_details(i).amount();
}
std::string prompt_str = tr("Sweeping ") + print_money(total_unmixable);
@@ -3152,11 +3149,8 @@ bool simple_wallet::sweep_all(const std::vector<std::string> &args_)
for (size_t n = 0; n < ptx_vector.size(); ++n)
{
total_fee += ptx_vector[n].fee;
- for (const auto &vin: ptx_vector[n].tx.vin)
- {
- if (vin.type() == typeid(txin_to_key))
- total_sent += boost::get<txin_to_key>(vin).amount;
- }
+ for (auto i: ptx_vector[n].selected_transfers)
+ total_sent += m_wallet->get_transfer_details(i).amount();
}
std::string prompt_str;
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 74c2f7d80..5dfb84687 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -3978,6 +3978,12 @@ uint64_t wallet2::get_num_rct_outputs()
return resp_t.result.histogram[0].instances;
}
//----------------------------------------------------------------------------------------------------
+const wallet2::transfer_details &wallet2::get_transfer_details(size_t idx) const
+{
+ THROW_WALLET_EXCEPTION_IF(idx >= m_transfers.size(), error::wallet_internal_error, "Bad transfer index");
+ return m_transfers[idx];
+}
+//----------------------------------------------------------------------------------------------------
std::vector<size_t> wallet2::select_available_unmixable_outputs(bool trusted_daemon)
{
// request all outputs with less than 3 instances
diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h
index a039c92d6..e445ebe1b 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
@@ -447,6 +447,7 @@ namespace tools
bool get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key) const;
uint64_t get_num_rct_outputs();
+ const transfer_details &get_transfer_details(size_t idx) const;
void get_hard_fork_info(uint8_t version, uint64_t &earliest_height);
bool use_fork_rules(uint8_t version, int64_t early_blocks = 0);