There are some potential feefilter cleanups mentioned and motivated in comment https://github.com/bitcoin/bitcoin/pull/21509#issuecomment-805808485 . If you address the locking one, please be careful and make sure that `round()` is only called under a lock. See https://github.com/bitcoin/bitcoin/pull/21509#issuecomment-807992199

#### Useful skills:

* Bitcoin protocol messages
* Bitcoin Core P2P design
* Running our unit and functional tests

#### Want to work on this issue?

For guidance on contributing, please read [CONTRIBUTING.md](https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md) before opening your pull request.

: m_result_type(ResultType::INVALID), m_state(state) {
            Assume(!state.IsValid()); 
        }
    
    explicit MempoolAcceptResult(std::list<CTransactionRef>&& replaced_txns, CAmount fees)
        : m_result_type(ResultType::VALID),
        m_replaced_transactions(std::move(replaced_txns)), m_base_fees(fees) {}
};
/**
 * (Try to) add a transaction to the memory pool.
 * @param[in]  bypass_limits   When true, don't enforce mempool fee limits.
 * @param[in]  test_accept     When true, run validation checks but don't submit to mempool.
 */
MempoolAcceptResult AcceptToMemoryPool(CChainState& active_chainstate, CTxMemPool& pool, const CTransactionRef& tx,
                                       bool bypass_limits, bool test_accept=false) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
void UpdateCoins(const CTransaction& tx, CCoinsViewCache& inputs, int nHeight);
/**
 * Check if transaction will be final in the next block to be created.
 *
 * Calls IsFinalTx() with current block height and appropriate block time.