From a977cfe8571ebcbf905b353a2cbe11d88ab89ed9 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Fri, 14 Jun 2024 02:34:00 +0200 Subject: [PATCH] Fix start height not being set. --- basicswap/__init__.py | 2 +- basicswap/basicswap.py | 19 +++++++++++++------ .../basicswap/extended/test_xmr_persistent.py | 2 ++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/basicswap/__init__.py b/basicswap/__init__.py index ac3f5ac..4025b51 100644 --- a/basicswap/__init__.py +++ b/basicswap/__init__.py @@ -1,3 +1,3 @@ name = "basicswap" -__version__ = "0.13.2" +__version__ = "0.13.3" diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index f756e4e..06ed4a4 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -315,6 +315,7 @@ class BasicSwap(BaseApp): self._wallet_update_timeout = self.settings.get('wallet_update_timeout', 10) self._restrict_unknown_seed_wallets = self.settings.get('restrict_unknown_seed_wallets', True) + self._max_check_loop_blocks = self.settings.get('max_check_loop_blocks', 100000) self._bid_expired_leeway = 5 @@ -1220,8 +1221,8 @@ class BasicSwap(BaseApp): chain_a_block_header = ci_from.getBlockHeaderFromHeight(bid.xmr_a_lock_tx.chain_height) chain_b_block_header = ci_to.getBlockHeaderAt(chain_a_block_header['time']) dest_script = ci_to.getPkDest(xmr_swap.pkbs) - self.addWatchedScript(ci_to.coin_type(), bid.bid_id, dest_script, TxTypes.XMR_SWAP_B_LOCK) self.setLastHeightCheckedStart(ci_to.coin_type(), chain_b_block_header['height'], session) + self.addWatchedScript(ci_to.coin_type(), bid.bid_id, dest_script, TxTypes.XMR_SWAP_B_LOCK) else: self.swaps_in_progress[bid.bid_id] = (bid, offer) @@ -1231,11 +1232,11 @@ class BasicSwap(BaseApp): self.addWatchedOutput(coin_to, bid.bid_id, bid.participate_tx.txid.hex(), bid.participate_tx.vout, BidStates.SWAP_PARTICIPATING) if ci_to.watch_blocks_for_scripts() and bid.participate_tx and bid.participate_tx.txid is None: - self.addWatchedScript(coin_to, bid.bid_id, ci_to.getScriptDest(bid.participate_tx.script), TxTypes.PTX) if bid.initiate_tx and bid.initiate_tx.chain_height: chain_a_block_header = ci_from.getBlockHeaderFromHeight(bid.initiate_tx.chain_height) chain_b_block_header = ci_to.getBlockHeaderAt(chain_a_block_header['time']) self.setLastHeightCheckedStart(coin_to, chain_b_block_header['height'], session) + self.addWatchedScript(coin_to, bid.bid_id, ci_to.getScriptDest(bid.participate_tx.script), TxTypes.PTX) if self.coin_clients[coin_from]['last_height_checked'] < 1: if bid.initiate_tx and bid.initiate_tx.chain_height: @@ -3583,13 +3584,14 @@ class BasicSwap(BaseApp): ) ci = self.ci(offer.coin_to) if ci.watch_blocks_for_scripts() is True: + chain_a_block_header = self.ci(offer.coin_from).getBlockHeaderFromHeight(bid.initiate_tx.chain_height) + chain_b_block_header = self.ci(offer.coin_to).getBlockHeaderAt(chain_a_block_header['time']) + self.setLastHeightCheckedStart(offer.coin_to, chain_b_block_header['height']) self.addWatchedScript(offer.coin_to, bid_id, ci.getScriptDest(participate_script), TxTypes.PTX) - self.setLastHeightCheckedStart(offer.coin_to, bid.initiate_tx.chain_height) # Bid saved in checkBidState def setLastHeightCheckedStart(self, coin_type, tx_height: int, session=None) -> int: - self.log.debug('setLastHeightCheckedStart {} {}'.format(Coins(coin_type).name, tx_height)) ci = self.ci(coin_type) coin_name = ci.coin_name() if tx_height < 1: @@ -3607,7 +3609,9 @@ class BasicSwap(BaseApp): cc['last_height_checked'] = tx_height cc['block_check_min_time'] = block_time self.setIntKV('block_check_min_time_' + coin_name, block_time, session) - self.log.debug('Rewind checking of %s chain to height %d', coin_name, tx_height) + self.log.debug('Rewind %s chain last height checked to %d', coin_name, tx_height) + else: + self.log.debug('Not setting %s chain last height checked to %d, leaving on %d', coin_name, tx_height, cc['last_height_checked']) return tx_height @@ -3927,8 +3931,8 @@ class BasicSwap(BaseApp): chain_b_block_header = ci_to.getBlockHeaderAt(block_time) self.log.debug('chain a block_time {}, chain b block height {}'.format(block_time, chain_b_block_header['height'])) dest_script = ci_to.getPkDest(xmr_swap.pkbs) - self.addWatchedScript(ci_to.coin_type(), bid.bid_id, dest_script, TxTypes.XMR_SWAP_B_LOCK) self.setLastHeightCheckedStart(ci_to.coin_type(), chain_b_block_header['height'], session) + self.addWatchedScript(ci_to.coin_type(), bid.bid_id, dest_script, TxTypes.XMR_SWAP_B_LOCK) if bid_changed: self.saveBidInSession(bid_id, bid, session, xmr_swap) @@ -4532,6 +4536,9 @@ class BasicSwap(BaseApp): blocks_checked += 1 if blocks_checked % 10000 == 0: self.log.debug('{} chain_blocks, last_height_checked, blocks_checked {} {} {}'.format(ci.ticker(), chain_blocks, last_height_checked, blocks_checked)) + if blocks_checked > self._max_check_loop_blocks: + self.log.debug('Hit max_check_loop_blocks for {} chain_blocks, last_height_checked {} {}'.format(ci.ticker(), chain_blocks, last_height_checked)) + break block_hash = ci.rpc('getblockhash', [last_height_checked + 1]) try: diff --git a/tests/basicswap/extended/test_xmr_persistent.py b/tests/basicswap/extended/test_xmr_persistent.py index ffd0781..b0e0084 100644 --- a/tests/basicswap/extended/test_xmr_persistent.py +++ b/tests/basicswap/extended/test_xmr_persistent.py @@ -100,6 +100,8 @@ def updateThread(cls): try: if cls.btc_addr is not None: callbtcrpc(0, 'generatetoaddress', [1, cls.btc_addr]) + if cls.ltc_addr is not None: + callltcrpc(0, 'generatetoaddress', [1, cls.ltc_addr]) except Exception as e: print('updateThread error', str(e)) cls.delay_event.wait(random.randrange(cls.update_min, cls.update_max))