Browse Source

restructure submarine_swaps._claim_swap

master
ThomasV 2 years ago
parent
commit
69a1242ea8
  1. 67
      electrum/submarine_swaps.py

67
electrum/submarine_swaps.py

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

Loading…
Cancel
Save