From 60435c0c067694632daf1ea178cac9b275ff1422 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Tue, 17 Jul 2018 22:34:27 +0800 Subject: [PATCH] Fix peer discovery for protocol >= 1.4 --- electrumx/server/peers.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/electrumx/server/peers.py b/electrumx/server/peers.py index 0d12ad1..fba92ca 100644 --- a/electrumx/server/peers.py +++ b/electrumx/server/peers.py @@ -156,12 +156,31 @@ class PeerSession(ClientSession): return # Check prior header too in case of hard fork. check_height = min(our_height, their_height) - expected_header = controller.electrum_header(check_height) - self.send_request('blockchain.block.get_header', [check_height], - partial(self.on_header, expected_header), - timeout=self.timeout) + raw_header = controller.raw_header(check_height) + if self.ptuple >= (1, 4): + self.send_request('blockchain.block.header', [check_height], + partial(self.on_header, raw_header.hex()), + timeout=self.timeout) + else: + expected_header = self.peer_mgr.env.coin.electrum_header( + raw_header, check_height) + self.send_request('blockchain.block.get_header', [check_height], + partial(self.on_legacy_header, expected_header), + timeout=self.timeout) - def on_header(self, expected_header, request): + def on_header(self, ours, request): + '''Handle the response to blockchain.block.get_header message. + Compare hashes of prior header in attempt to determine if forked.''' + if not self.is_good(request, str): + return + + theirs = request.result() + if ours == theirs: + self.maybe_close() + else: + self.bad('our header {} and theirs {} differ'.format(ours, theirs)) + + def on_legacy_header(self, expected_header, request): '''Handle the response to blockchain.block.get_header message. Compare hashes of prior header in attempt to determine if forked.''' if not self.is_good(request, dict):