aboutsummaryrefslogtreecommitdiff
path: root/src/wallet
diff options
context:
space:
mode:
authorJaquee <jaquee.monero@gmail.com>2017-08-04 22:38:37 +0200
committerJaquee <jaquee.monero@gmail.com>2017-10-15 17:39:54 +0200
commit288d3c75c31887fe0651c3eae36e663813bba1e3 (patch)
treed2a165fbec4d48d986f0852f6294525858eda155 /src/wallet
parentwallet2: add on_pool_tx_removed callback (diff)
downloadmonero-288d3c75c31887fe0651c3eae36e663813bba1e3.tar.xz
wallet2: add remove_obsolete_pool_txs()
Diffstat (limited to 'src/wallet')
-rw-r--r--src/wallet/wallet2.cpp52
-rw-r--r--src/wallet/wallet2.h1
2 files changed, 31 insertions, 22 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 689694305..bd074e962 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -1516,6 +1516,34 @@ void wallet2::pull_next_blocks(uint64_t start_height, uint64_t &blocks_start_hei
error = true;
}
}
+
+void wallet2::remove_obsolete_pool_txs(const std::vector<crypto::hash> &tx_hashes)
+{
+ // remove pool txes to us that aren't in the pool anymore
+ std::unordered_map<crypto::hash, wallet2::payment_details>::iterator uit = m_unconfirmed_payments.begin();
+ while (uit != m_unconfirmed_payments.end())
+ {
+ const crypto::hash &txid = uit->second.m_tx_hash;
+ bool found = false;
+ for (const auto &it2: tx_hashes)
+ {
+ if (it2 == txid)
+ {
+ found = true;
+ break;
+ }
+ }
+ auto pit = uit++;
+ if (!found)
+ {
+ MDEBUG("Removing " << txid << " from unconfirmed payments, not found in pool");
+ m_unconfirmed_payments.erase(pit);
+ if (0 != m_callback)
+ m_callback->on_pool_tx_removed(txid);
+ }
+ }
+}
+
//----------------------------------------------------------------------------------------------------
void wallet2::update_pool_state(bool refreshed)
{
@@ -1593,28 +1621,8 @@ void wallet2::update_pool_state(bool refreshed)
// the in transfers list instead (or nowhere if it just
// disappeared without being mined)
if (refreshed)
- {
- std::unordered_map<crypto::hash, wallet2::payment_details>::iterator uit = m_unconfirmed_payments.begin();
- while (uit != m_unconfirmed_payments.end())
- {
- const crypto::hash &txid = uit->second.m_tx_hash;
- bool found = false;
- for (const auto &it2: res.tx_hashes)
- {
- if (it2 == txid)
- {
- found = true;
- break;
- }
- }
- auto pit = uit++;
- if (!found)
- {
- MDEBUG("Removing " << txid << " from unconfirmed payments, not found in pool");
- m_unconfirmed_payments.erase(pit);
- }
- }
- }
+ remove_obsolete_pool_txs(res.tx_hashes);
+
MDEBUG("update_pool_state done second loop");
// gather txids of new pool txes to us
diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h
index 37f59f831..034dd693b 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
@@ -696,6 +696,7 @@ namespace tools
uint64_t import_key_images(const std::string &filename, uint64_t &spent, uint64_t &unspent);
void update_pool_state(bool refreshed = false);
+ void remove_obsolete_pool_txs(const std::vector<crypto::hash> &tx_hashes);
std::string encrypt(const std::string &plaintext, const crypto::secret_key &skey, bool authenticated = true) const;
std::string encrypt_with_view_secret_key(const std::string &plaintext, bool authenticated = true) const;