fix tx signing with watching only wallets
authorThomasV <thomasv@gitorious>
Tue, 12 Nov 2013 10:14:16 +0000 (11:14 +0100)
committerThomasV <thomasv@gitorious>
Tue, 12 Nov 2013 10:14:16 +0000 (11:14 +0100)
gui/qt/main_window.py
gui/qt/transaction_dialog.py
lib/transaction.py
lib/wallet.py

index dc83310..684100c 100644 (file)
@@ -910,14 +910,16 @@ class ElectrumWindow(QMainWindow):
             else:
                 QMessageBox.warning(self, _('Error'), msg, _('OK'))
         else:
-            filename = label + '.txn' if label else 'unsigned_%s.txn' % (time.mktime(time.gmtime()))
-            try:
-                fileName = self.getSaveFileName(_("Select a transaction filename"), filename, "*.txn")
-                with open(fileName,'w') as f:
-                    f.write(json.dumps(tx.as_dict(),indent=4) + '\n')
-                QMessageBox.information(self, _('Unsigned transaction created'), _("Unsigned transaction was saved to file:") + " " +fileName, _('OK'))
-            except Exception:
-                QMessageBox.warning(self, _('Error'), _('Could not write transaction to file'), _('OK'))
+
+            self.show_transaction(tx)
+            #filename = label + '.txn' if label else 'unsigned_%s.txn' % (time.mktime(time.gmtime()))
+            #try:
+            #    fileName = self.getSaveFileName(_("Select a transaction filename"), filename, "*.txn")
+            #    with open(fileName,'w') as f:
+            #        f.write(json.dumps(tx.as_dict(),indent=4) + '\n')
+            #    QMessageBox.information(self, _('Unsigned transaction created'), _("Unsigned transaction was saved to file:") + " " +fileName, _('OK'))
+            #except Exception:
+            #    QMessageBox.warning(self, _('Error'), _('Could not write transaction to file'), _('OK'))
 
         # add recipient to addressbook
         if to_address not in self.wallet.addressbook and not self.wallet.is_mine(to_address):
index 16ad813..58b34ab 100644 (file)
@@ -106,7 +106,8 @@ class TxDialog(QDialog):
 
 
     def save(self):
-        fileName = self.parent.getSaveFileName(_("Select where to save your signed transaction"), 'signed_%s.txn' % (self.tx.hash()[0:8]), "*.txn")
+        name = 'signed_%s.txn' % (self.tx.hash()[0:8]) if self.tx.is_complete else 'unsigned.txn'
+        fileName = self.parent.getSaveFileName(_("Select where to save your signed transaction"), name, "*.txn")
         if fileName:
             with open(fileName, "w+") as f:
                 f.write(json.dumps(self.tx.as_dict(),indent=4) + '\n')
@@ -115,13 +116,13 @@ class TxDialog(QDialog):
 
 
     def update(self):
-        tx_hash = self.tx.hash()
 
         is_relevant, is_mine, v, fee = self.wallet.get_tx_value(self.tx)
 
         if self.tx.is_complete:
             status = _("Status: Signed")
             self.sign_button.hide()
+            tx_hash = self.tx.hash()
 
             if tx_hash in self.wallet.transactions.keys():
                 conf, timestamp = self.wallet.verifier.get_confirmations(tx_hash)
@@ -138,8 +139,12 @@ class TxDialog(QDialog):
         else:
             status = _("Status: Unsigned")
             time_str = None
-            self.sign_button.show()
+            if not self.wallet.is_watching_only():
+                self.sign_button.show()
+            else:
+                self.sign_button.hide()
             self.broadcast_button.hide()
+            tx_hash = 'unknown'
 
         self.tx_hash_e.setText(tx_hash)
         self.status_label.setText(status)
index b1c4bf5..0207890 100644 (file)
@@ -677,7 +677,7 @@ class Transaction:
                 'redeemScript':i.get('redeemScript'),
                 'redeemPubkey':i.get('redeemPubkey'),
                 'pubkeys':i.get('pubkeys'),
-                'signatures':i.get('signatures'),
+                'signatures':i.get('signatures',[]),
                 }
             info.append(item)
         return info
index 46129bc..48330a9 100644 (file)
@@ -699,6 +699,9 @@ class Wallet:
         
 
     def get_private_key(self, address, password):
+        if self.is_watching_only():
+            return []
+
         # first check the provided password
         seed = self.get_seed(password)