Browse Source

qml: move potentially slow tx generation in qeswaphelper to a short delay timer

master
Sander van Grieken 3 years ago
parent
commit
743ea80a4c
  1. 49
      electrum/gui/qml/qeswaphelper.py

49
electrum/gui/qml/qeswaphelper.py

@ -3,7 +3,7 @@ import threading
import math import math
from typing import Union from typing import Union
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer
from electrum.i18n import _ from electrum.i18n import _
from electrum.lnutil import ln_dummy_address from electrum.lnutil import ln_dummy_address
@ -48,6 +48,12 @@ class QESwapHelper(AuthMixin, QObject):
self._leftVoid = 0 self._leftVoid = 0
self._rightVoid = 0 self._rightVoid = 0
self._fwd_swap_updatetx_timer = QTimer(self)
self._fwd_swap_updatetx_timer.setSingleShot(True)
# self._fwd_swap_updatetx_timer.setInterval(500)
self._fwd_swap_updatetx_timer.timeout.connect(self.fwd_swap_updatetx)
walletChanged = pyqtSignal() walletChanged = pyqtSignal()
@pyqtProperty(QEWallet, notify=walletChanged) @pyqtProperty(QEWallet, notify=walletChanged)
def wallet(self): def wallet(self):
@ -274,14 +280,12 @@ class QESwapHelper(AuthMixin, QObject):
self.userinfo = _('Adds Lightning receiving capacity.') self.userinfo = _('Adds Lightning receiving capacity.')
self.isReverse = True self.isReverse = True
pay_amount = abs(position) self._send_amount = abs(position)
self._send_amount = pay_amount self.tosend = QEAmount(amount_sat=self._send_amount)
self.tosend = QEAmount(amount_sat=pay_amount)
receive_amount = swap_manager.get_recv_amount( self._receive_amount = swap_manager.get_recv_amount(
send_amount=pay_amount, is_reverse=True) send_amount=self._send_amount, is_reverse=True)
self._receive_amount = receive_amount self.toreceive = QEAmount(amount_sat=self._receive_amount)
self.toreceive = QEAmount(amount_sat=receive_amount)
# fee breakdown # fee breakdown
self.serverfeeperc = f'{swap_manager.percentage:0.1f}%' self.serverfeeperc = f'{swap_manager.percentage:0.1f}%'
@ -289,33 +293,42 @@ class QESwapHelper(AuthMixin, QObject):
self.server_miningfee = QEAmount(amount_sat=server_miningfee) self.server_miningfee = QEAmount(amount_sat=server_miningfee)
self.miningfee = QEAmount(amount_sat=swap_manager.get_claim_fee()) self.miningfee = QEAmount(amount_sat=swap_manager.get_claim_fee())
self.check_valid(self._send_amount, self._receive_amount)
else: # forward (normal) swap else: # forward (normal) swap
self.userinfo = _('Adds Lightning sending capacity.') self.userinfo = _('Adds Lightning sending capacity.')
self.isReverse = False self.isReverse = False
self._send_amount = position self._send_amount = position
self.update_tx(self._send_amount) self._receive_amount = swap_manager.get_recv_amount(send_amount=position, is_reverse=False)
# add lockup fees, but the swap amount is position self.toreceive = QEAmount(amount_sat=self._receive_amount)
pay_amount = position + self._tx.get_fee() if self._tx else 0
self.tosend = QEAmount(amount_sat=pay_amount)
receive_amount = swap_manager.get_recv_amount(send_amount=position, is_reverse=False)
self._receive_amount = receive_amount
self.toreceive = QEAmount(amount_sat=receive_amount)
# fee breakdown # fee breakdown
self.serverfeeperc = f'{swap_manager.percentage:0.1f}%' self.serverfeeperc = f'{swap_manager.percentage:0.1f}%'
server_miningfee = swap_manager.normal_fee server_miningfee = swap_manager.normal_fee
self.server_miningfee = QEAmount(amount_sat=server_miningfee) self.server_miningfee = QEAmount(amount_sat=server_miningfee)
self.miningfee = QEAmount(amount_sat=self._tx.get_fee()) if self._tx else QEAmount()
if pay_amount and receive_amount: # the slow stuff we delegate to a delay timer which triggers after slider
# doesn't update for a while
self.valid = False # wait for timer
self._fwd_swap_updatetx_timer.start(250)
def check_valid(self, send_amount, receive_amount):
if send_amount and receive_amount:
self.valid = True self.valid = True
else: else:
# add more nuanced error reporting? # add more nuanced error reporting?
self.userinfo = _('Swap below minimal swap size, change the slider.') self.userinfo = _('Swap below minimal swap size, change the slider.')
self.valid = False self.valid = False
def fwd_swap_updatetx(self):
self.update_tx(self._send_amount)
# add lockup fees, but the swap amount is position
pay_amount = self._send_amount + self._tx.get_fee() if self._tx else 0
self.tosend = QEAmount(amount_sat=pay_amount)
self.miningfee = QEAmount(amount_sat=self._tx.get_fee()) if self._tx else QEAmount()
self.check_valid(pay_amount, self._receive_amount)
def do_normal_swap(self, lightning_amount, onchain_amount): def do_normal_swap(self, lightning_amount, onchain_amount):
assert self._tx assert self._tx
if lightning_amount is None or onchain_amount is None: if lightning_amount is None or onchain_amount is None:

Loading…
Cancel
Save