15
15
from test_framework .messages import (
16
16
msg_getaddr ,
17
17
msg_ping ,
18
- msg_verack ,
19
18
msg_version ,
20
19
)
21
20
from test_framework .mininode import mininode_lock , P2PInterface
@@ -42,6 +41,7 @@ def bad_message(self, message):
42
41
def on_open (self ):
43
42
self .ever_connected = True
44
43
44
+ # Does not respond to "version" with "verack"
45
45
def on_version (self , message ): self .bad_message (message )
46
46
def on_verack (self , message ): self .bad_message (message )
47
47
def on_inv (self , message ): self .bad_message (message )
@@ -64,12 +64,6 @@ def on_getblocktxn(self, message): self.bad_message(message)
64
64
def on_blocktxn (self , message ): self .bad_message (message )
65
65
66
66
67
- # Node that never sends a version. We'll use this to send a bunch of messages
68
- # anyway, and eventually get disconnected.
69
- class CNodeNoVersionMisbehavior (CLazyNode ):
70
- pass
71
-
72
-
73
67
# Node that never sends a version. This one just sits idle and hopes to receive
74
68
# any message (it shouldn't!)
75
69
class CNodeNoVersionIdle (CLazyNode ):
@@ -97,6 +91,7 @@ class P2PVersionStore(P2PInterface):
97
91
version_received = None
98
92
99
93
def on_version (self , msg ):
94
+ # Responds with an appropriate verack
100
95
super ().on_version (msg )
101
96
self .version_received = msg
102
97
@@ -106,15 +101,17 @@ def set_test_params(self):
106
101
self .num_nodes = 1
107
102
108
103
def run_test (self ):
104
+ # Peer that never sends a version. We will send a bunch of messages
105
+ # from this node anyway and verify eventual disconnection.
109
106
no_version_disconnect_node = self .nodes [0 ].add_p2p_connection (
110
- CNodeNoVersionMisbehavior (), send_version = False , wait_for_verack = False )
107
+ CLazyNode (), send_version = False , wait_for_verack = False )
111
108
no_version_idlenode = self .nodes [0 ].add_p2p_connection (CNodeNoVersionIdle (), send_version = False , wait_for_verack = False )
112
109
no_verack_idlenode = self .nodes [0 ].add_p2p_connection (CNodeNoVerackIdle (), wait_for_verack = False )
113
110
114
- # Send enough veracks without a message to reach the peer discouragement
115
- # threshold. This should get us disconnected.
111
+ # Send enough ping messages (any non-version message will do) prior to sending
112
+ # version to reach the peer discouragement threshold. This should get us disconnected.
116
113
for _ in range (DISCOURAGEMENT_THRESHOLD ):
117
- no_version_disconnect_node .send_message (msg_verack ())
114
+ no_version_disconnect_node .send_message (msg_ping ())
118
115
119
116
# Wait until we got the verack in response to the version. Though, don't wait for the other node to receive the
120
117
# verack, since we never sent one
@@ -125,7 +122,7 @@ def run_test(self):
125
122
wait_until (lambda : no_verack_idlenode .version_received , timeout = 10 , lock = mininode_lock )
126
123
127
124
# Mine a block and make sure that it's not sent to the connected nodes
128
- self .nodes [0 ].generatetoaddress ( 1 , self . nodes [ 0 ]. get_deterministic_priv_key (). address )
125
+ self .nodes [0 ].generate ( nblocks = 1 )
129
126
130
127
#Give the node enough time to possibly leak out a message
131
128
time .sleep (5 )
0 commit comments