Browse Source

fix check_for_reuse

add-joinmarket
zebra-lucky 1 year ago
parent
commit
944c19b74e
  1. 2
      electrum/plugins/joinmarket/jm_base_code.py
  2. 4
      electrum/plugins/joinmarket/jm_wallet.py
  3. 20
      electrum/plugins/joinmarket/tests/test_jm_base_code.py
  4. 8
      electrum/plugins/joinmarket/tests/test_jm_wallet.py

2
electrum/plugins/joinmarket/jm_base_code.py

@ -864,6 +864,8 @@ class JMBaseCodeMixin:
to_be_frozen = set() to_be_frozen = set()
w = self.wallet w = self.wallet
for outpoint, au in added_utxos.items(): 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] received = w.adb.get_addr_io(au.address)[0]
if len(received) > 1: if len(received) > 1:
to_be_frozen.add(outpoint) to_be_frozen.add(outpoint)

4
electrum/plugins/joinmarket/jm_wallet.py

@ -260,6 +260,10 @@ class WalletDBMixin:
if jm_address_tuple: if jm_address_tuple:
return JMAddress(*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 @wallet_db_locked
def get_jm_addresses(self, *, mixdepth=None, internal=None): def get_jm_addresses(self, *, mixdepth=None, internal=None):
addresses = {k: JMAddress(*v) for k, v in self.jm_addresses.items()} addresses = {k: JMAddress(*v) for k, v in self.jm_addresses.items()}

20
electrum/plugins/joinmarket/tests/test_jm_base_code.py

@ -479,8 +479,9 @@ class JMBaseCodeMixinTestCase(JMTestCase):
first_coin = None first_coin = None
reuse_coin = None reuse_coin = None
self.cb_called = False self.cb_called = False
addr = 'tb1qpjkqrhz3kxsg93c5cw2axhdy39wqy36u9ygzdk'
coins = w.adb.get_utxos(['tb1qpjkqrhz3kxsg93c5cw2axhdy39wqy36u9ygzdk']) coins = w.adb.get_utxos([addr])
for c in coins: for c in coins:
if c.value_sats() == 2500000: # First transaction if c.value_sats() == 2500000: # First transaction
first_coin = c first_coin = c
@ -503,6 +504,23 @@ class JMBaseCodeMixinTestCase(JMTestCase):
assert w.is_frozen_coin(reuse_coin) assert w.is_frozen_coin(reuse_coin)
assert self.cb_called 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): async def test_transaction_monitor(self):
jmw = self.jmw jmw = self.jmw
cb1, cb2, cb3, txd, txid = await self._prepare_cb1_cb2_cb3() cb1, cb2, cb3, txd, txid = await self._prepare_cb1_cb2_cb3()

8
electrum/plugins/joinmarket/tests/test_jm_wallet.py

@ -191,6 +191,14 @@ class WalletDBMixinTestCase(JMTestCase):
jm_addr = jmw.get_jm_address(addr1) jm_addr = jmw.get_jm_address(addr1)
assert jm_addr == JMAddress(mixdepth=0, branch=1, index=2) 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): async def test_get_jm_addresses(self):
jmw = self.jmman.jmw jmw = self.jmman.jmw
jmw.jm_addresses.clear() jmw.jm_addresses.clear()

Loading…
Cancel
Save