This was mostly written as a way to clean things up so that the NETWORK_LIMITED PR (#10387) can be simplified a ton, but its also a nice standalone cleanup that will also require a bit of review because it tweaks a lot of stuff across net. The new functions are fine in protocol.h right now since they’re straight-forward, but after NETWORK_LIMITED will really want to move elsewhere after @theuni moves the nServices-based selection to addrman from connman.
Adds HasAllRelevantServices and GetRelevantServices, which check for NETWORK|WITNESS.
This changes the following:
- Removes nRelevantServices from CConnman, disconnecting it a bit more from protocol-level logic.
- Replaces our sometimes-connect-to-!WITNESS-nodes logic with simply always requiring WITNESS|NETWORK for outbound non-feeler connections (feelers still only require NETWORK).
- This has the added benefit of removing nServicesExpected from CNode - instead letting net_processing’s VERSION message handling simply check HasAllRelevantServices.
- This implies we believe WITNESS nodes to continue to be a significant majority of nodes on the network, but also because we cannot sync properly from !WITNESS nodes, it is strange to continue using our valuable outbound slots on them.
- In order to prevent this change from preventing connection to -connect= nodes which have !WITNESS, -connect nodes are now given the “addnode” flag. This also allows outbound connections to !NODE_NETWORK nodes for -connect nodes (which was already true of addnodes).
- Has the (somewhat unintended) consequence of changing one of the eviction metrics from the same sometimes-connect-to-!WITNESS-nodes metric to requiring HasRelevantServices.
This should make NODE_NETWORK_LIMITED much simpler to implement.