Since 2015, Bitcoin Core has included a -limitdescendantcount configuration parameter (added in this commit) that forbids a transaction in a node’s mempool from having greater than x descendants accepted into that mempool (default x is 25). I feel this addresses two issues:

  • Extreme bundle comparisons: for ancestor feerate mining, a node builds a number of totally different digital packages containing associated transactions and derives their bundle feerate. If the bundle feerate is increased than the feerate of the person transactions contained inside it, the node will want to maintain and mine that bundle over the person transactions. The extra associated transactions there are in a mempool, the larger the variety of packages that should be in contrast; given the selection of 25 as the worth right here, I am guessing the variety of comparisons that must be made is not combinatorial however will be exponential within the worst case.

  • Wasted bandwidth and censorship: if a node accepts one guardian with as many descendents as is feasible to slot in its mempool, then a miner producing a block with a transaction that conflicts with the guardian can invalidate the complete mempool. This could waste an enormous quantity of relay node bandwidth (~150 MB each 10 minutes occasions ~50,000 nodes is 540 TB per day, not together with inv overhead). It could additionally be capable of use this mechanism to forestall different individuals’s unrelated transactions from confirming at low value to the denial of service attacker.

Which of these issues is the one that almost all motivates holding this restrict at 25? I notice the reply there may be opinionated (and so a poor selection for this web site), however think about that we needed to disentangle the issues and have two totally different limits: one for stopping extreme comparisons and one for decreasing the liklihood of wasted bandwidth. In that case, what limitdescendantcount values would we use for every of these totally different instances?