def update_fee_fields(self): freeze_fee = self.is_send_fee_frozen() freeze_feerate = self.is_send_feerate_frozen() if self.no_dynfee_estimates: size = self.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 tx = self.tx size = tx.estimated_size() fee = tx.get_fee() self.size_e.setAmount(size) # 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)
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)
def setAmount(self, amount): amount = quantize_feerate(amount) super().setAmount(amount)
def get_amount(self): sat_per_kb_amount = BTCAmountEdit.get_amount(self) return quantize_feerate(sat_per_kb_amount)