diff options
author | Luke Dashjr <luke-jr+git@utopios.org> | 2019-10-18 04:02:50 +0000 |
---|---|---|
committer | Luke Dashjr <luke-jr+git@utopios.org> | 2021-08-01 23:38:47 +0000 |
commit | 3f77dfdaf0f0bfe0c4662a616d6943f31bdd5bf4 (patch) | |
tree | a2e4fab1809e89366d2355404229a384514c2303 | |
parent | 42af9596ce85a541988abee54eed8a9b271a46a1 (diff) | |
download | bitcoin-3f77dfdaf0f0bfe0c4662a616d6943f31bdd5bf4.tar.xz |
Expose ancestorsize and ancestorfees via getTransactionAncestry
-rw-r--r-- | src/interfaces/chain.h | 2 | ||||
-rw-r--r-- | src/node/interfaces.cpp | 4 | ||||
-rw-r--r-- | src/txmempool.cpp | 4 | ||||
-rw-r--r-- | src/txmempool.h | 4 |
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; |