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.

* processing of incoming data is done after the ProcessMessage call returns,
 * and we're no longer holding the node's locks.
 */
struct CNodeState {
    
    const CBlockIndex* pindexBestKnownBlock{nullptr};
    
    uint256 hashLastUnknownBlock{};
    
    const CBlockIndex* pindexLastCommonBlock{nullptr};
    
    const CBlockIndex* pindexBestHeaderSent{nullptr};
    
    int nUnconnectingHeaders{0};
    
    bool fSyncStarted{false};
    
    std::chrono::microseconds m_headers_sync_timeout{0us};
    
    std::chrono::microseconds m_stalling_since{0us};
    std::list<QueuedBlock> vBlocksInFlight;
    
    std::chrono::microseconds m_downloading_since{0us};
    int nBlocksInFlight{0};
    int nBlocksInFlightValidHeaders{0};
    
    bool fPreferredDownload{false};
    
    bool fPreferHeaders{false};