tMerge pull request #1113 from romanz/transaction-fixes - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 41cf7603d87677df2c1023a691b70dcb64c66ffe DIR parent e2225ce17e8e8e66dabf24bafd49822d580325d5 HTML Author: ThomasV <electrumdev@gmail.com> Date: Mon, 30 Mar 2015 19:12:24 +0200 Merge pull request #1113 from romanz/transaction-fixes Fix a few issues with transaction serialization and deserialization Diffstat: M gui/qt/main_window.py | 6 +++--- M lib/commands.py | 10 +++++----- M lib/transaction.py | 10 +++++----- M plugins/cosigner_pool.py | 2 +- M scripts/authenticator.py | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) --- DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py t@@ -2229,7 +2229,7 @@ class ElectrumWindow(QMainWindow): if is_hex: try: - return Transaction.deserialize(txt) + return Transaction(txt) except: traceback.print_exc(file=sys.stdout) QMessageBox.critical(None, _("Unable to parse transaction"), _("Electrum was unable to parse your transaction")) t@@ -2238,7 +2238,7 @@ class ElectrumWindow(QMainWindow): try: tx_dict = json.loads(str(txt)) assert "hex" in tx_dict.keys() - tx = Transaction.deserialize(tx_dict["hex"]) + tx = Transaction(tx_dict["hex"]) #if tx_dict.has_key("input_info"): # input_info = json.loads(tx_dict['input_info']) # tx.add_input_info(input_info) t@@ -2312,7 +2312,7 @@ class ElectrumWindow(QMainWindow): if ok and txid: r = self.network.synchronous_get([ ('blockchain.transaction.get',[str(txid)]) ])[0] if r: - tx = transaction.Transaction.deserialize(r) + tx = transaction.Transaction(r) if tx: self.show_transaction(tx) else: DIR diff --git a/lib/commands.py b/lib/commands.py t@@ -176,22 +176,22 @@ class Commands: return tx def signtxwithkey(self, raw_tx, sec): - tx = Transaction.deserialize(raw_tx) + tx = Transaction(raw_tx) pubkey = bitcoin.public_key_from_private_key(sec) tx.sign({ pubkey:sec }) return tx def signtxwithwallet(self, raw_tx): - tx = Transaction.deserialize(raw_tx) + tx = Transaction(raw_tx) self.wallet.sign_transaction(tx, self.password) return tx def decoderawtransaction(self, raw): - tx = Transaction.deserialize(raw) + tx = Transaction(raw) return {'inputs':tx.inputs, 'outputs':tx.outputs} def sendrawtransaction(self, raw): - tx = Transaction.deserialize(raw) + tx = Transaction(raw) return self.network.synchronous_get([('blockchain.transaction.broadcast', [str(tx)])])[0] def createmultisig(self, num, pubkeys): t@@ -403,7 +403,7 @@ class Commands: raw = self.network.synchronous_get([ ('blockchain.transaction.get',[tx_hash]) ])[0] if raw: - return Transaction.deserialize(raw) + return Transaction(raw) else: return "unknown transaction" DIR diff --git a/lib/transaction.py b/lib/transaction.py t@@ -755,14 +755,14 @@ class Transaction: def has_address(self, addr): return (addr in self.get_output_addresses()) or (addr in (tx.get("address") for tx in self.inputs)) - def as_dict(self): + if self.raw is None: + self.raw = self.serialize() self.deserialize() - import json out = { - "hex":str(self), - "complete":self.is_complete() - } + 'hex': self.raw, + 'complete': self.is_complete() + } return out DIR diff --git a/plugins/cosigner_pool.py b/plugins/cosigner_pool.py t@@ -189,7 +189,7 @@ class Plugin(BasePlugin): return self.listener.clear() - tx = transaction.Transaction.deserialize(message) + tx = transaction.Transaction(message) d = transaction_dialog.TxDialog(tx, self.win) d.saved = False d.exec_() DIR diff --git a/scripts/authenticator.py b/scripts/authenticator.py t@@ -299,7 +299,7 @@ class Authenticator: data = r['extras']['SCAN_RESULT'] data = base_decode(data.encode('utf8'), None, base=43) data = ''.join(chr(ord(b)) for b in data).encode('hex') - tx = Transaction.deserialize(data) + tx = Transaction(data) #except: # modal_dialog('Error', 'Cannot parse transaction') # continue