Our mempool may receive a CPFP of a transaction that is below our peer’s mempool minimum feerate. There are many possible reasons, but the most common is when our peer’s mempool has a smaller capacity and so their mempool minimum feerate is higher than ours. In the future, another likely reason is that we accept packages but they don’t (this change was originally part of package relay but seems beneficial today).
Today, we broadcast this CPFP transaction to our peers (assuming its individual feerate is above the fee filter). Assuming they’re running Bitcoin Core, this happens:
- Peer requests the child
- We send the child
- The peer sees this child as an orphan, stores it in orphanage, and requests the parent
- We send the parent
- The parent is rejected for being too low feerate
This is a waste of bandwidth and computation. It also wastes the peer’s orphanage slots - instagibbs has been monitoring orphanage usage recently and noted that this is happening pretty frequently.
When announcing a transaction, if it contains a mempool ancestor below the peer’s fee filter, drop it.