aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_core/blockchain.cpp
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-12 18:40:37 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-15 13:23:30 +0000
commit08635a08755956be12c68ba40bcc96b8828ff2a9 (patch)
tree2133b2139a27b6959de7494e7bd0c712997d2276 /src/cryptonote_core/blockchain.cpp
parentMerge pull request #6097 (diff)
downloadmonero-08635a08755956be12c68ba40bcc96b8828ff2a9.tar.xz
blockchain: speedup fetching pruned contiguous tx blobs
About twice as fast, very roughly
Diffstat (limited to 'src/cryptonote_core/blockchain.cpp')
-rw-r--r--src/cryptonote_core/blockchain.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index d22158dfc..a943a7093 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -2498,10 +2498,17 @@ bool Blockchain::find_blockchain_supplement(const uint64_t req_start_block, cons
block b;
CHECK_AND_ASSERT_MES(parse_and_validate_block_from_blob(blocks.back().first.first, b), false, "internal error, invalid block");
blocks.back().first.second = get_miner_tx_hash ? cryptonote::get_transaction_hash(b.miner_tx) : crypto::null_hash;
- std::vector<crypto::hash> mis;
std::vector<cryptonote::blobdata> txs;
- get_transactions_blobs(b.tx_hashes, txs, mis, pruned);
- CHECK_AND_ASSERT_MES(!mis.size(), false, "internal error, transaction from block not found");
+ if (pruned)
+ {
+ CHECK_AND_ASSERT_MES(m_db->get_pruned_tx_blobs_from(b.tx_hashes.front(), b.tx_hashes.size(), txs), false, "Failed to retrieve all transactions needed");
+ }
+ else
+ {
+ std::vector<crypto::hash> mis;
+ get_transactions_blobs(b.tx_hashes, txs, mis, pruned);
+ CHECK_AND_ASSERT_MES(!mis.size(), false, "internal error, transaction from block not found");
+ }
size += blocks.back().first.first.size();
for (const auto &t: txs)
size += t.size();