fix #2614: define non-linear scale for static fees
This commit is contained in:
parent
1d2253f0d8
commit
198cc9d737
|
@ -58,7 +58,6 @@ class FeeDialog(Factory.Popup):
|
||||||
Factory.Popup.__init__(self)
|
Factory.Popup.__init__(self)
|
||||||
self.app = app
|
self.app = app
|
||||||
self.config = config
|
self.config = config
|
||||||
self.fee_step = self.config.max_fee_rate() / 10
|
|
||||||
self.fee_rate = self.config.fee_per_kb()
|
self.fee_rate = self.config.fee_per_kb()
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
self.dynfees = self.config.get('dynamic_fees', True)
|
self.dynfees = self.config.get('dynamic_fees', True)
|
||||||
|
@ -77,9 +76,9 @@ class FeeDialog(Factory.Popup):
|
||||||
slider.step = 1
|
slider.step = 1
|
||||||
slider.value = self.config.get('fee_level', 2)
|
slider.value = self.config.get('fee_level', 2)
|
||||||
else:
|
else:
|
||||||
slider.range = (1, 10)
|
slider.range = (0, 9)
|
||||||
slider.step = 1
|
slider.step = 1
|
||||||
slider.value = min(self.fee_rate / self.fee_step, 10)
|
slider.value = self.config.static_fee_index(self.fee_rate)
|
||||||
|
|
||||||
def get_fee_text(self, value):
|
def get_fee_text(self, value):
|
||||||
if self.ids.dynfees.active:
|
if self.ids.dynfees.active:
|
||||||
|
@ -88,7 +87,7 @@ class FeeDialog(Factory.Popup):
|
||||||
dynfee = self.config.dynfee(value)
|
dynfee = self.config.dynfee(value)
|
||||||
tooltip += '\n' + (self.app.format_amount_and_units(dynfee)) + '/kB'
|
tooltip += '\n' + (self.app.format_amount_and_units(dynfee)) + '/kB'
|
||||||
else:
|
else:
|
||||||
fee_rate = value * self.fee_step
|
fee_rate = self.config.static_fee(value)
|
||||||
tooltip = self.app.format_amount_and_units(fee_rate) + '/kB'
|
tooltip = self.app.format_amount_and_units(fee_rate) + '/kB'
|
||||||
if self.config.has_fee_estimates():
|
if self.config.has_fee_estimates():
|
||||||
i = self.config.reverse_dynfee(fee_rate)
|
i = self.config.reverse_dynfee(fee_rate)
|
||||||
|
@ -101,7 +100,7 @@ class FeeDialog(Factory.Popup):
|
||||||
if self.dynfees:
|
if self.dynfees:
|
||||||
self.config.set_key('fee_level', value, True)
|
self.config.set_key('fee_level', value, True)
|
||||||
else:
|
else:
|
||||||
self.config.set_key('fee_per_kb', value * self.fee_step, True)
|
self.config.set_key('fee_per_kb', self.config.static_fee(value), True)
|
||||||
self.callback()
|
self.callback()
|
||||||
|
|
||||||
def on_slider(self, value):
|
def on_slider(self, value):
|
||||||
|
|
|
@ -28,7 +28,7 @@ class FeeSlider(QSlider):
|
||||||
|
|
||||||
def moved(self, pos):
|
def moved(self, pos):
|
||||||
with self.lock:
|
with self.lock:
|
||||||
fee_rate = self.config.dynfee(pos) if self.dyn else pos * self.fee_step
|
fee_rate = self.config.dynfee(pos) if self.dyn else self.config.static_fee(pos)
|
||||||
tooltip = self.get_tooltip(pos, fee_rate)
|
tooltip = self.get_tooltip(pos, fee_rate)
|
||||||
QToolTip.showText(QCursor.pos(), tooltip, self)
|
QToolTip.showText(QCursor.pos(), tooltip, self)
|
||||||
self.setToolTip(tooltip)
|
self.setToolTip(tooltip)
|
||||||
|
@ -55,10 +55,9 @@ class FeeSlider(QSlider):
|
||||||
self.setRange(0, 4)
|
self.setRange(0, 4)
|
||||||
self.setValue(pos)
|
self.setValue(pos)
|
||||||
else:
|
else:
|
||||||
self.fee_step = self.config.max_fee_rate() / 10
|
|
||||||
fee_rate = self.config.fee_per_kb()
|
fee_rate = self.config.fee_per_kb()
|
||||||
pos = min(fee_rate / self.fee_step, 10)
|
pos = self.config.static_fee_index(fee_rate)
|
||||||
self.setRange(1, 10)
|
self.setRange(0, 9)
|
||||||
self.setValue(pos)
|
self.setValue(pos)
|
||||||
tooltip = self.get_tooltip(pos, fee_rate)
|
tooltip = self.get_tooltip(pos, fee_rate)
|
||||||
self.setToolTip(tooltip)
|
self.setToolTip(tooltip)
|
||||||
|
|
|
@ -2437,21 +2437,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
fee_widgets.append((dynfee_cb, None))
|
fee_widgets.append((dynfee_cb, None))
|
||||||
dynfee_cb.stateChanged.connect(on_dynfee)
|
dynfee_cb.stateChanged.connect(on_dynfee)
|
||||||
|
|
||||||
def on_maxfee(x):
|
|
||||||
m = maxfee_e.get_amount()
|
|
||||||
if m: self.config.set_key('max_fee_rate', m)
|
|
||||||
self.fee_slider.update()
|
|
||||||
def update_maxfee():
|
|
||||||
d = self.config.is_dynfee()
|
|
||||||
maxfee_e.setDisabled(d)
|
|
||||||
maxfee_label.setDisabled(d)
|
|
||||||
maxfee_label = HelpLabel(_('Max static fee'), _('Max value of the static fee slider'))
|
|
||||||
maxfee_e = BTCkBEdit(self.get_decimal_point)
|
|
||||||
maxfee_e.setAmount(self.config.max_fee_rate())
|
|
||||||
maxfee_e.textChanged.connect(on_maxfee)
|
|
||||||
update_maxfee()
|
|
||||||
fee_widgets.append((maxfee_label, maxfee_e))
|
|
||||||
|
|
||||||
feebox_cb = QCheckBox(_('Edit fees manually'))
|
feebox_cb = QCheckBox(_('Edit fees manually'))
|
||||||
feebox_cb.setChecked(self.config.get('show_fee', False))
|
feebox_cb.setChecked(self.config.get('show_fee', False))
|
||||||
feebox_cb.setToolTip(_("Show fee edit box in send tab."))
|
feebox_cb.setToolTip(_("Show fee edit box in send tab."))
|
||||||
|
|
|
@ -41,6 +41,8 @@ class SimpleConfig(PrintError):
|
||||||
They are taken in order (1. overrides config options set in 2., that
|
They are taken in order (1. overrides config options set in 2., that
|
||||||
override config set in 3.)
|
override config set in 3.)
|
||||||
"""
|
"""
|
||||||
|
fee_rates = [5000, 10000, 20000, 30000, 50000, 70000, 100000, 150000, 200000, 300000]
|
||||||
|
|
||||||
def __init__(self, options={}, read_system_config_function=None,
|
def __init__(self, options={}, read_system_config_function=None,
|
||||||
read_user_config_function=None, read_user_dir_function=None):
|
read_user_config_function=None, read_user_dir_function=None):
|
||||||
|
|
||||||
|
@ -230,6 +232,13 @@ class SimpleConfig(PrintError):
|
||||||
min_target = -1
|
min_target = -1
|
||||||
return min_target
|
return min_target
|
||||||
|
|
||||||
|
def static_fee(self, i):
|
||||||
|
return self.fee_rates[i]
|
||||||
|
|
||||||
|
def static_fee_index(self, value):
|
||||||
|
dist = list(map(lambda x: abs(x - value), self.fee_rates))
|
||||||
|
return min(range(len(dist)), key=dist.__getitem__)
|
||||||
|
|
||||||
def has_fee_estimates(self):
|
def has_fee_estimates(self):
|
||||||
return len(self.fee_estimates)==4
|
return len(self.fee_estimates)==4
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue