confirm_tx_dialog: separate messages from warnings. add warnings about tx batching and spending unconfirmed coins
This commit is contained in:
@@ -334,7 +334,7 @@ class QETxFinalizer(TxFeeSlider):
|
|||||||
invoice_amt=amount, tx_size=tx.estimated_size(), fee=tx.get_fee())
|
invoice_amt=amount, tx_size=tx.estimated_size(), fee=tx.get_fee())
|
||||||
if fee_warning_tuple:
|
if fee_warning_tuple:
|
||||||
allow_send, long_warning, short_warning = fee_warning_tuple
|
allow_send, long_warning, short_warning = fee_warning_tuple
|
||||||
self.warning = long_warning
|
self.warning = _('Warning') + ': ' + long_warning
|
||||||
else:
|
else:
|
||||||
self.warning = ''
|
self.warning = ''
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ class TxEditor(WindowModalDialog):
|
|||||||
self.make_tx = make_tx
|
self.make_tx = make_tx
|
||||||
self.output_value = output_value
|
self.output_value = output_value
|
||||||
self.tx = None # type: Optional[PartialTransaction]
|
self.tx = None # type: Optional[PartialTransaction]
|
||||||
self.message = '' # set by side effect
|
self.message = '' # set by side effect in RBF dialogs
|
||||||
|
self.warning = '' # set by side effect
|
||||||
self.error = '' # set by side effect
|
self.error = '' # set by side effect
|
||||||
|
|
||||||
self.config = window.config
|
self.config = window.config
|
||||||
@@ -93,9 +94,12 @@ class TxEditor(WindowModalDialog):
|
|||||||
|
|
||||||
vbox.addLayout(top)
|
vbox.addLayout(top)
|
||||||
vbox.addLayout(grid)
|
vbox.addLayout(grid)
|
||||||
self.message_label = WWLabel('\n')
|
self.message_label = WWLabel('')
|
||||||
vbox.addWidget(self.message_label)
|
vbox.addWidget(self.message_label)
|
||||||
vbox.addWidget(self.io_widget)
|
vbox.addWidget(self.io_widget)
|
||||||
|
self.warning_label = WWLabel('')
|
||||||
|
vbox.addWidget(self.warning_label)
|
||||||
|
|
||||||
buttons = self.create_buttons_bar()
|
buttons = self.create_buttons_bar()
|
||||||
vbox.addStretch(1)
|
vbox.addStretch(1)
|
||||||
vbox.addLayout(buttons)
|
vbox.addLayout(buttons)
|
||||||
@@ -531,7 +535,7 @@ class TxEditor(WindowModalDialog):
|
|||||||
self.io_widget.update(None)
|
self.io_widget.update(None)
|
||||||
self.set_feerounding_visibility(False)
|
self.set_feerounding_visibility(False)
|
||||||
else:
|
else:
|
||||||
self.check_tx_fee_warning()
|
self.check_warnings()
|
||||||
self.update_fee_fields()
|
self.update_fee_fields()
|
||||||
if self.locktime_e.get_locktime() is None:
|
if self.locktime_e.get_locktime() is None:
|
||||||
self.locktime_e.set_locktime(self.tx.locktime)
|
self.locktime_e.set_locktime(self.tx.locktime)
|
||||||
@@ -542,8 +546,9 @@ class TxEditor(WindowModalDialog):
|
|||||||
self._update_send_button()
|
self._update_send_button()
|
||||||
self._update_message()
|
self._update_message()
|
||||||
|
|
||||||
def check_tx_fee_warning(self):
|
def check_warnings(self):
|
||||||
# side effects: self.error, self.message
|
# side effects: self.error, self.warning
|
||||||
|
warnings = []
|
||||||
fee = self.tx.get_fee()
|
fee = self.tx.get_fee()
|
||||||
assert fee is not None
|
assert fee is not None
|
||||||
amount = self.tx.output_value() if self.output_value == '!' else self.output_value
|
amount = self.tx.output_value() if self.output_value == '!' else self.output_value
|
||||||
@@ -555,8 +560,17 @@ class TxEditor(WindowModalDialog):
|
|||||||
if not allow_send:
|
if not allow_send:
|
||||||
self.error = long_warning
|
self.error = long_warning
|
||||||
else:
|
else:
|
||||||
# note: this may overrride existing message
|
warnings.append(long_warning)
|
||||||
self.message = long_warning
|
# warn if spending unconf
|
||||||
|
if any(txin.block_height<=0 for txin in self.tx.inputs()):
|
||||||
|
warnings.append(_('This transaction spends unconfirmed coins.'))
|
||||||
|
# warn if we merge from mempool
|
||||||
|
base_tx = self.wallet.get_unconfirmed_base_tx_for_batching()
|
||||||
|
if self.config.get('batch_rbf', False) and base_tx:
|
||||||
|
warnings.append(_('This payment was merged with another existing transaction.'))
|
||||||
|
# TODO: warn if we send change back to input address
|
||||||
|
self.warning = _('Warning') + ': ' + '\n'.join(warnings) if warnings else ''
|
||||||
|
self._update_warning()
|
||||||
|
|
||||||
def set_locktime(self):
|
def set_locktime(self):
|
||||||
if not self.tx:
|
if not self.tx:
|
||||||
@@ -572,9 +586,14 @@ class TxEditor(WindowModalDialog):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def _update_message(self):
|
def _update_message(self):
|
||||||
style = ColorScheme.RED if self.error else ColorScheme.BLUE
|
style = ColorScheme.BLUE
|
||||||
self.message_label.setStyleSheet(style.as_stylesheet())
|
self.message_label.setStyleSheet(style.as_stylesheet())
|
||||||
self.message_label.setText(self.error or self.message)
|
self.message_label.setText(self.message)
|
||||||
|
|
||||||
|
def _update_warning(self):
|
||||||
|
style = ColorScheme.RED if self.error else ColorScheme.BLUE
|
||||||
|
self.warning_label.setStyleSheet(style.as_stylesheet())
|
||||||
|
self.warning_label.setText(self.error or self.warning)
|
||||||
|
|
||||||
def _update_send_button(self):
|
def _update_send_button(self):
|
||||||
enabled = bool(self.tx) and not self.error
|
enabled = bool(self.tx) and not self.error
|
||||||
|
|||||||
@@ -2859,12 +2859,12 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
allow_send = False
|
allow_send = False
|
||||||
elif fee_ratio >= FEE_RATIO_HIGH_WARNING:
|
elif fee_ratio >= FEE_RATIO_HIGH_WARNING:
|
||||||
long_warning = (
|
long_warning = (
|
||||||
_('Warning') + ': ' + _("The fee for this transaction seems unusually high.")
|
_("The fee for this transaction seems unusually high.")
|
||||||
+ f' ({fee_ratio*100:.2f}% of amount)')
|
+ f' ({fee_ratio*100:.2f}% of amount)')
|
||||||
short_warning = _("high fee ratio") + "!"
|
short_warning = _("high fee ratio") + "!"
|
||||||
elif feerate > FEERATE_WARNING_HIGH_FEE / 1000:
|
elif feerate > FEERATE_WARNING_HIGH_FEE / 1000:
|
||||||
long_warning = (
|
long_warning = (
|
||||||
_('Warning') + ': ' + _("The fee for this transaction seems unusually high.")
|
_("The fee for this transaction seems unusually high.")
|
||||||
+ f' (feerate: {feerate:.2f} sat/byte)')
|
+ f' (feerate: {feerate:.2f} sat/byte)')
|
||||||
short_warning = _("high fee rate") + "!"
|
short_warning = _("high fee rate") + "!"
|
||||||
if long_warning is None:
|
if long_warning is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user