Fix reject too low mining fees (< 12 blocks conf target)

This commit is contained in:
Reckless_Satoshi 2023-03-17 13:55:49 -07:00
parent eac5a5f714
commit 9158bd4c98
No known key found for this signature in database
GPG Key ID: 9C4585B561315571
2 changed files with 22 additions and 18 deletions

View File

@ -77,9 +77,9 @@ class LNNode:
def estimate_fee(cls, amount_sats, target_conf=2, min_confs=1):
"""Returns estimated fee for onchain payouts"""
# We assume segwit. Use robosats donation address as shortcut so there is no need of user inputs
# We assume segwit. Use hardcoded address as shortcut so there is no need of user inputs yet.
request = lnrpc.EstimateFeeRequest(
AddrToAmount={"bc1q3cpp7ww92n6zp04hv40kd3eyy5avgughx6xqnx": amount_sats},
AddrToAmount={"bc1qgxwaqe4m9mypd7ltww53yv3lyxhcfnhzzvy5j3": amount_sats},
target_conf=target_conf,
min_confs=min_confs,
spend_unconfirmed=False,

View File

@ -566,9 +566,9 @@ class Logics:
): # Not enough onchain balance to commit for this swap.
return False
suggested_mining_fee_rate = LNNode.estimate_fee(amount_sats=preliminary_amount)[
"mining_fee_rate"
]
suggested_mining_fee_rate = LNNode.estimate_fee(
amount_sats=preliminary_amount, target_conf=2
)["mining_fee_rate"]
# Hardcap mining fee suggested at 100 sats/vbyte
if suggested_mining_fee_rate > 100:
@ -683,25 +683,29 @@ class Logics:
"bad_request": "Only the buyer of this order can provide a payout address."
}
# not the right time to submit
if (
not (
order.taker_bond.status
== order.maker_bond.status
== LNPayment.Status.LOCKED
)
and not order.status == Order.Status.FAI
):
return False, {"bad_request": "You cannot submit an adress are not locked."}
# not a valid address (does not accept Taproot as of now)
if not (
order.taker_bond.status
== order.maker_bond.status
== LNPayment.Status.LOCKED
) or order.status not in [Order.Status.WFI, Order.Status.WF2]:
return False, {"bad_request": "You cannot submit an address now."}
# not a valid address
valid, context = validate_onchain_address(address)
if not valid:
return False, context
num_satoshis = cls.payout_amount(order, user)[1]["invoice_amount"]
if mining_fee_rate:
# not a valid mining fee
if float(mining_fee_rate) < 2:
min_mining_fee_rate = LNNode.estimate_fee(
amount_sats=num_satoshis, target_conf=12
)["mining_fee_rate"]
min_mining_fee_rate = max(2, min_mining_fee_rate)
if float(mining_fee_rate) < min_mining_fee_rate:
return False, {
"bad_address": "The mining fee is too low, must be higher than 2 Sat/vbyte"
"bad_address": f"The mining fee is too low. Must be higher than {min_mining_fee_rate} Sat/vbyte"
}
elif float(mining_fee_rate) > 100:
return False, {
@ -715,7 +719,7 @@ class Logics:
tx = order.payout_tx
tx.address = address
tx.mining_fee_sats = int(tx.mining_fee_rate * 200)
tx.num_satoshis = cls.payout_amount(order, user)[1]["invoice_amount"]
tx.num_satoshis = num_satoshis
tx.sent_satoshis = int(
float(tx.num_satoshis)
- float(tx.num_satoshis) * float(tx.swap_fee_rate) / 100