Skip to content

Commit

Permalink
Test that inbound-block-relay peers don't get addrs
Browse files Browse the repository at this point in the history
  • Loading branch information
sdaftuar committed Dec 19, 2020
1 parent 410877e commit 3350a39
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
3 changes: 3 additions & 0 deletions test/functional/p2p_addr_relay.py
Expand Up @@ -64,6 +64,8 @@ def run_test(self):
receivers = []
for _ in range(num_receivers):
receivers.append(self.nodes[0].add_p2p_connection(AddrReceiver()))
# add one more receiver that is a block-relay-only peer
block_relay_peer = self.nodes[0].add_p2p_connection(AddrReceiver(blockrelay=True))
msg.addrs = ADDRS
with self.nodes[0].assert_debug_log(
[
Expand All @@ -82,6 +84,7 @@ def run_test(self):
# originating node (addr_source).
ipv4_branching_factor = 2
assert_equal(total_ipv4_received, num_ipv4_addrs * ipv4_branching_factor)
assert_equal(block_relay_peer.num_ipv4_received, 0)


if __name__ == '__main__':
Expand Down
18 changes: 17 additions & 1 deletion test/functional/test_framework/messages.py
Expand Up @@ -32,7 +32,7 @@
from test_framework.util import hex_str_to_bytes, assert_equal

MIN_VERSION_SUPPORTED = 60001
MY_VERSION = 70016 # past wtxid relay
MY_VERSION = 70018 # past blockrelay
MY_SUBVERSION = b"/python-p2p-tester:0.0.3/"
MY_RELAY = 1 # from version 70001 onwards, fRelay should be appended to version messages (BIP37)

Expand Down Expand Up @@ -1239,6 +1239,22 @@ def serialize(self):
def __repr__(self):
return "msg_wtxidrelay()"

class msg_blockrelay:
__slots__ = ()
msgtype = b"blockrelay"

def __init__(self):
pass

def deserialize(self, f):
pass

def serialize(self):
return b""

def __repr__(self):
return "msg_blockrelay()"


class msg_no_witness_tx(msg_tx):
__slots__ = ()
Expand Down
12 changes: 11 additions & 1 deletion test/functional/test_framework/p2p.py
Expand Up @@ -36,6 +36,7 @@
msg_addrv2,
msg_block,
MSG_BLOCK,
msg_blockrelay,
msg_blocktxn,
msg_cfcheckpt,
msg_cfheaders,
Expand Down Expand Up @@ -79,6 +80,7 @@
b"addr": msg_addr,
b"addrv2": msg_addrv2,
b"block": msg_block,
b"blockrelay": msg_blockrelay,
b"blocktxn": msg_blocktxn,
b"cfcheckpt": msg_cfcheckpt,
b"cfheaders": msg_cfheaders,
Expand Down Expand Up @@ -289,7 +291,7 @@ class P2PInterface(P2PConnection):
Individual testcases should subclass this and override the on_* methods
if they want to alter message handling behaviour."""
def __init__(self, support_addrv2=False, wtxidrelay=True):
def __init__(self, support_addrv2=False, wtxidrelay=True, blockrelay=False):
super().__init__()

# Track number of messages of each type received.
Expand All @@ -312,6 +314,9 @@ def __init__(self, support_addrv2=False, wtxidrelay=True):
# If the peer supports wtxid-relay
self.wtxidrelay = wtxidrelay

# If the peer supports block-relay
self.blockrelay = blockrelay

def peer_connect(self, *args, services=NODE_NETWORK|NODE_WITNESS, send_version=True, **kwargs):
create_conn = super().peer_connect(*args, **kwargs)

Expand All @@ -323,6 +328,8 @@ def peer_connect(self, *args, services=NODE_NETWORK|NODE_WITNESS, send_version=T
vt.addrTo.port = self.dstport
vt.addrFrom.ip = "0.0.0.0"
vt.addrFrom.port = 0
if (self.blockrelay):
vt.nRelay = 0
self.on_connection_send_msg = vt # Will be sent soon after connection_made

return create_conn
Expand Down Expand Up @@ -356,6 +363,7 @@ def on_close(self):
def on_addr(self, message): pass
def on_addrv2(self, message): pass
def on_block(self, message): pass
def on_blockrelay(self, message): pass
def on_blocktxn(self, message): pass
def on_cfcheckpt(self, message): pass
def on_cfheaders(self, message): pass
Expand Down Expand Up @@ -401,6 +409,8 @@ def on_version(self, message):
self.send_message(msg_wtxidrelay())
if self.support_addrv2:
self.send_message(msg_sendaddrv2())
if self.blockrelay and message.nVersion >= 70018:
self.send_message(msg_blockrelay())
self.send_message(msg_verack())
self.nServices = message.nServices

Expand Down

0 comments on commit 3350a39

Please sign in to comment.