tnetwork: change broadcast_transaction api - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 87b05e1c9e1b7163e5f100765656b26b96c8a144 DIR parent c7833b8bc036cc4661edd3fa55d50c56833727e1 HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 10 Oct 2018 15:56:41 +0200 network: change broadcast_transaction api raise exceptions instead of weird return values closes #4433 Diffstat: M electrum/gui/kivy/main_window.py | 11 ++++++++--- M electrum/gui/qt/main_window.py | 8 ++++++-- M electrum/gui/stdio.py | 11 +++++------ M electrum/gui/text.py | 12 +++++------- M electrum/network.py | 12 +++--------- 5 files changed, 27 insertions(+), 27 deletions(-) --- DIR diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py t@@ -887,9 +887,14 @@ class ElectrumWindow(App): Clock.schedule_once(lambda dt: on_success(tx)) def _broadcast_thread(self, tx, on_complete): - ok, txid = self.network.run_from_another_thread( - self.network.broadcast_transaction(tx)) - Clock.schedule_once(lambda dt: on_complete(ok, txid)) + + try: + self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) + except Exception as e: + ok, msg = False, repr(e) + else: + ok, msg = True, tx.txid() + Clock.schedule_once(lambda dt: on_complete(ok, msg)) def broadcast(self, tx, pr=None): def on_complete(ok, msg): DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py t@@ -1639,8 +1639,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): if pr and pr.has_expired(): self.payment_request = None return False, _("Payment request has expired") - status, msg = self.network.run_from_another_thread( - self.network.broadcast_transaction(tx)) + try: + self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) + except Exception as e: + status, msg = False, repr(e) + else: + status, msg = True, tx.txid() if pr and status is True: self.invoices.set_paid(pr, tx.txid()) self.invoices.save() DIR diff --git a/electrum/gui/stdio.py b/electrum/gui/stdio.py t@@ -203,15 +203,14 @@ class ElectrumGui: self.wallet.labels[tx.txid()] = self.str_description print(_("Please wait...")) - status, msg = self.network.run_from_another_thread( - self.network.broadcast_transaction(tx)) - - if status: + try: + self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) + except Exception as e: + print(repr(e)) + else: print(_('Payment sent.')) #self.do_clear() #self.update_contacts_tab() - else: - print(_('Error')) def network_dialog(self): print("use 'electrum setconfig server/proxy' to change your network settings") DIR diff --git a/electrum/gui/text.py b/electrum/gui/text.py t@@ -367,16 +367,14 @@ class ElectrumGui: self.wallet.labels[tx.txid()] = self.str_description self.show_message(_("Please wait..."), getchar=False) - status, msg = self.network.run_from_another_thread( - self.network.broadcast_transaction(tx)) - - if status: + try: + self.network.run_from_another_thread(self.network.broadcast_transaction(tx)) + except Exception as e: + self.show_message(repr(e)) + else: self.show_message(_('Payment sent.')) self.do_clear() #self.update_contacts_tab() - else: - self.show_message(_('Error')) - def show_message(self, message, getchar = True): w = self.w DIR diff --git a/electrum/network.py b/electrum/network.py t@@ -676,16 +676,10 @@ class Network(PrintError): @best_effort_reliable async def broadcast_transaction(self, tx, timeout=10): - try: - out = await self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)], timeout=timeout) - except RequestTimedOut as e: - return False, "error: operation timed out" - except Exception as e: - return False, "error: " + str(e) - + out = await self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)], timeout=timeout) if out != tx.txid(): - return False, "error: " + out - return True, out + raise Exception(out) + return out # txid @best_effort_reliable async def request_chunk(self, height, tip=None, *, can_return_early=False):