diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 7243efcfa..c865635fc 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -937,8 +937,11 @@ class ElectrumWindow(App): self.wallet.invoices.save() self.update_tab('invoices') else: - msg = msg[:500] if msg else _('There was an error broadcasting the transaction.') - self.show_error(msg) + display_msg = _('The server returned an error when broadcasting the transaction.') + if msg: + display_msg += '\n' + msg + display_msg = display_msg[:500] + self.show_error(display_msg) if self.network and self.network.is_connected(): self.show_info(_('Sending')) diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 0a8ecb280..5e0283419 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -1690,7 +1690,10 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.invoice_list.update() self.do_clear() else: - parent.show_error(msg) + display_msg = _('The server returned an error when broadcasting the transaction.') + if msg: + display_msg += '\n' + msg + parent.show_error(display_msg) WaitingDialog(self, _('Broadcasting transaction...'), broadcast_thread, broadcast_done, self.on_error) diff --git a/electrum/gui/stdio.py b/electrum/gui/stdio.py index 7b4a41b94..e3808129f 100644 --- a/electrum/gui/stdio.py +++ b/electrum/gui/stdio.py @@ -206,7 +206,9 @@ class ElectrumGui: try: self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) except Exception as e: - print(repr(e)) + display_msg = _('The server returned an error when broadcasting the transaction.') + display_msg += '\n' + repr(e) + print(display_msg) else: print(_('Payment sent.')) #self.do_clear() diff --git a/electrum/gui/text.py b/electrum/gui/text.py index ec5ba5c9b..d263efbe2 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -15,7 +15,7 @@ from electrum.storage import WalletStorage from electrum.network import NetworkParameters from electrum.interface import deserialize_server -_ = lambda x:x +_ = lambda x:x # i18n class ElectrumGui: @@ -370,7 +370,9 @@ class ElectrumGui: try: self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) except Exception as e: - self.show_message(repr(e)) + display_msg = _('The server returned an error when broadcasting the transaction.') + display_msg += '\n' + repr(e) + self.show_message(display_msg) else: self.show_message(_('Payment sent.')) self.do_clear() diff --git a/electrum/network.py b/electrum/network.py index 1704e0385..748cd46b3 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -737,6 +737,7 @@ class Network(PrintError): timeout = self.get_network_timeout_seconds(NetworkTimeout.Urgent) out = await self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)], timeout=timeout) if out != tx.txid(): + # note: this is untrusted input from the server raise Exception(out) return out # txid