Browse Source

Merge #272: Add tx fee floor if manually chosen

4462ab6 Add tx fee floor if manually chosen (AlexCato)
master
AdamISZ 7 years ago
parent
commit
050aeea6c5
No known key found for this signature in database
GPG Key ID: 141001A1AF77F20B
  1. 15
      jmclient/jmclient/blockchaininterface.py

15
jmclient/jmclient/blockchaininterface.py

@ -306,7 +306,8 @@ class ElectrumWalletInterface(BlockchainInterface): #pragma: no cover
def estimate_fee_per_kb(self, N):
if super(ElectrumWalletInterface, self).fee_per_kb_has_been_manually_set(N):
return int(random.uniform(N * float(0.8), N * float(1.2)))
# use a floor of 1000 to not run into node relay problems
return int(max(1000, random.uniform(N * float(0.8), N * float(1.2))))
fee = self.wallet.network.synchronous_get(('blockchain.estimatefee', [N]
))
log.debug("Got fee: " + str(fee))
@ -872,7 +873,17 @@ class BitcoinCoreInterface(BlockchainInterface):
def estimate_fee_per_kb(self, N):
if super(BitcoinCoreInterface, self).fee_per_kb_has_been_manually_set(N):
return int(random.uniform(N * float(0.8), N * float(1.2)))
# use the local bitcoin core relay fee as floor to avoid relay problems
btc_relayfee = -1
rpc_result = self.rpc('getnetworkinfo', None)
btc_relayfee = rpc_result.get('relayfee', btc_relayfee)
if btc_relayfee > 0:
relayfee_in_sat = int(Decimal(1e8) * Decimal(btc_relayfee))
log.debug("Using this min relay fee as tx fee floor: " + str(relayfee_in_sat))
return int(max(relayfee_in_sat, random.uniform(N * float(0.8), N * float(1.2))))
else: # cannot get valid relayfee: fall back to 1000 sat/kbyte
log.debug("Using this min relay fee as tx fee floor (fallback): 1000")
return int(max(1000, random.uniform(N * float(0.8), N * float(1.2))))
# Special bitcoin core case: sometimes the highest priority
# cannot be estimated in that case the 2nd highest priority

Loading…
Cancel
Save