diff --git a/gui/qt/amountedit.py b/gui/qt/amountedit.py index 8b8d22b82..9a2f43077 100644 --- a/gui/qt/amountedit.py +++ b/gui/qt/amountedit.py @@ -69,6 +69,9 @@ class AmountEdit(MyLineEdit): except: return None + def setAmount(self, x): + self.setText("%d"%x) + class BTCAmountEdit(AmountEdit): diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index ff7224d4f..f31d0c2a2 100644 --- a/gui/qt/main_window.py +++ b/gui/qt/main_window.py @@ -1068,11 +1068,18 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): else: self.config.set_key('fee_per_kb', fee_rate, False) self.spend_max() if self.is_max else self.update_fee() + self.feerate_e.setAmount(fee_rate//1000) self.fee_slider = FeeSlider(self, self.config, fee_cb) self.fee_slider.setFixedWidth(140) + self.size_e = AmountEdit(lambda: 'bytes') + self.size_e.setReadOnly(True) + self.feerate_e = AmountEdit(lambda: self.base_unit() + '/kB' if self.fee_unit else 'sat/bytes') + self.feerate_e.textEdited.connect(self.update_fee) + self.fee_e = BTCAmountEdit(self.get_decimal_point) + if not self.config.get('show_fee', False): self.fee_e.setVisible(False) self.fee_e.textEdited.connect(self.update_fee) @@ -1081,17 +1088,20 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.fee_e.editingFinished.connect(self.update_fee) self.connect_fields(self, self.amount_e, self.fiat_send_e, self.fee_e) - self.rbf_checkbox = QCheckBox(_('Replaceable')) - msg = [_('If you check this box, your transaction will be marked as non-final,'), - _('and you will have the possiblity, while it is unconfirmed, to replace it with a transaction that pays a higher fee.'), - _('Note that some merchants do not accept non-final transactions until they are confirmed.')] - self.rbf_checkbox.setToolTip('

' + ' '.join(msg) + '

') - self.rbf_checkbox.setVisible(False) + #self.rbf_checkbox = QCheckBox(_('Replaceable')) + #msg = [_('If you check this box, your transaction will be marked as non-final,'), + # _('and you will have the possiblity, while it is unconfirmed, to replace it with a transaction that pays a higher fee.'), + # _('Note that some merchants do not accept non-final transactions until they are confirmed.')] + #self.rbf_checkbox.setToolTip('

' + ' '.join(msg) + '

') + #self.rbf_checkbox.setVisible(False) grid.addWidget(self.fee_e_label, 5, 0) - grid.addWidget(self.fee_slider, 5, 1) - grid.addWidget(self.fee_e, 5, 2) - grid.addWidget(self.rbf_checkbox, 5, 3) + grid.addWidget(self.feerate_e, 5, 1) + grid.addWidget(self.size_e, 5, 2) + grid.addWidget(self.fee_e, 5, 3) + + grid.addWidget(self.fee_slider, 6, 1) + #grid.addWidget(self.rbf_checkbox, 5, 3) self.preview_button = EnterButton(_("Preview"), self.do_preview) self.preview_button.setToolTip(_('Display the details of your transactions before signing it.')) @@ -1102,7 +1112,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): buttons.addWidget(self.clear_button) buttons.addWidget(self.preview_button) buttons.addWidget(self.send_button) - grid.addLayout(buttons, 6, 1, 1, 3) + grid.addLayout(buttons, 7, 1, 1, 3) self.amount_e.shortcut.connect(self.spend_max) self.payto_e.textChanged.connect(self.update_fee) @@ -1203,9 +1213,17 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): except BaseException: return + size = tx.estimated_size() + self.size_e.setAmount(size) + if not freeze_fee: + fee_rate = self.config.fee_per_kb() fee = None if self.not_enough_funds else tx.get_fee() self.fee_e.setAmount(fee) + elif fee: + print(size, fee) + fee_rate = fee // size + self.feerate_e.setAmount(fee_rate) if self.is_max: amount = tx.output_value() @@ -1213,20 +1231,20 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): if fee is None: return - rbf_policy = self.config.get('rbf_policy', 1) - if rbf_policy == 0: - b = True - elif rbf_policy == 1: - fee_rate = fee * 1000 / tx.estimated_size() - try: - c = self.config.reverse_dynfee(fee_rate) - b = c in [-1, 25] - except: - b = False - elif rbf_policy == 2: - b = False - self.rbf_checkbox.setVisible(b) - self.rbf_checkbox.setChecked(b) + #rbf_policy = self.config.get('rbf_policy', 1) + #if rbf_policy == 0: + # b = True + #elif rbf_policy == 1: + # fee_rate = fee * 1000 / tx.estimated_size() + # try: + # c = self.config.reverse_dynfee(fee_rate) + # b = c in [-1, 25] + # except: + # b = False + #elif rbf_policy == 2: + # b = False + #self.rbf_checkbox.setVisible(b) + #self.rbf_checkbox.setChecked(b) def from_list_delete(self, item): @@ -1356,7 +1374,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): amount = tx.output_value() if self.is_max else sum(map(lambda x:x[2], outputs)) fee = tx.get_fee() - use_rbf = self.rbf_checkbox.isChecked() + use_rbf = True#self.rbf_checkbox.isChecked() if use_rbf: tx.set_rbf(True) @@ -1567,7 +1585,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): e.setText('') e.setFrozen(False) self.set_pay_from([]) - self.rbf_checkbox.setChecked(False) + #self.rbf_checkbox.setChecked(False) self.tx_external_keypairs = {} self.update_status() run_hook('do_clear', self)