URI: 
       tverifier: perf optimisations - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 1b95cced5d9251919b98f2a116bc79caaaf9f8bc
   DIR parent e5e3ac0364a9eefcef8ad6c6cfe4a14e2e6a9b6b
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon, 17 Sep 2018 18:31:25 +0200
       
       verifier: perf optimisations
       
       blockchain.read_header is expensive. do cheap tests first
       on a wallet with 11k txns, that is synced except for spv proofs,
       finishing sync now takes 80 sec instead of 180 sec
       
       Diffstat:
         M electrum/verifier.py                |      17 ++++++++++-------
       
       1 file changed, 10 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/electrum/verifier.py b/electrum/verifier.py
       t@@ -70,19 +70,22 @@ class SPV(PrintError):
                unverified = self.wallet.get_unverified_txs()
        
                for tx_hash, tx_height in unverified.items():
       -            # do not request merkle branch before headers are available
       +            # do not request merkle branch if we already requested it
       +            if tx_hash in self.requested_merkle or tx_hash in self.merkle_roots:
       +                continue
       +            # or before headers are available
                    if tx_height <= 0 or tx_height > local_height:
                        continue
       -
       +            # if it's in the checkpoint region, we still might not have the header
                    header = blockchain.read_header(tx_height)
                    if header is None:
                        if tx_height < constants.net.max_checkpoint():
                            await group.spawn(self.network.request_chunk(tx_height, None, can_return_early=True))
       -            elif (tx_hash not in self.requested_merkle
       -                    and tx_hash not in self.merkle_roots):
       -                self.print_error('requested merkle', tx_hash)
       -                self.requested_merkle.add(tx_hash)
       -                await group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height)
       +                continue
       +            # request now
       +            self.print_error('requested merkle', tx_hash)
       +            self.requested_merkle.add(tx_hash)
       +            await group.spawn(self._request_and_verify_single_proof, tx_hash, tx_height)
        
            async def _request_and_verify_single_proof(self, tx_hash, tx_height):
                try: