fix: timestamps in transactions
authorThomasV <thomasv@gitorious>
Sun, 4 Nov 2012 14:38:34 +0000 (15:38 +0100)
committerThomasV <thomasv@gitorious>
Sun, 4 Nov 2012 14:38:34 +0000 (15:38 +0100)
lib/deserialize.py
lib/gui.py
lib/gui_qt.py
lib/wallet.py

index bb4fa37..7d6c0ba 100644 (file)
@@ -215,7 +215,6 @@ def parse_Transaction(vds):
   for i in xrange(n_vout):
     d['outputs'].append(parse_TxOut(vds, i))
   d['lockTime'] = vds.read_uint32()
-  print d
   return d
 
 
index ba844e4..e6f58c4 100644 (file)
@@ -1226,12 +1226,11 @@ class ElectrumWindow:
         balance = 0 
         for tx in self.wallet.get_tx_history():
             tx_hash = tx['tx_hash']
-            if tx['height']:
-                conf = self.wallet.verifier.get_confirmations(tx_hash)
+            conf = self.wallet.verifier.get_confirmations(tx_hash)
+            if conf:
                 time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3]
                 conf_icon = gtk.STOCK_APPLY
             else:
-                conf = 0
                 time_str = 'pending'
                 conf_icon = gtk.STOCK_EXECUTE
             v = self.wallet.get_tx_value(tx_hash)
@@ -1243,7 +1242,6 @@ class ElectrumWindow:
 
             inputs = map(lambda x: x.get('address'), tx['inputs'])
             outputs = map(lambda x: x.get('address'), tx['outputs'])
-            # tx = self.wallet.tx_history.get(tx_hash)
             details = "Transaction Details:\n\n" \
                       + "Transaction ID:\n" + tx_hash + "\n\n" \
                       + "Status: %d confirmations\n\n"%conf  \
index 3fb1c7d..c4d9613 100644 (file)
@@ -332,11 +332,10 @@ class ElectrumWindow(QMainWindow):
     def tx_details(self, tx_hash):
         tx = self.wallet.transactions.get(tx_hash)
 
-        if tx['height']:
-            conf = self.wallet.verifier.get_confirmations(tx_hash)
+        conf = self.wallet.verifier.get_confirmations(tx_hash)
+        if conf:
             time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3]
         else:
-            conf = 0
             time_str = 'pending'
 
         inputs = map(lambda x: x.get('address'), tx['inputs'])
@@ -436,8 +435,8 @@ class ElectrumWindow(QMainWindow):
         balance = 0
         for tx in self.wallet.get_tx_history():
             tx_hash = tx['tx_hash']
-            if tx['height']:
-                conf = self.wallet.verifier.get_confirmations(tx_hash)
+            conf = self.wallet.verifier.get_confirmations(tx_hash)
+            if conf:
                 time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3]
                 if conf == 0:
                     icon = QIcon(":icons/unconfirmed.png")
@@ -446,7 +445,6 @@ class ElectrumWindow(QMainWindow):
                 else:
                     icon = QIcon(":icons/confirmed.png")
             else:
-                conf = 0
                 time_str = 'pending'
                 icon = QIcon(":icons/unconfirmed.png")
             v = self.wallet.get_tx_value(tx_hash)
index 4f06229..459dc66 100644 (file)
@@ -871,6 +871,16 @@ class Wallet:
             self.verifier.add(tx_hash)
 
 
+    def set_tx_timestamp(self, tx_hash, tx_height):
+        if tx_height>0:
+            header = self.verifier.read_header(tx_height)
+            timestamp = header.get('timestamp')
+        else:
+            timestamp = 1e12
+
+        with self.lock:
+            self.transactions[tx_hash]['timestamp'] = timestamp
+
 
 
 
@@ -951,22 +961,23 @@ class WalletSynchronizer(threading.Thread):
                 addr = params[0]
                 hist = []
                 # in the new protocol, we will receive a list of (tx_hash, height)
-                for tx in result: hist.append( (tx['tx_hash'], tx['height']) )
+                for item in result: hist.append( (item['tx_hash'], item['height']) )
                 # store it
                 self.wallet.receive_history_callback(addr, hist)
                 # request transactions that we don't have 
                 for tx_hash, tx_height in hist:
-                    if self.wallet.transactions.get(tx_hash) is None and tx_hash not in requested_tx:
-                        self.interface.send([ ('blockchain.transaction.get',[tx_hash, tx_height]) ], 'synchronizer')
-                        requested_tx.append(tx_hash)
+                    if self.wallet.transactions.get(tx_hash) is None:
+                        if tx_hash not in requested_tx:
+                            self.interface.send([ ('blockchain.transaction.get',[tx_hash, tx_height]) ], 'synchronizer')
+                            requested_tx.append(tx_hash)
+                    else:
+                        self.wallet.set_tx_timestamp(tx_hash, tx_height)
 
             elif method == 'blockchain.transaction.get':
                 tx_hash = params[0]
                 tx_height = params[1]
-                header = self.wallet.verifier.read_header(tx_height)
-                timestamp = header.get('timestamp')
-                tx = result
-                self.receive_tx(tx_hash, tx_height, timestamp, tx)
+                self.receive_tx(tx_hash, tx_height, result)
+                self.wallet.set_tx_timestamp(tx_hash, tx_height)
                 requested_tx.remove(tx_hash)
                 self.was_updated = True
 
@@ -987,20 +998,13 @@ class WalletSynchronizer(threading.Thread):
                 self.was_updated = False
 
 
-    def receive_tx(self, tx_hash, tx_height, timestamp, raw_tx):
+    def receive_tx(self, tx_hash, tx_height, raw_tx):
 
         assert tx_hash == hash_encode(Hash(raw_tx.decode('hex')))
-
-        import deserialize, BCDataStream
-
-        # deserialize
-        vds = BCDataStream.BCDataStream()
+        import deserialize
+        vds = deserialize.BCDataStream()
         vds.write(raw_tx.decode('hex'))
         d = deserialize.parse_Transaction(vds)
-        d['height'] = tx_height
         d['tx_hash'] = tx_hash
-        d['timestamp'] = timestamp
-        d['default_label'] = tx_hash
-        print d
         self.wallet.receive_tx_callback(tx_hash, d)