tlnchannelverifier: some clean-up - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit 200b012e575954331e9f0280cd9c63715817ca73
 (DIR) parent c91fe27e7da79eccaad4db7638ec1e987def3428
 (HTM) Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon, 24 Sep 2018 17:55:58 +0200
       
       lnchannelverifier: some clean-up
       
       Diffstat:
         M electrum/lnchannelverifier.py       |      31 ++++++++++++++++---------------
       
       1 file changed, 16 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/electrum/lnchannelverifier.py b/electrum/lnchannelverifier.py
       t@@ -25,11 +25,13 @@
        
        import asyncio
        import threading
       +
        from aiorpcx import TaskGroup
        
        from . import lnbase
        from . import bitcoin
        from . import ecc
       +from . import constants
        from .util import ThreadJob, bh2u, bfh
        from .lnutil import invert_short_channel_id, funding_output_script_from_keys
        from .verifier import verify_tx_is_in_block, MerkleVerificationFailure
       t@@ -50,6 +52,7 @@ class LNChannelVerifier(ThreadJob):
        
                self.unverified_channel_info = {}  # short_channel_id -> channel_info
        
       +    # TODO make async; and rm self.lock completely
            def add_new_channel_info(self, channel_info):
                short_channel_id = channel_info.channel_id
                if short_channel_id in self.unverified_channel_info:
       t@@ -64,18 +67,13 @@ class LNChannelVerifier(ThreadJob):
        
            async def main(self):
                while True:
       -            async with TaskGroup() as tg:
       -                await self.iteration(tg)
       +            async with TaskGroup() as group:
       +                await self.iteration(group)
                    await asyncio.sleep(0.1)
        
       -    async def iteration(self, tg):
       -        interface = self.network.interface
       -        if not interface:
       -            return
       -
       -        blockchain = interface.blockchain
       -        if not blockchain:
       -            return
       +    async def iteration(self, group: TaskGroup):
       +        blockchain = self.network.blockchain()
       +        local_height = blockchain.height()
        
                with self.lock:
                    unverified_channel_info = list(self.unverified_channel_info)
       t@@ -85,13 +83,14 @@ class LNChannelVerifier(ThreadJob):
                        continue
                    block_height, tx_pos, output_idx = invert_short_channel_id(short_channel_id)
                    # only resolve short_channel_id if headers are available.
       +            if block_height <= 0 or block_height > local_height:
       +                continue
                    header = blockchain.read_header(block_height)
                    if header is None:
       -                index = block_height // 2016
       -                if index < len(blockchain.checkpoints):
       -                    await tg.spawn(self.network.request_chunk(block_height, None, can_return_early=True))
       +                if block_height < constants.net.max_checkpoint():
       +                    await group.spawn(self.network.request_chunk(block_height, None, can_return_early=True))
                        continue
       -            await tg.spawn(self.verify_channel(block_height, tx_pos, short_channel_id))
       +            await group.spawn(self.verify_channel(block_height, tx_pos, short_channel_id))
                    #self.print_error('requested short_channel_id', bh2u(short_channel_id))
        
            async def verify_channel(self, block_height, tx_pos, short_channel_id):
       t@@ -100,7 +99,9 @@ class LNChannelVerifier(ThreadJob):
                result = await self.network.get_txid_from_txpos(block_height, tx_pos, True)
                tx_hash = result['tx_hash']
                merkle_branch = result['merkle']
       -        header = self.network.blockchain().read_header(block_height)
       +        # we need to wait if header sync/reorg is still ongoing, hence lock:
       +        async with self.network.bhi_lock:
       +            header = self.network.blockchain().read_header(block_height)
                try:
                    verify_tx_is_in_block(tx_hash, merkle_branch, tx_pos, header, block_height)
                except MerkleVerificationFailure as e: