1
0

fee_policy: lower min relay fee from 1 sat/byte to 0.1 s/b

- minrelayfee is still server-reported, but the clamps are changed from [1, 50] to [0.1, 50] sat/vbyte
- dynamic feerates coming from the estimator are still clamped to [1, 1500] sat/vbyte

ref https://github.com/bitcoin/bitcoin/pull/33106
This commit is contained in:
SomberNight
2025-08-01 17:46:27 +00:00
parent d8a6ed9b55
commit 58af1c493d
2 changed files with 8 additions and 4 deletions

View File

@@ -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

View File

@@ -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
])