Exemplo n.º 1
0
    def update_fee_fields(self):
        freeze_fee = self.is_send_fee_frozen()
        freeze_feerate = self.is_send_feerate_frozen()
        tx = self.tx
        if self.no_dynfee_estimates and tx:
            size = tx.estimated_size()
            self.size_e.setAmount(size)
        if self.not_enough_funds or self.no_dynfee_estimates:
            if not freeze_fee:
                self.fee_e.setAmount(None)
            if not freeze_feerate:
                self.feerate_e.setAmount(None)
            self.feerounding_icon.setVisible(False)
            return

        assert tx is not None
        size = tx.estimated_size()
        fee = tx.get_fee()

        self.size_e.setAmount(size)
        fiat_fee = self.main_window.format_fiat_and_units(fee)
        self.fiat_fee_label.setAmount(fiat_fee)

        # Displayed fee/fee_rate values are set according to user input.
        # Due to rounding or dropping dust in CoinChooser,
        # actual fees often differ somewhat.
        if freeze_feerate or self.fee_slider.is_active():
            displayed_feerate = self.feerate_e.get_amount()
            if displayed_feerate is not None:
                displayed_feerate = quantize_feerate(displayed_feerate)
            elif self.fee_slider.is_active():
                # fallback to actual fee
                displayed_feerate = quantize_feerate(fee * 1000 / size) if fee is not None else None
                self.feerate_e.setAmount(displayed_feerate)
            displayed_fee = round(displayed_feerate * size / 1000) if displayed_feerate is not None else None
            self.fee_e.setAmount(displayed_fee)
        else:
            if freeze_fee:
                displayed_fee = self.fee_e.get_amount()
            else:
                # fallback to actual fee if nothing is frozen
                displayed_fee = fee
                self.fee_e.setAmount(displayed_fee)
            displayed_fee = displayed_fee if displayed_fee else 0
            displayed_feerate = quantize_feerate(displayed_fee * 1000 / size) if displayed_fee is not None else None
            self.feerate_e.setAmount(displayed_feerate)

        # show/hide fee rounding icon
        feerounding = (fee - displayed_fee) if (fee and displayed_fee is not None) else 0
        self.set_feerounding_text(int(feerounding))
        self.feerounding_icon.setToolTip(self.feerounding_text)
        self.feerounding_icon.setVisible(abs(feerounding) >= 1)
        if not self.is_ps_tx:  # PS coinchooser does not use fee rounding
            feerounding = (fee - displayed_fee) if fee else 0
            if abs(feerounding) >= 1:
                self.set_feerounding_text(int(feerounding))
                if self.config.get('show_fee', False):
                    self.feerounding_icon.setVisible(True)
Exemplo n.º 2
0
 def fee_slider_callback(self, dyn, pos, fee_rate):
     super().fee_slider_callback(dyn, pos, fee_rate)
     self.fee_slider.activate()
     if fee_rate:
         fee_rate = Decimal(fee_rate)
         self.feerate_e.setAmount(quantize_feerate(fee_rate))
     else:
         self.feerate_e.setAmount(None)
     self.fee_e.setModified(False)
Exemplo n.º 3
0
 def setAmount(self, amount):
     amount = quantize_feerate(amount)
     super().setAmount(amount)
Exemplo n.º 4
0
 def get_amount(self):
     sat_per_kb_amount = BTCAmountEdit.get_amount(self)
     return quantize_feerate(sat_per_kb_amount)