|
|
|
|
@ -12,8 +12,8 @@ from electrum.i18n import _
|
|
|
|
|
from electrum.invoices import InvoiceError, PR_DEFAULT_EXPIRATION_WHEN_CREATING, PR_PAID |
|
|
|
|
from electrum.logging import get_logger |
|
|
|
|
from electrum.network import TxBroadcastError, BestEffortRequestFailed |
|
|
|
|
from electrum.transaction import PartialTxOutput |
|
|
|
|
from electrum.util import (parse_max_spend, InvalidPassword, event_listener) |
|
|
|
|
from electrum.transaction import PartialTxOutput, PartialTransaction |
|
|
|
|
from electrum.util import parse_max_spend, InvalidPassword, event_listener, AddTransactionException |
|
|
|
|
from electrum.plugin import run_hook |
|
|
|
|
from electrum.wallet import Multisig_Wallet |
|
|
|
|
from electrum.crypto import pw_decode_with_version_and_mac |
|
|
|
|
@ -65,6 +65,8 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|
|
|
|
transactionSigned = pyqtSignal([str], arguments=['txid']) |
|
|
|
|
broadcastSucceeded = pyqtSignal([str], arguments=['txid']) |
|
|
|
|
broadcastFailed = pyqtSignal([str,str,str], arguments=['txid','code','reason']) |
|
|
|
|
saveTxSuccess = pyqtSignal([str], arguments=['txid']) |
|
|
|
|
saveTxError = pyqtSignal([str,str], arguments=['txid', 'code', 'message']) |
|
|
|
|
importChannelBackupFailed = pyqtSignal([str], arguments=['message']) |
|
|
|
|
labelsUpdated = pyqtSignal() |
|
|
|
|
otpRequested = pyqtSignal() |
|
|
|
|
@ -509,7 +511,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|
|
|
|
if broadcast: |
|
|
|
|
self.broadcast(tx) |
|
|
|
|
else: |
|
|
|
|
# not broadcasted, so add to history now |
|
|
|
|
# not broadcasted, so refresh history here |
|
|
|
|
self.historyModel.init_model(True) |
|
|
|
|
|
|
|
|
|
# this assumes a 2fa wallet, but there are no other tc_sign_wrapper hooks, so that's ok |
|
|
|
|
@ -553,6 +555,22 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|
|
|
|
|
|
|
|
|
#TODO: properly catch server side errors, e.g. bad-txns-inputs-missingorspent |
|
|
|
|
|
|
|
|
|
def save_tx(self, tx: 'PartialTransaction'): |
|
|
|
|
assert tx |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
if not self.wallet.adb.add_transaction(tx): |
|
|
|
|
self.saveTxError.emit(tx.txid(), 'conflict', |
|
|
|
|
_("Transaction could not be saved.") + "\n" + _("It conflicts with current history.")) |
|
|
|
|
return |
|
|
|
|
self.wallet.save_db() |
|
|
|
|
self.saveTxSuccess.emit(tx.txid()) |
|
|
|
|
self.historyModel.init_model(True) |
|
|
|
|
return True |
|
|
|
|
except AddTransactionException as e: |
|
|
|
|
self.saveTxError.emit(tx.txid(), 'error', str(e)) |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
paymentAuthRejected = pyqtSignal() |
|
|
|
|
def ln_auth_rejected(self): |
|
|
|
|
self.paymentAuthRejected.emit() |
|
|
|
|
|