electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 81666bf9ac8b42d0ac25415ee3815d899c8adda6
parent e971bd849868122135012b836ece86aeb591efb7
Author: SomberNight <somber.night@protonmail.com>
Date:   Mon,  5 Mar 2018 11:44:03 +0100

fix #4026

Diffstat:
Mlib/synchronizer.py | 6++++++
Mlib/verifier.py | 5++++-
Mlib/wallet.py | 3++-
3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/synchronizer.py b/lib/synchronizer.py @@ -84,6 +84,8 @@ class Synchronizer(ThreadJob): return bh2u(hashlib.sha256(status.encode('ascii')).digest()) def on_address_status(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return @@ -98,6 +100,8 @@ class Synchronizer(ThreadJob): self.requested_addrs.remove(addr) def on_address_history(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return @@ -127,6 +131,8 @@ class Synchronizer(ThreadJob): self.requested_histories.pop(addr) def tx_response(self, response): + if self.wallet.synchronizer is None: + return # we have been killed, this was just an orphan callback params, result = self.parse_response(response) if not params: return diff --git a/lib/verifier.py b/lib/verifier.py @@ -65,6 +65,8 @@ class SPV(ThreadJob): self.undo_verifications() def verify_merkle(self, r): + if self.wallet.verifier is None: + return # we have been killed, this was just an orphan callback if r.get('error'): self.print_error('received an error:', r) return @@ -95,7 +97,8 @@ class SPV(ThreadJob): self.print_error("verified %s" % tx_hash) self.wallet.add_verified_tx(tx_hash, (tx_height, header.get('timestamp'), pos)) - def hash_merkle_root(self, merkle_s, target_hash, pos): + @classmethod + def hash_merkle_root(cls, merkle_s, target_hash, pos): h = hash_decode(target_hash) for i in range(len(merkle_s)): item = merkle_s[i] diff --git a/lib/wallet.py b/lib/wallet.py @@ -912,7 +912,8 @@ class Abstract_Wallet(PrintError): # make tx local self.unverified_tx.pop(tx_hash, None) self.verified_tx.pop(tx_hash, None) - self.verifier.merkle_roots.pop(tx_hash, None) + if self.verifier: + self.verifier.merkle_roots.pop(tx_hash, None) # but remove completely if not is_mine if self.txi[tx_hash] == {}: # FIXME the test here should be for "not all is_mine"; cannot detect conflict in some cases