aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuke Dashjr <luke-jr+git@utopios.org>2019-10-18 04:02:50 +0000
committerLuke Dashjr <luke-jr+git@utopios.org>2021-08-01 23:38:47 +0000
commit3f77dfdaf0f0bfe0c4662a616d6943f31bdd5bf4 (patch)
treea2e4fab1809e89366d2355404229a384514c2303 /src
parent42af9596ce85a541988abee54eed8a9b271a46a1 (diff)
downloadbitcoin-3f77dfdaf0f0bfe0c4662a616d6943f31bdd5bf4.tar.xz
Expose ancestorsize and ancestorfees via getTransactionAncestry
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/chain.h2
-rw-r--r--src/node/interfaces.cpp4
-rw-r--r--src/txmempool.cpp4
-rw-r--r--src/txmempool.h4
4 files changed, 9 insertions, 5 deletions
diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h
index 7cac435e96..bb218cf12d 100644
--- a/src/interfaces/chain.h
+++ b/src/interfaces/chain.h
@@ -174,7 +174,7 @@ public:
std::string& err_string) = 0;
//! Calculate mempool ancestor and descendant counts for the given transaction.
- virtual void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants) = 0;
+ virtual void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) = 0;
//! Get the node's package limits.
//! Currently only returns the ancestor and descendant count limits, but could be enhanced to
diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp
index 183b5a5d91..e4c0dc9491 100644
--- a/src/node/interfaces.cpp
+++ b/src/node/interfaces.cpp
@@ -574,11 +574,11 @@ public:
// that Chain clients do not need to know about.
return TransactionError::OK == err;
}
- void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants) override
+ void getTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize, CAmount* ancestorfees) override
{
ancestors = descendants = 0;
if (!m_node.mempool) return;
- m_node.mempool->GetTransactionAncestry(txid, ancestors, descendants);
+ m_node.mempool->GetTransactionAncestry(txid, ancestors, descendants, ancestorsize, ancestorfees);
}
void getPackageLimits(unsigned int& limit_ancestor_count, unsigned int& limit_descendant_count) override
{
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index c5a4bbf1b0..93ad353127 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -1116,12 +1116,14 @@ uint64_t CTxMemPool::CalculateDescendantMaximum(txiter entry) const {
return maximum;
}
-void CTxMemPool::GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants) const {
+void CTxMemPool::GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* const ancestorsize, CAmount* const ancestorfees) const {
LOCK(cs);
auto it = mapTx.find(txid);
ancestors = descendants = 0;
if (it != mapTx.end()) {
ancestors = it->GetCountWithAncestors();
+ if (ancestorsize) *ancestorsize = it->GetSizeWithAncestors();
+ if (ancestorfees) *ancestorfees = it->GetModFeesWithAncestors();
descendants = CalculateDescendantMaximum(it);
}
}
diff --git a/src/txmempool.h b/src/txmempool.h
index ae4b16d377..ea1d62d32d 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -706,8 +706,10 @@ public:
/**
* Calculate the ancestor and descendant count for the given transaction.
* The counts include the transaction itself.
+ * When ancestors is non-zero (ie, the transaction itself is in the mempool),
+ * ancestorsize and ancestorfees will also be set to the appropriate values.
*/
- void GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants) const;
+ void GetTransactionAncestry(const uint256& txid, size_t& ancestors, size_t& descendants, size_t* ancestorsize = nullptr, CAmount* ancestorfees = nullptr) const;
/** @returns true if the mempool is fully loaded */
bool IsLoaded() const;