diff --git a/lib/blockchain.py b/lib/blockchain.py index 8d3fa671..a09953e9 100644 --- a/lib/blockchain.py +++ b/lib/blockchain.py @@ -286,6 +286,8 @@ class Blockchain(util.PrintError): height = header['block_height'] if self.height() != height - 1: return False + if height == 0: + return hash_header(header) == bitcoin.GENESIS previous_header = self.read_header(height -1) if not previous_header: return False diff --git a/lib/network.py b/lib/network.py index 95ff9f78..dd4a65a3 100644 --- a/lib/network.py +++ b/lib/network.py @@ -990,11 +990,19 @@ class Network(util.DaemonThread): self.notify('interfaces') self.switch_lagging_interface() return - interface.mode = 'backward' - interface.bad = height - interface.bad_header = header tip = max([x.height() for x in self.blockchains.values()]) - self.request_header(interface, tip) + if tip >=0: + interface.mode = 'backward' + interface.bad = height + interface.bad_header = header + self.request_header(interface, tip) + else: + chain = self.blockchains[0] + if chain.catch_up is None: + chain.catch_up = interface + interface.mode = 'catch_up' + interface.blockchain = chain + self.request_header(interface, 0) def blockchain(self): if self.interface and self.interface.blockchain is not None: