diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2020-03-31 13:32:55 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2020-03-31 13:32:55 -0500 |
| commit | 096e2135ddebbcbaaa2d8b2362849da678d9a28c (patch) | |
| tree | 302adcbd0460ffc68d560822899273133bc8342f /src/cryptonote_core/tx_pool.cpp | |
| parent | 1df79ae3aae0180d09f4bb9fa19d61a38ac28278 (diff) | |
| parent | 054b4c7f412013e33c80efa8e0f0f33944572a11 (diff) | |
| download | monzero-core-096e2135ddebbcbaaa2d8b2362849da678d9a28c.tar.gz monzero-core-096e2135ddebbcbaaa2d8b2362849da678d9a28c.tar.xz monzero-core-096e2135ddebbcbaaa2d8b2362849da678d9a28c.zip | |
Merge pull request #6214
054b4c7 protocol: request txpool contents when synced (moneromooo-monero)
Diffstat (limited to 'src/cryptonote_core/tx_pool.cpp')
| -rw-r--r-- | src/cryptonote_core/tx_pool.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 41d6c9222..05cbf14a8 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -576,6 +576,39 @@ namespace cryptonote return true; } //--------------------------------------------------------------------------------- + bool tx_memory_pool::get_complement(const std::vector<crypto::hash> &hashes, std::vector<cryptonote::blobdata> &txes) const + { + CRITICAL_REGION_LOCAL(m_transactions_lock); + CRITICAL_REGION_LOCAL1(m_blockchain); + + m_blockchain.for_all_txpool_txes([this, &hashes, &txes](const crypto::hash &txid, const txpool_tx_meta_t &meta, const cryptonote::blobdata*) { + const auto relay_method = meta.get_relay_method(); + if (relay_method != relay_method::block && relay_method != relay_method::fluff) + return true; + const auto i = std::find(hashes.begin(), hashes.end(), txid); + if (i == hashes.end()) + { + cryptonote::blobdata bd; + try + { + if (!m_blockchain.get_txpool_tx_blob(txid, bd, cryptonote::relay_category::broadcasted)) + { + MERROR("Failed to get blob for txpool transaction " << txid); + return true; + } + txes.emplace_back(std::move(bd)); + } + catch (const std::exception &e) + { + MERROR("Failed to get blob for txpool transaction " << txid << ": " << e.what()); + return true; + } + } + return true; + }, false); + return true; + } + //--------------------------------------------------------------------------------- void tx_memory_pool::on_idle() { m_remove_stuck_tx_interval.do_call([this](){return remove_stuck_transactions();}); |
