Skip to content

Commit b9ef21d

Browse files
committed
mempool: Add explicit max_descendants
TransactionWithinChainLimits would take a 'limit' and check it against ascendants and descendants. This is changed to take an explicit max ancestors and max descendants value, and to test the corresponding value against its corresponding max.
1 parent 56f6936 commit b9ef21d

File tree

4 files changed

+8
-6
lines changed

4 files changed

+8
-6
lines changed

src/txmempool.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,11 +1055,11 @@ void CTxMemPool::TrimToSize(size_t sizelimit, std::vector<COutPoint>* pvNoSpends
10551055
}
10561056
}
10571057

1058-
bool CTxMemPool::TransactionWithinChainLimit(const uint256& txid, size_t chainLimit) const {
1058+
bool CTxMemPool::TransactionWithinChainLimit(const uint256& txid, size_t ancestor_limit, size_t descendant_limit) const {
10591059
LOCK(cs);
10601060
auto it = mapTx.find(txid);
1061-
return it == mapTx.end() || (it->GetCountWithAncestors() < chainLimit &&
1062-
it->GetCountWithDescendants() < chainLimit);
1061+
return it == mapTx.end() || (it->GetCountWithAncestors() < ancestor_limit &&
1062+
it->GetCountWithDescendants() < descendant_limit);
10631063
}
10641064

10651065
SaltedTxidHasher::SaltedTxidHasher() : k0(GetRand(std::numeric_limits<uint64_t>::max())), k1(GetRand(std::numeric_limits<uint64_t>::max())) {}

src/txmempool.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ class CTxMemPool
620620
int Expire(int64_t time);
621621

622622
/** Returns false if the transaction is in the mempool and not within the chain limit specified. */
623-
bool TransactionWithinChainLimit(const uint256& txid, size_t chainLimit) const;
623+
bool TransactionWithinChainLimit(const uint256& txid, size_t ancestor_limit, size_t descendant_limit) const;
624624

625625
unsigned long size()
626626
{

src/wallet/wallet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2469,7 +2469,7 @@ bool CWallet::OutputEligibleForSpending(const COutput& output, const CoinEligibi
24692469
if (output.nDepth < (output.tx->IsFromMe(ISMINE_ALL) ? eligibility_filter.conf_mine : eligibility_filter.conf_theirs))
24702470
return false;
24712471

2472-
if (!mempool.TransactionWithinChainLimit(output.tx->GetHash(), eligibility_filter.max_ancestors))
2472+
if (!mempool.TransactionWithinChainLimit(output.tx->GetHash(), eligibility_filter.max_ancestors, eligibility_filter.max_descendants))
24732473
return false;
24742474

24752475
return true;

src/wallet/wallet.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,10 @@ struct CoinEligibilityFilter
662662
const int conf_mine;
663663
const int conf_theirs;
664664
const uint64_t max_ancestors;
665+
const uint64_t max_descendants;
665666

666-
CoinEligibilityFilter(int conf_mine, int conf_theirs, uint64_t max_ancestors) : conf_mine(conf_mine), conf_theirs(conf_theirs), max_ancestors(max_ancestors) {}
667+
CoinEligibilityFilter(int conf_mine, int conf_theirs, uint64_t max_ancestors) : conf_mine(conf_mine), conf_theirs(conf_theirs), max_ancestors(max_ancestors), max_descendants(max_ancestors) {}
668+
CoinEligibilityFilter(int conf_mine, int conf_theirs, uint64_t max_ancestors, uint64_t max_descendants) : conf_mine(conf_mine), conf_theirs(conf_theirs), max_ancestors(max_ancestors), max_descendants(max_descendants) {}
667669
};
668670

669671
class WalletRescanReserver; //forward declarations for ScanForWalletTransactions/RescanFromTime

0 commit comments

Comments
 (0)