Merge pull request #10164 from f321x/proper_cleanup_after_swap_failed
swaps: cleanup data after swap gets failed
This commit is contained in:
@@ -2318,6 +2318,13 @@ class LNWallet(LNWorker):
|
|||||||
return key_list
|
return key_list
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def delete_payment_bundle(self, payment_hash: bytes) -> None:
|
||||||
|
payment_key = self._get_payment_key(payment_hash)
|
||||||
|
for key_list in self.payment_bundles:
|
||||||
|
if payment_key in key_list:
|
||||||
|
self.payment_bundles.remove(key_list)
|
||||||
|
return
|
||||||
|
|
||||||
def save_preimage(self, payment_hash: bytes, preimage: bytes, *, write_to_disk: bool = True):
|
def save_preimage(self, payment_hash: bytes, preimage: bytes, *, write_to_disk: bool = True):
|
||||||
if sha256(preimage) != payment_hash:
|
if sha256(preimage) != payment_hash:
|
||||||
raise Exception("tried to save incorrect preimage for payment_hash")
|
raise Exception("tried to save incorrect preimage for payment_hash")
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ from .json_db import StoredObject, stored_in
|
|||||||
from . import constants
|
from . import constants
|
||||||
from .address_synchronizer import TX_HEIGHT_LOCAL, TX_HEIGHT_FUTURE
|
from .address_synchronizer import TX_HEIGHT_LOCAL, TX_HEIGHT_FUTURE
|
||||||
from .fee_policy import FeePolicy
|
from .fee_policy import FeePolicy
|
||||||
from .invoices import Invoice
|
from .invoices import Invoice, PR_PAID
|
||||||
from .lnonion import OnionRoutingFailure, OnionFailureCode
|
from .lnonion import OnionRoutingFailure, OnionFailureCode
|
||||||
from .lnsweep import SweepInfo
|
from .lnsweep import SweepInfo
|
||||||
|
|
||||||
@@ -370,16 +370,22 @@ class SwapManager(Logger):
|
|||||||
self.logger.info(f'failing swap {swap.payment_hash.hex()}: {reason}')
|
self.logger.info(f'failing swap {swap.payment_hash.hex()}: {reason}')
|
||||||
if not swap.is_reverse and swap.payment_hash in self.lnworker.hold_invoice_callbacks:
|
if not swap.is_reverse and swap.payment_hash in self.lnworker.hold_invoice_callbacks:
|
||||||
self.lnworker.unregister_hold_invoice(swap.payment_hash)
|
self.lnworker.unregister_hold_invoice(swap.payment_hash)
|
||||||
payment_secret = self.lnworker.get_payment_secret(swap.payment_hash)
|
# Peer.maybe_fulfill_htlc will fail incoming htlcs if there is no payment info
|
||||||
payment_key = swap.payment_hash + payment_secret
|
self.lnworker.delete_payment_info(swap.payment_hash.hex())
|
||||||
e = OnionRoutingFailure(code=OnionFailureCode.INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS, data=b'')
|
self.lnworker.clear_invoices_cache()
|
||||||
self.lnworker.save_forwarding_failure(payment_key.hex(), failure_message=e)
|
|
||||||
self.lnwatcher.remove_callback(swap.lockup_address)
|
self.lnwatcher.remove_callback(swap.lockup_address)
|
||||||
if not swap.is_funded():
|
if not swap.is_funded():
|
||||||
with self.swaps_lock:
|
with self.swaps_lock:
|
||||||
if self._swaps.pop(swap.payment_hash.hex(), None) is None:
|
if self._swaps.pop(swap.payment_hash.hex(), None) is None:
|
||||||
self.logger.debug(f"swap {swap.payment_hash.hex()} has already been deleted.")
|
self.logger.debug(f"swap {swap.payment_hash.hex()} has already been deleted.")
|
||||||
# TODO clean-up other swaps dicts, i.e. undo _add_or_reindex_swap()
|
if swap._funding_prevout is not None:
|
||||||
|
self._swaps_by_funding_outpoint.pop(swap._funding_prevout, None)
|
||||||
|
self._swaps_by_lockup_address.pop(swap.lockup_address, None)
|
||||||
|
if swap.prepay_hash is not None:
|
||||||
|
self._prepayments.pop(swap.prepay_hash, None)
|
||||||
|
if self.lnworker.get_payment_status(swap.prepay_hash) != PR_PAID:
|
||||||
|
self.lnworker.delete_payment_info(swap.prepay_hash.hex())
|
||||||
|
self.lnworker.delete_payment_bundle(swap.payment_hash)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def extract_preimage(cls, swap: SwapData, claim_tx: Transaction) -> Optional[bytes]:
|
def extract_preimage(cls, swap: SwapData, claim_tx: Transaction) -> Optional[bytes]:
|
||||||
@@ -433,8 +439,12 @@ class SwapManager(Logger):
|
|||||||
if spent_height > 0:
|
if spent_height > 0:
|
||||||
if current_height - spent_height > REDEEM_AFTER_DOUBLE_SPENT_DELAY:
|
if current_height - spent_height > REDEEM_AFTER_DOUBLE_SPENT_DELAY:
|
||||||
self.logger.info(f'stop watching swap {swap.lockup_address}')
|
self.logger.info(f'stop watching swap {swap.lockup_address}')
|
||||||
self.lnwatcher.remove_callback(swap.lockup_address)
|
|
||||||
swap.is_redeemed = True
|
swap.is_redeemed = True
|
||||||
|
# cleanup
|
||||||
|
self.lnwatcher.remove_callback(swap.lockup_address)
|
||||||
|
if not swap.is_reverse:
|
||||||
|
self.lnworker.delete_payment_bundle(swap.payment_hash)
|
||||||
|
self.lnworker.unregister_hold_invoice(swap.payment_hash)
|
||||||
|
|
||||||
if not swap.is_reverse:
|
if not swap.is_reverse:
|
||||||
if swap.preimage is None and spent_height is not None:
|
if swap.preimage is None and spent_height is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user