fix
authorthomasv <thomasv@gitorious>
Wed, 4 Sep 2013 17:37:56 +0000 (19:37 +0200)
committerthomasv <thomasv@gitorious>
Wed, 4 Sep 2013 17:37:56 +0000 (19:37 +0200)
lib/wallet.py

index 2951918..c830fe0 100644 (file)
@@ -167,14 +167,20 @@ class Wallet:
         self.transactions = {}
         tx_list = self.storage.get('transactions',{})
         for k,v in tx_list.items():
-            tx = Transaction(v)
             try:
                 tx = Transaction(v)
             except:
                 print_msg("Warning: Cannot deserialize transactions. skipping")
                 continue
 
-            self.add_transaction(tx)
+            self.add_extra_addresses(tx)
+            self.transactions[k] = tx
+
+        for h,tx in self.transactions.items():
+            if not self.check_new_tx(h, tx):
+                print_error("removing unreferenced tx", h)
+                self.transactions.pop(h)
+
 
         # not saved
         self.prevout_values = {}     # my own transaction outputs
@@ -196,7 +202,7 @@ class Wallet:
             self.update_tx_outputs(tx_hash)
 
 
-    def add_transaction(self, tx):
+    def add_extra_addresses(self, tx):
         h = tx.hash()
         # find the address corresponding to pay-to-pubkey inputs
         tx.add_extra_addresses(self.transactions)
@@ -205,12 +211,6 @@ class Wallet:
                 for tx2 in self.transactions.values():
                     tx2.add_extra_addresses({h:tx})
 
-        if self.check_new_tx(h, tx):
-            self.transactions[h] = tx
-            return True
-        else:
-            print_error("unreferenced tx", tx_hash)
-            return False
             
 
 
@@ -1021,11 +1021,12 @@ class Wallet:
     def receive_tx_callback(self, tx_hash, tx, tx_height):
 
         with self.transaction_lock:
-            if not self.add_transaction(tx):
+            self.add_extra_addresses(tx)
+            if not self.check_new_tx(tx_hash, tx):
                 # may happen due to pruning
                 print_error("received transaction that is no longer referenced in history", tx_hash)
                 return
-
+            self.transactions[tx_hash] = tx
             self.interface.pending_transactions_for_notifications.append(tx)
             self.save_transactions()
             if self.verifier and tx_height>0: 
@@ -1337,7 +1338,6 @@ class Wallet:
         # 2 check that referencing addresses are in the tx
         for addr in addresses:
             if not tx.has_address(addr):
-                print "z", addr, tx.inputs
                 return False
 
         return True