diff --git a/electrum/bitcoin.py b/electrum/bitcoin.py index 01440a757..562b53ee4 100644 --- a/electrum/bitcoin.py +++ b/electrum/bitcoin.py @@ -325,14 +325,14 @@ def construct_script( def relayfee(network: 'Network' = None) -> int: """Returns feerate in sat/kbyte.""" - from .fee_policy import FEERATE_DEFAULT_RELAY, FEERATE_MAX_RELAY + from .fee_policy import FEERATE_MIN_RELAY, FEERATE_DEFAULT_RELAY, FEERATE_MAX_RELAY if network and network.relay_fee is not None: fee = network.relay_fee else: fee = FEERATE_DEFAULT_RELAY # sanity safeguards, as network.relay_fee is coming from a server: fee = min(fee, FEERATE_MAX_RELAY) - fee = max(fee, FEERATE_DEFAULT_RELAY) + fee = max(fee, FEERATE_MIN_RELAY) return fee diff --git a/electrum/fee_policy.py b/electrum/fee_policy.py index f02e545c8..9e8e660e1 100644 --- a/electrum/fee_policy.py +++ b/electrum/fee_policy.py @@ -25,8 +25,10 @@ FEERATE_MAX_DYNAMIC = 1500000 FEERATE_WARNING_HIGH_FEE = 600000 FEERATE_FALLBACK_STATIC_FEE = 150000 FEERATE_REGTEST_STATIC_FEE = FEERATE_FALLBACK_STATIC_FEE # hardcoded fee used on regtest -FEERATE_DEFAULT_RELAY = 1000 +FEERATE_MIN_RELAY = 100 +FEERATE_DEFAULT_RELAY = 1000 # conservative "min relay fee" FEERATE_MAX_RELAY = 50000 +assert FEERATE_MIN_RELAY <= FEERATE_DEFAULT_RELAY <= FEERATE_MAX_RELAY # warn user if fee/amount for on-chain tx is higher than this FEE_RATIO_HIGH_WARNING = 0.05 @@ -288,6 +290,8 @@ def impose_hard_limits_on_fee(func): if fee is None: return fee fee = min(FEERATE_MAX_DYNAMIC, fee) + # Clamp dynamic feerates with conservative min relay fee, + # to ensure txs propagate well: fee = max(FEERATE_DEFAULT_RELAY, fee) return fee return get_fee_within_limits @@ -359,7 +363,7 @@ class FeeHistogram: slot = min(item[1], bytes_limit-bytes_current) bytes_current += slot capped_histogram.append([ - max(FEERATE_DEFAULT_RELAY/1000, item[0]), # clamped to [FEERATE_DEFAULT_RELAY/1000,inf[ + max(FEERATE_MIN_RELAY/1000, item[0]), # clamped to [FEERATE_MIN_RELAY/1000,inf[ slot, # width of bucket bytes_current, # cumulative depth at far end of bucket ])