Browse Source

commands: make payto/etc respect 'confirmed_only' config var

regression from 2f6d60c715

fixes https://github.com/spesmilo/electrum/issues/8693
master
SomberNight 2 years ago
parent
commit
f1c63e2d51
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 37
      electrum/tests/test_commands.py
  2. 4
      electrum/wallet.py

37
electrum/tests/test_commands.py

@ -8,7 +8,7 @@ from electrum.wallet import restore_wallet_from_text, Abstract_Wallet
from electrum.address_synchronizer import TX_HEIGHT_UNCONFIRMED
from electrum.simple_config import SimpleConfig
from electrum.transaction import Transaction, TxOutput, tx_from_any
from electrum.util import UserFacingException
from electrum.util import UserFacingException, NotEnoughFunds
from . import ElectrumTestCase
from .test_wallet_vertical import WalletIntegrityHelper
@ -236,6 +236,41 @@ class TestCommandsTestnet(ElectrumTestCase):
self.assertEqual("02000000000101a0a8800d2d6bb0a4a8b93b793f39439c4139a40d30e634cf5cd601e5391de6ed0100000000fdffffff0240e2010000000000160014810480bbaf62145abf945ebe5f657c665a3a3732462b060000000000160014a5103285eb519f826520a9f7d3227e1eaa7ec5f802473044022057a6f4b1ec63336c7d0ba233e785ec9f2e2d9c2d67617a50e069f4498ee6a3b7022032fb331e0bef06f46e9cb77bfe94413142653c4912516835e941fa7f170c1a53012103001b55f19541faaf7e6d57dd1bdb9fdc37725fc500e12f2418cc11e0aed4154978181e00",
tx_str)
@mock.patch.object(wallet.Abstract_Wallet, 'save_db')
async def test_payto__confirmed_only(self, mock_save_db):
"""test that payto respects 'confirmed_only' config var"""
wallet = restore_wallet_from_text('disagree rug lemon bean unaware square alone beach tennis exhibit fix mimic',
gap_limit=2,
path='if_this_exists_mocking_failed_648151893',
config=self.config)['wallet']
# bootstrap wallet
funding_tx = Transaction('0200000000010165806607dd458280cb57bf64a16cf4be85d053145227b98c28932e953076b8e20000000000fdffffff02ac150700000000001600147e3ddfe6232e448a8390f3073c7a3b2044fd17eb102908000000000016001427fbe3707bc57e5bb63d6f15733ec88626d8188a02473044022049ce9efbab88808720aa563e2d9bc40226389ab459c4390ea3e89465665d593502206c1c7c30a2f640af1e463e5107ee4cfc0ee22664cfae3f2606a95303b54cdef80121026269e54d06f7070c1f967eb2874ba60de550dfc327a945c98eb773672d9411fd77181e00')
funding_txid = funding_tx.txid()
self.assertEqual('ede61d39e501d65ccf34e6300da439419c43393f793bb9a8a4b06b2d0d80a8a0', funding_txid)
wallet.adb.receive_tx_callback(funding_tx, TX_HEIGHT_UNCONFIRMED)
cmds = Commands(config=self.config)
async def create_tx():
return await cmds.payto(
destination="tb1qsyzgpwa0vg2940u5t6l97etuvedr5dejpf9tdy",
amount="0.00123456",
feerate=50,
locktime=1972344,
wallet=wallet)
self.config.WALLET_SPEND_CONFIRMED_ONLY = True
with self.assertRaises(NotEnoughFunds):
tx_str = await create_tx()
self.config.WALLET_SPEND_CONFIRMED_ONLY = None # default: false
tx_str = await create_tx()
tx = tx_from_any(tx_str)
self.assertEqual(2, len(tx.outputs()))
txout = TxOutput.from_address_and_value("tb1qsyzgpwa0vg2940u5t6l97etuvedr5dejpf9tdy", 123456)
self.assertTrue(txout in tx.outputs())
@mock.patch.object(wallet.Abstract_Wallet, 'save_db')
async def test_paytomany_multiple_max_spends(self, mock_save_db):
wallet = restore_wallet_from_text('kit virtual quantum festival fortune inform ladder saddle filter soldier start ghost',

4
electrum/wallet.py

@ -974,10 +974,12 @@ class Abstract_Wallet(ABC, Logger, EventListener):
domain: Optional[Iterable[str]] = None,
*,
nonlocal_only: bool = False,
confirmed_only: bool = False,
confirmed_only: bool = None,
) -> Sequence[PartialTxInput]:
with self._freeze_lock:
frozen_addresses = self._frozen_addresses.copy()
if confirmed_only is None:
confirmed_only = self.config.WALLET_SPEND_CONFIRMED_ONLY
utxos = self.get_utxos(
domain=domain,
excluded_addresses=frozen_addresses,

Loading…
Cancel
Save