diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index 2a10572..9bc14ff 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -1174,16 +1174,17 @@ class BasicSwap(BaseApp): coin_from = Coins(offer.coin_from) coin_to = Coins(offer.coin_to) + reverse_bid: bool = self.is_reverse_ads_bid(offer.coin_from) + ci_from = self.ci(offer.coin_to if reverse_bid else offer.coin_from) + ci_to = self.ci(offer.coin_from if reverse_bid else offer.coin_to) + if offer.swap_type == SwapTypes.XMR_SWAP: xmr_swap = session.query(XmrSwap).filter_by(bid_id=bid.bid_id).first() self.watchXmrSwap(bid, offer, xmr_swap, session) - if self.ci(coin_to).watch_blocks_for_scripts() and bid.xmr_a_lock_tx and bid.xmr_a_lock_tx.chain_height: + if ci_to.watch_blocks_for_scripts() and bid.xmr_a_lock_tx and bid.xmr_a_lock_tx.chain_height: if not bid.xmr_b_lock_tx or not bid.xmr_b_lock_tx.txid: - ci_from = self.ci(coin_from) - ci_to = self.ci(coin_to) chain_a_block_header = ci_from.getBlockHeaderFromHeight(bid.xmr_a_lock_tx.chain_height) - block_time = chain_a_block_header['time'] - chain_b_block_header = ci_to.getBlockHeaderAt(block_time) + 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) @@ -1195,10 +1196,12 @@ class BasicSwap(BaseApp): if bid.participate_tx and bid.participate_tx.txid: self.addWatchedOutput(coin_to, bid.bid_id, bid.participate_tx.txid.hex(), bid.participate_tx.vout, BidStates.SWAP_PARTICIPATING) - if bid.participate_tx and bid.participate_tx.txid is None: - self.addWatchedScript(coin_to, bid.bid_id, self.ci(coin_to).getScriptDest(bid.participate_tx.script), TxTypes.PTX) + 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: - self.setLastHeightCheckedStart(coin_to, bid.initiate_tx.chain_height, session) + 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) if self.coin_clients[coin_from]['last_height_checked'] < 1: if bid.initiate_tx and bid.initiate_tx.chain_height: diff --git a/basicswap/interface/dcr/dcr.py b/basicswap/interface/dcr/dcr.py index 7628100..dc20bb4 100644 --- a/basicswap/interface/dcr/dcr.py +++ b/basicswap/interface/dcr/dcr.py @@ -1432,6 +1432,9 @@ class DCRInterface(Secp256k1Interface): return {'txid': txid_hex, 'amount': 0, 'height': block_height} return None + def encodeSharedAddress(self, Kbv, Kbs): + return self.pkh_to_address(self.pkh(Kbs)) + def isTxExistsError(self, err_str: str) -> bool: return 'transaction already exists' in err_str or 'already have transaction' in err_str diff --git a/tests/basicswap/common_xmr.py b/tests/basicswap/common_xmr.py index c244bf3..a26f716 100644 --- a/tests/basicswap/common_xmr.py +++ b/tests/basicswap/common_xmr.py @@ -126,7 +126,10 @@ def run_prepare(node_id, datadir_path, bins_path, with_coins, mnemonic_in=None, with patch.object(sys, 'argv', testargs), patch('sys.stdout', new=StringIO()) as mocked_stdout: prepareSystem.main() lines = mocked_stdout.getvalue().split('\n') - mnemonic_out = lines[-4] + if mnemonic_in is None: + mnemonic_out = lines[-4] + else: + mnemonic_out = mnemonic_in with open(config_path) as fs: settings = json.load(fs)