diff --git a/RELEASE-NOTES b/RELEASE-NOTES index eba9cdf..f4af83c 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1,3 +1,8 @@ +Version 0.07 +------------ + +- fixed a bug introduced in 0.06 at the last minute + Version 0.06 ------------ diff --git a/server/block_processor.py b/server/block_processor.py index 34c9bce..6a64d15 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -138,8 +138,14 @@ class Prefetcher(LoggedClass): return blocks, size + class MissingUTXOError(Exception): - pass + '''Raised if a mempool tx input UTXO couldn't be found.''' + + +class ChainReorg(Exception): + '''Raised on a blockchain reorganisation.''' + class MemPool(LoggedClass): '''Representation of the daemon's mempool. @@ -374,14 +380,14 @@ class BlockProcessor(LoggedClass): ''' blocks, mempool_hashes = await self.prefetcher.get_blocks() caught_up = mempool_hashes is not None - for block in blocks: - if self.advance_block(block, caught_up): - await self.handle_chain_reorg() - return - await asyncio.sleep(0) # Yield - - if caught_up: - await self.caught_up(mempool_hashes) + try: + for block in blocks: + self.advance_block(block, caught_up) + await asyncio.sleep(0) # Yield + if caught_up: + await self.caught_up(mempool_hashes) + except ChainReorg: + await self.handle_chain_reorg() async def caught_up(self, mempool_hashes): '''Called after each deamon poll if caught up.''' @@ -711,7 +717,7 @@ class BlockProcessor(LoggedClass): header, tx_hashes, txs = self.coin.read_block(block) prev_hash, header_hash = self.coin.header_hashes(header) if prev_hash != self.tip: - return None + raise ChainReorg touched = set() self.fs_cache.advance_block(header, tx_hashes, txs) diff --git a/server/version.py b/server/version.py index 8acc7f9..74c926d 100644 --- a/server/version.py +++ b/server/version.py @@ -1 +1 @@ -VERSION = "ElectrumX 0.06" +VERSION = "ElectrumX 0.07"