diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 92565fcce..ae08194de 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -397,12 +397,9 @@ class ElectrumWindow(App): self.set_ln_invoice(data) return # try to decode transaction - from electrum.transaction import Transaction - from electrum.util import bh2u + from electrum.transaction import tx_from_any try: - text = bh2u(base_decode(data, None, base=43)) - tx = Transaction(text) - tx.deserialize() + tx = tx_from_any(data) except: tx = None if tx: diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 34aeda932..704be55db 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -2723,10 +2723,10 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): d = PasswordDialog(parent, msg) return d.run() - def tx_from_text(self, txt: Union[str, bytes]) -> Union[None, 'PartialTransaction', 'Transaction']: + def tx_from_text(self, data: Union[str, bytes]) -> Union[None, 'PartialTransaction', 'Transaction']: from electrum.transaction import tx_from_any try: - return tx_from_any(txt) + return tx_from_any(data) except BaseException as e: self.show_critical(_("Electrum was unable to parse your transaction") + ":\n" + repr(e)) return @@ -2745,11 +2745,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.pay_to_URI(data) return # else if the user scanned an offline signed tx - try: - data = bh2u(bitcoin.base_decode(data, length=None, base=43)) - except BaseException as e: - self.show_error((_('Could not decode QR code')+':\n{}').format(repr(e))) - return tx = self.tx_from_text(data) if not tx: return diff --git a/electrum/transaction.py b/electrum/transaction.py index 675860c5e..5ca5e0611 100644 --- a/electrum/transaction.py +++ b/electrum/transaction.py @@ -914,7 +914,9 @@ def tx_from_any(raw: Union[str, bytes]) -> Union['PartialTransaction', 'Transact return PartialTransaction.from_raw_psbt(raw) except BadHeaderMagic: pass - return Transaction(raw) + tx = Transaction(raw) + tx.deserialize() + return tx class PSBTGlobalType(IntEnum):