tuse WalletVerifier.add() method to register transactions - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit ee4de40c375b5ec0bfa247e8dd39eea804bfdcf1
 (DIR) parent e20e40829d6795b6aa80b131b4102609b025af22
 (HTM) Author: thomasv <thomasv@gitorious>
       Date:   Fri, 26 Oct 2012 10:02:09 +0200
       
       use WalletVerifier.add() method to register transactions
       
       Diffstat:
         M electrum                            |       4 ++--
         M lib/verifier.py                     |      12 ++++++++----
         M lib/wallet.py                       |      16 +++++++++++-----
       
       3 files changed, 21 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/electrum b/electrum
       t@@ -207,8 +207,8 @@ if __name__ == '__main__':
                if not found:
                    exit(1)
        
       -        verifier = WalletVerifier(interface, config, wallet.get_tx_hashes)
       -        wallet.verifier = verifier
       +        verifier = WalletVerifier(interface, config)
       +        wallet.set_verifier(verifier)
                verifier.start()
        
                gui.main(url)
 (DIR) diff --git a/lib/verifier.py b/lib/verifier.py
       t@@ -26,12 +26,12 @@ from bitcoin import *
        
        class WalletVerifier(threading.Thread):
        
       -    def __init__(self, interface, config, get_transactions):
       +    def __init__(self, interface, config):
                threading.Thread.__init__(self)
                self.daemon = True
                self.config = config
                self.interface = interface
       -        self.get_transactions = get_transactions
       +        self.transactions    = []                                 # monitored transactions
                self.interface.register_channel('verifier')
                self.verified_tx     = config.get('verified_tx',{})
                self.merkle_roots    = config.get('merkle_roots',{})      # hashed by me
       t@@ -45,6 +45,11 @@ class WalletVerifier(threading.Thread):
            def get_confirmations(self, tx):
                return (self.local_height - self.verified_tx[tx] + 1) if tx in self.verified_tx else 0
        
       +    def add(self, tx):
       +        with self.lock:
       +            if tx not in self.transactions:
       +                self.transactions.append(tx)
       +
            def run(self):
                requested_merkle = []
                requested_chunks = []
       t@@ -75,8 +80,7 @@ class WalletVerifier(threading.Thread):
                                requested_headers.append(i)
                    
                    # request missing tx merkle
       -            txlist = self.get_transactions()
       -            for tx in txlist:
       +            for tx in self.transactions:
                        if tx not in self.verified_tx:
                            if tx not in requested_merkle:
                                requested_merkle.append(tx)
 (DIR) diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -80,6 +80,9 @@ class Wallet:
                self.was_updated = True
                self.banner = ''
        
       +        # spv
       +        self.verifier = None
       +
                # there is a difference between wallet.up_to_date and interface.is_up_to_date()
                # interface.is_up_to_date() returns true when all requests have been answered and processed
                # wallet.up_to_date is true when the wallet is synchronized (stronger requirement)
       t@@ -498,11 +501,6 @@ class Wallet:
                lines = sorted(lines, key=operator.itemgetter("timestamp"))
                return lines
        
       -    def get_tx_hashes(self):
       -        with self.lock:
       -            hashes = self.tx_history.keys()
       -        return hashes
       -
            def get_transactions_at_height(self, height):
                with self.lock:
                    values = self.tx_history.values()[:]
       t@@ -522,6 +520,7 @@ class Wallet:
                        tx_hash = tx['tx_hash']
                        line = self.tx_history.get(tx_hash)
                        if not line:
       +                    if self.verifier: self.verifier.add(tx_hash)
                            self.tx_history[tx_hash] = copy.copy(tx)
                            line = self.tx_history.get(tx_hash)
                        else:
       t@@ -816,6 +815,13 @@ class Wallet:
                    self.config.set_key(k,v)
                self.config.save()
        
       +    def set_verifier(self, verifier):
       +        self.verifier = verifier
       +        with self.lock:
       +            for tx in self.tx_history.keys():
       +                self.verifier.add(tx)
       +        
       +