mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-27 22:42:34 +01:00
Merge bitcoin/bitcoin#22777: net processing: don't request tx relay on feeler connections
eaf6be0114[net processing] Do not request transaction relay from feeler connections (John Newbery)0220b834b1[test] Add testing for outbound feeler connections (John Newbery) Pull request description: Feelers are short-lived connections used to test the viability of peers. The bitcoind node will periodically open feeler connections to addresses in its addrman, wait for a `version` message from the peer, and then close the connection. Currently, we set `fRelay` to `1` in the `version` message for feeler connections, indicating that we want the peer to relay transactions to us. However, we close the connection immediately on receipt of the `version` message, and so never process any incoming transaction announcements. This PR changes that behaviour to instead set `fRelay` to `0` indicating that we do not wish to receive transaction announcements from the peer. This PR also extends the `addconnection` RPC to allow creating outbound feeler connections from the node to the test framework, and a test to verify that the node sets `fRelay` to `0` in the `version` message to feeler connections. ACKs for top commit: naumenkogs: ACKeaf6be0114MarcoFalke: review ACKeaf6be0114🏃 Tree-SHA512: 1c56837dbd0a396fe404a5e39f7459864d15f666664d6b35ad109628b13158e077e417e586bf48946a23bd5cbe63716cb4bf22cdf8781b74dfce6047b87b465a
This commit is contained in:
@@ -8,6 +8,13 @@ from test_framework.p2p import P2PInterface
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import check_node_connections
|
||||
|
||||
class P2PFeelerReceiver(P2PInterface):
|
||||
def on_version(self, message):
|
||||
# The bitcoind node closes feeler connections as soon as a version
|
||||
# message is received from the test framework. Don't send any responses
|
||||
# to the node's version message since the connection will already be
|
||||
# closed.
|
||||
pass
|
||||
|
||||
class P2PAddConnections(BitcoinTestFramework):
|
||||
def set_test_params(self):
|
||||
@@ -85,6 +92,16 @@ class P2PAddConnections(BitcoinTestFramework):
|
||||
|
||||
check_node_connections(node=self.nodes[1], num_in=5, num_out=10)
|
||||
|
||||
self.log.info("Add 1 feeler connection to node 0")
|
||||
feeler_conn = self.nodes[0].add_outbound_p2p_connection(P2PFeelerReceiver(), p2p_idx=6, connection_type="feeler")
|
||||
|
||||
# Feeler connection is closed
|
||||
assert not feeler_conn.is_connected
|
||||
|
||||
# Verify version message received
|
||||
assert_equal(feeler_conn.message_count["version"], 1)
|
||||
# Feeler connections do not request tx relay
|
||||
assert_equal(feeler_conn.last_message["version"].relay, 0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
P2PAddConnections().main()
|
||||
|
||||
Reference in New Issue
Block a user