Currently, NextInvToInbounds
schedules each round of inv
at the same time for all inbound peers. It’s being done this way because with a separate timer per peer (like it’s done for outbounds), an attacker could do multiple connections to learn about the time a transaction arrived. (#13298).
However, having a single timer for inbounds of all networks is also an obvious fingerprinting vector: Connecting to a suspected pair of privacy-network and clearnet addresses and observing the inv
pattern makes it trivial to confirm or refute that they are the same node.
This PR changes it such that a separate timer is used for each network.
It uses the existing method from getaddr
caching and generalizes it to be saved in a new field m_network_key
in CNode
which will be used for both getaddr
caching and inv
scheduling, and can also be used for any future anti-fingerprinting measures.