restructure submarine_swaps._claim_swap
This commit is contained in:
@@ -215,21 +215,25 @@ class SwapManager(Logger):
|
||||
self._add_or_reindex_swap(swap) # to update _swaps_by_funding_outpoint
|
||||
funding_conf = self.lnwatcher.adb.get_tx_height(txin.prevout.txid.hex()).conf
|
||||
spent_height = txin.spent_height
|
||||
|
||||
if swap.is_reverse and swap.preimage is None:
|
||||
if funding_conf <= 0:
|
||||
continue
|
||||
preimage = self.lnworker.get_preimage(swap.payment_hash)
|
||||
if preimage is None:
|
||||
self.invoices_to_pay.add(swap.payment_hash.hex())
|
||||
continue
|
||||
swap.preimage = preimage
|
||||
|
||||
if spent_height is not None:
|
||||
swap.spending_txid = txin.spent_txid
|
||||
if not swap.is_reverse and swap.preimage is None:
|
||||
# we need to extract the preimage, add it to lnwatcher
|
||||
#
|
||||
if spent_height > 0:
|
||||
if current_height - spent_height > REDEEM_AFTER_DOUBLE_SPENT_DELAY:
|
||||
self.logger.info(f'stop watching swap {swap.lockup_address}')
|
||||
self.lnwatcher.remove_callback(swap.lockup_address)
|
||||
swap.is_redeemed = True
|
||||
elif spent_height == TX_HEIGHT_LOCAL:
|
||||
if txin.block_height > 0 or self.wallet.config.LIGHTNING_ALLOW_INSTANT_SWAPS:
|
||||
tx = self.lnwatcher.adb.get_transaction(txin.spent_txid)
|
||||
self.logger.info(f'broadcasting tx {txin.spent_txid}')
|
||||
await self.network.broadcast_transaction(tx)
|
||||
else:
|
||||
# spending tx is in mempool
|
||||
pass
|
||||
|
||||
if not swap.is_reverse:
|
||||
if swap.preimage is None and spent_height is not None:
|
||||
# extract the preimage, add it to lnwatcher
|
||||
tx = self.lnwatcher.adb.get_transaction(txin.spent_txid)
|
||||
preimage = tx.inputs()[0].witness_elements()[1]
|
||||
if sha256(preimage) == swap.payment_hash:
|
||||
@@ -245,26 +249,23 @@ class SwapManager(Logger):
|
||||
payment_key = swap.payment_hash + payment_secret
|
||||
self.lnworker.fail_trampoline_forwarding(payment_key)
|
||||
|
||||
if spent_height > 0:
|
||||
if current_height - spent_height > REDEEM_AFTER_DOUBLE_SPENT_DELAY:
|
||||
self.logger.info(f'stop watching swap {swap.lockup_address}')
|
||||
self.lnwatcher.remove_callback(swap.lockup_address)
|
||||
swap.is_redeemed = True
|
||||
elif spent_height == TX_HEIGHT_LOCAL:
|
||||
if txin.block_height > 0 or self.wallet.config.LIGHTNING_ALLOW_INSTANT_SWAPS:
|
||||
tx = self.lnwatcher.adb.get_transaction(txin.spent_txid)
|
||||
self.logger.info(f'broadcasting tx {txin.spent_txid}')
|
||||
await self.network.broadcast_transaction(tx)
|
||||
# already in mempool
|
||||
continue
|
||||
if not swap.is_reverse and delta < 0:
|
||||
# too early for refund
|
||||
return
|
||||
#
|
||||
if swap.is_reverse and swap.preimage is None:
|
||||
self.logger.info('preimage not available yet')
|
||||
continue
|
||||
if swap.is_reverse and self.network.config.TEST_SWAPSERVER_REFUND:
|
||||
if delta < 0:
|
||||
# too early for refund
|
||||
continue
|
||||
else:
|
||||
if swap.preimage is None:
|
||||
if funding_conf <= 0:
|
||||
continue
|
||||
preimage = self.lnworker.get_preimage(swap.payment_hash)
|
||||
if preimage is None:
|
||||
self.invoices_to_pay.add(swap.payment_hash.hex())
|
||||
continue
|
||||
swap.preimage = preimage
|
||||
if self.network.config.TEST_SWAPSERVER_REFUND:
|
||||
# for testing: do not create claim tx
|
||||
continue
|
||||
|
||||
if spent_height is not None:
|
||||
continue
|
||||
try:
|
||||
tx = self._create_and_sign_claim_tx(txin=txin, swap=swap, config=self.wallet.config)
|
||||
|
||||
Reference in New Issue
Block a user