From 778f545a23a57f369003f37ab4a3fc70fb9925fa Mon Sep 17 00:00:00 2001 From: ismaelsadeeq Date: Mon, 20 May 2024 10:46:50 +0100 Subject: [PATCH] [fees]: add method that linearize transaction removed from mempool Co-authored-by: willcl-ark --- src/policy/fees_util.cpp | 33 +++++++++++++++++++++++++++++++++ src/policy/fees_util.h | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/src/policy/fees_util.cpp b/src/policy/fees_util.cpp index ae5daf8d2688a..9aab82d5722cd 100644 --- a/src/policy/fees_util.cpp +++ b/src/policy/fees_util.cpp @@ -3,6 +3,8 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include +#include #include #include #include @@ -65,3 +67,34 @@ TxAncestorsAndDescendants GetTxAncestorsAndDescendants(const std::vector& txs_removed_for_block) +{ + // Cache all the transactions for efficient lookup + std::map tx_caches; + for (const auto& tx : txs_removed_for_block) { + tx_caches.emplace(tx.info.m_tx->GetHash(), TransactionInfo(tx.info.m_tx, tx.info.m_fee, tx.info.m_virtual_transaction_size, tx.info.txHeight)); + } + + const auto& txAncestorsAndDescendants = GetTxAncestorsAndDescendants(txs_removed_for_block); + std::vector transactions; + std::map> descendant_caches; + transactions.reserve(txAncestorsAndDescendants.size()); + + for (const auto& transaction : txAncestorsAndDescendants) { + const auto& txid = transaction.first; + const auto& [ancestors, descendants] = transaction.second; + int64_t vsize_ancestor = 0; + CAmount fee_with_ancestors = 0; + for (auto& ancestor_id : ancestors) { + const auto& ancestor = tx_caches.find(ancestor_id)->second; + vsize_ancestor += ancestor.m_virtual_transaction_size; + fee_with_ancestors += ancestor.m_fee; + } + + descendant_caches.emplace(txid, descendants); + auto tx_info = tx_caches.find(txid)->second; + transactions.emplace_back(tx_info.m_tx, tx_info.m_virtual_transaction_size, vsize_ancestor, tx_info.m_fee, fee_with_ancestors); + } + return node::MiniMiner(transactions, descendant_caches).Linearize(); +} diff --git a/src/policy/fees_util.h b/src/policy/fees_util.h index 46bfa05b4a633..b0bc258892215 100644 --- a/src/policy/fees_util.h +++ b/src/policy/fees_util.h @@ -6,7 +6,9 @@ #define BITCOIN_POLICY_FEES_UTIL_H #include +#include #include +#include #include #include @@ -49,4 +51,6 @@ using TxAncestorsAndDescendants = std::map, std: */ TxAncestorsAndDescendants GetTxAncestorsAndDescendants(const std::vector& transactions); +node::LinearizationResult LinearizeTransactions(const std::vector& txs_removed_for_block); + #endif // BITCOIN_POLICY_FEES_UTIL_H