diff options
author | Riccardo Spagni <ric@spagni.net> | 2016-10-22 22:15:16 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2016-10-22 22:15:16 +0200 |
commit | 7c5431624ea676197be26f83280cc17d41f9ded9 (patch) | |
tree | bcfb84bec52f2b5595d3828c2ff19c36df716ff8 /src/wallet/wallet2.cpp | |
parent | Merge pull request #1222 (diff) | |
parent | wallet: speed up output selection, and fix bug with relatedness calculation (diff) | |
download | monero-7c5431624ea676197be26f83280cc17d41f9ded9.tar.xz |
Merge pull request #1223
0950be9 wallet: speed up output selection, and fix bug with relatedness calculation (moneromooo-monero)
0eba133 wallet: fix mixup between mixin 2 and 4 before/after v5 (moneromooo-monero)
Diffstat (limited to 'src/wallet/wallet2.cpp')
-rw-r--r-- | src/wallet/wallet2.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 4d863d34d..211e93026 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2287,9 +2287,9 @@ size_t wallet2::pop_best_value_from(const transfer_container &transfers, std::ve { const transfer_details &candidate = transfers[unused_indices[n]]; float relatedness = 0.0f; - for (size_t i = 0; i < selected_transfers.size(); ++i) + for (std::list<size_t>::const_iterator i = selected_transfers.begin(); i != selected_transfers.end(); ++i) { - float r = get_output_relatedness(candidate, transfers[i]); + float r = get_output_relatedness(candidate, transfers[*i]); if (r > relatedness) { relatedness = r; @@ -2873,8 +2873,10 @@ void wallet2::get_outs(std::vector<std::vector<entry>> &outs, const std::list<si COMMAND_RPC_GET_OUTPUTS::request req = AUTO_VAL_INIT(req); COMMAND_RPC_GET_OUTPUTS::response daemon_resp = AUTO_VAL_INIT(daemon_resp); + size_t num_selected_transfers = 0; for(size_t idx: selected_transfers) { + ++num_selected_transfers; const transfer_details &td = m_transfers[idx]; const uint64_t amount = td.is_rct() ? 0 : td.amount(); std::unordered_set<uint64_t> seen_indices; @@ -2991,7 +2993,7 @@ void wallet2::get_outs(std::vector<std::vector<entry>> &outs, const std::list<si std::unordered_map<uint64_t, uint64_t> scanty_outs; size_t base = 0; - outs.reserve(selected_transfers.size()); + outs.reserve(num_selected_transfers); for(size_t idx: selected_transfers) { const transfer_details &td = m_transfers[idx]; @@ -4019,14 +4021,14 @@ uint64_t wallet2::get_num_rct_outputs() std::vector<size_t> wallet2::select_available_unmixable_outputs(bool trusted_daemon) { // request all outputs with less than 3 instances - const size_t min_mixin = use_fork_rules(5, 10) ? 2 : 4; // v5 increases min mixin from 2 to 4 + const size_t min_mixin = use_fork_rules(5, 10) ? 4 : 2; // v5 increases min mixin from 2 to 4 return select_available_outputs_from_histogram(min_mixin + 1, false, true, trusted_daemon); } //---------------------------------------------------------------------------------------------------- std::vector<size_t> wallet2::select_available_mixable_outputs(bool trusted_daemon) { // request all outputs with at least 3 instances, so we can use mixin 2 with - const size_t min_mixin = use_fork_rules(5, 10) ? 2 : 4; // v5 increases min mixin from 2 to 4 + const size_t min_mixin = use_fork_rules(5, 10) ? 4 : 2; // v5 increases min mixin from 2 to 4 return select_available_outputs_from_histogram(min_mixin + 1, true, true, trusted_daemon); } //---------------------------------------------------------------------------------------------------- |