Currently the exact reason a transaction is removed from the mempool isn't
logged. It is sometimes detectable from context, but adding the reason to
the validation interface logs (where it is already passed) seems like an easy
way to disambiguate.
For example, in the case of mempool expiry, the logs look like this:
[validationinterface.cpp:220] [TransactionRemovedFromMempool] [validation] Enqueuing TransactionRemovedFromMempool: txid=<txid> [txmempool.cpp:1050] [RemoveUnbroadcastTx] [mempool] Removed <txid> from set of unbroadcast txns before confirmation that txn was sent out [validationinterface.cpp:220] [operator()] [validation] TransactionRemovedFromMempool: txid=<txid> [validation.cpp:267] [LimitSize] [mempool] Expired 1 transactions from the memory pool
There is no context-free way to know $txid was evicted on the basis of expiry.
This change will make that case (and probably others) clear.
This is a backport of core#26419
Depends on D16084