From 944c19b74e2cf5a68b205cb99c9b32a147d8daee Mon Sep 17 00:00:00 2001 From: zebra-lucky Date: Sat, 26 Oct 2024 15:37:13 +0300 Subject: [PATCH] fix check_for_reuse --- electrum/plugins/joinmarket/jm_base_code.py | 2 ++ electrum/plugins/joinmarket/jm_wallet.py | 4 ++++ .../joinmarket/tests/test_jm_base_code.py | 20 ++++++++++++++++++- .../joinmarket/tests/test_jm_wallet.py | 8 ++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/electrum/plugins/joinmarket/jm_base_code.py b/electrum/plugins/joinmarket/jm_base_code.py index 2f6e26490..9e192f007 100644 --- a/electrum/plugins/joinmarket/jm_base_code.py +++ b/electrum/plugins/joinmarket/jm_base_code.py @@ -864,6 +864,8 @@ class JMBaseCodeMixin: to_be_frozen = set() w = self.wallet for outpoint, au in added_utxos.items(): + if not self.is_jm_address(au.address): + continue received = w.adb.get_addr_io(au.address)[0] if len(received) > 1: to_be_frozen.add(outpoint) diff --git a/electrum/plugins/joinmarket/jm_wallet.py b/electrum/plugins/joinmarket/jm_wallet.py index 9fe2d695d..88fcb34ca 100644 --- a/electrum/plugins/joinmarket/jm_wallet.py +++ b/electrum/plugins/joinmarket/jm_wallet.py @@ -260,6 +260,10 @@ class WalletDBMixin: if jm_address_tuple: return JMAddress(*jm_address_tuple) + @wallet_db_locked + def is_jm_address(self, address): + return address in self.jm_addresses + @wallet_db_locked def get_jm_addresses(self, *, mixdepth=None, internal=None): addresses = {k: JMAddress(*v) for k, v in self.jm_addresses.items()} diff --git a/electrum/plugins/joinmarket/tests/test_jm_base_code.py b/electrum/plugins/joinmarket/tests/test_jm_base_code.py index 1cc02f77e..be1fa9f06 100644 --- a/electrum/plugins/joinmarket/tests/test_jm_base_code.py +++ b/electrum/plugins/joinmarket/tests/test_jm_base_code.py @@ -479,8 +479,9 @@ class JMBaseCodeMixinTestCase(JMTestCase): first_coin = None reuse_coin = None self.cb_called = False + addr = 'tb1qpjkqrhz3kxsg93c5cw2axhdy39wqy36u9ygzdk' - coins = w.adb.get_utxos(['tb1qpjkqrhz3kxsg93c5cw2axhdy39wqy36u9ygzdk']) + coins = w.adb.get_utxos([addr]) for c in coins: if c.value_sats() == 2500000: # First transaction first_coin = c @@ -503,6 +504,23 @@ class JMBaseCodeMixinTestCase(JMTestCase): assert w.is_frozen_coin(reuse_coin) assert self.cb_called + # check no freeze for coins on address not in jm_addresses + self.cb_called = False + w.adb.remove_transaction(reuse_txid) + jmw.jm_addresses.pop(addr) + w.set_frozen_state_of_coins([reuse_coin.prevout.to_str()], False) + + w.adb.add_transaction(reuse_tx) + w.adb.add_verified_tx(reuse_txid, + TxMinedInfo(int(1e6), 10, 10, 10, 10)) + + jmw.set_autofreeze_warning_cb(autofreeze_warning_cb) + await jmw.transaction_monitor(reuse_tx, reuse_txid) + + assert not w.is_frozen_coin(first_coin) + assert not w.is_frozen_coin(reuse_coin) + assert not self.cb_called + async def test_transaction_monitor(self): jmw = self.jmw cb1, cb2, cb3, txd, txid = await self._prepare_cb1_cb2_cb3() diff --git a/electrum/plugins/joinmarket/tests/test_jm_wallet.py b/electrum/plugins/joinmarket/tests/test_jm_wallet.py index 2a4a60a56..793a044e6 100644 --- a/electrum/plugins/joinmarket/tests/test_jm_wallet.py +++ b/electrum/plugins/joinmarket/tests/test_jm_wallet.py @@ -191,6 +191,14 @@ class WalletDBMixinTestCase(JMTestCase): jm_addr = jmw.get_jm_address(addr1) assert jm_addr == JMAddress(mixdepth=0, branch=1, index=2) + async def test_is_jm_address(self): + jmw = self.jmman.jmw + addr1 = 'addr1' + addr2 = 'addr2' + jmw.jm_addresses[addr1] = (0, 1, 2) + assert jmw.is_jm_address(addr1) + assert not jmw.is_jm_address(addr2) + async def test_get_jm_addresses(self): jmw = self.jmman.jmw jmw.jm_addresses.clear()