make_unsigned_transaction: pass merge_duplicate_outputs as
a parameter, because it must not be used in some contexts (e.g. tx batcher). This makes config.MERGE_DUPLICATE_OUTPUTS a GUI option
This commit is contained in:
@@ -421,6 +421,8 @@ class TxEditor(WindowModalDialog):
|
||||
_('This may result in higher transactions fees.')
|
||||
]))
|
||||
self.use_multi_change_menu.setEnabled(self.wallet.use_change)
|
||||
# fixme: some of these options (WALLET_SEND_CHANGE_TO_LIGHTNING, WALLET_MERGE_DUPLICATE_OUTPUTS)
|
||||
# only make sense when we create a new tx, and should not be visible/enabled in rbf dialog
|
||||
add_cv_action(self.config.cv.WALLET_MERGE_DUPLICATE_OUTPUTS, self.toggle_merge_duplicate_outputs)
|
||||
add_cv_action(self.config.cv.WALLET_SPEND_CONFIRMED_ONLY, self.toggle_confirmed_only)
|
||||
add_cv_action(self.config.cv.WALLET_COIN_CHOOSER_OUTPUT_ROUNDING, self.toggle_output_rounding)
|
||||
|
||||
@@ -322,6 +322,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
base_tx=base_tx,
|
||||
is_sweep=is_sweep,
|
||||
send_change_to_lightning=self.config.WALLET_SEND_CHANGE_TO_LIGHTNING,
|
||||
merge_duplicate_outputs=self.config.WALLET_MERGE_DUPLICATE_OUTPUTS,
|
||||
)
|
||||
output_values = [x.value for x in outputs]
|
||||
is_max = any(parse_max_spend(outval) for outval in output_values)
|
||||
|
||||
@@ -1828,6 +1828,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
||||
BIP69_sort: Optional[bool] = True,
|
||||
base_tx: Optional[PartialTransaction] = None,
|
||||
send_change_to_lightning: bool = False,
|
||||
merge_duplicate_outputs: bool = False,
|
||||
) -> PartialTransaction:
|
||||
"""Can raise NotEnoughFunds or NoDynamicFeeEstimates."""
|
||||
|
||||
@@ -1900,7 +1901,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
||||
old_change_addrs = []
|
||||
# change address. if empty, coin_chooser will set it
|
||||
change_addrs = self.get_change_addresses_for_new_transaction(change_addr or old_change_addrs)
|
||||
if self.config.WALLET_MERGE_DUPLICATE_OUTPUTS:
|
||||
if merge_duplicate_outputs:
|
||||
txo = transaction.merge_duplicate_tx_outputs(txo)
|
||||
tx = coin_chooser.make_tx(
|
||||
coins=coins,
|
||||
@@ -3083,6 +3084,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
||||
base_tx: Optional[PartialTransaction] = None,
|
||||
inputs: Optional[List[PartialTxInput]] = None,
|
||||
send_change_to_lightning: Optional[bool] = None,
|
||||
merge_duplicate_outputs: Optional[bool] = None,
|
||||
nonlocal_only: bool = False,
|
||||
BIP69_sort: bool = True,
|
||||
) -> PartialTransaction:
|
||||
@@ -3098,6 +3100,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
||||
change_addr=change_addr,
|
||||
base_tx=base_tx,
|
||||
send_change_to_lightning=send_change_to_lightning,
|
||||
merge_duplicate_outputs=merge_duplicate_outputs,
|
||||
rbf=rbf,
|
||||
BIP69_sort=BIP69_sort,
|
||||
)
|
||||
|
||||
@@ -2062,11 +2062,10 @@ class TestWalletSending(ElectrumTestCase):
|
||||
wallet.adb.receive_tx_callback(tx1, TX_HEIGHT_UNCONFIRMED)
|
||||
self.assertEqual((0, 298_000, 0), wallet.get_balance())
|
||||
|
||||
wallet.config.WALLET_MERGE_DUPLICATE_OUTPUTS = True
|
||||
# second payment to dest_addr (merged)
|
||||
outputs2 = [PartialTxOutput.from_address_and_value(dest_addr, 100_000)]
|
||||
coins = wallet.get_spendable_coins(domain=None)
|
||||
tx2 = wallet.make_unsigned_transaction(coins=coins, outputs=outputs2, fee_policy=FixedFeePolicy(3000), base_tx=tx1)
|
||||
tx2 = wallet.make_unsigned_transaction(coins=coins, outputs=outputs2, fee_policy=FixedFeePolicy(3000), base_tx=tx1, merge_duplicate_outputs=True)
|
||||
tx2.set_rbf(True)
|
||||
tx2.locktime = 2534850
|
||||
tx2.version = 2
|
||||
@@ -2081,7 +2080,6 @@ class TestWalletSending(ElectrumTestCase):
|
||||
wallet.adb.receive_tx_callback(tx1, TX_HEIGHT_UNCONFIRMED)
|
||||
self.assertEqual((0, 298_000, 0), wallet.get_balance())
|
||||
|
||||
wallet.config.WALLET_MERGE_DUPLICATE_OUTPUTS = False
|
||||
# second payment to dest_addr (not merged, just duplicate outputs)
|
||||
outputs2 = [PartialTxOutput.from_address_and_value(dest_addr, 100_000)]
|
||||
coins = wallet.get_spendable_coins(domain=None)
|
||||
|
||||
Reference in New Issue
Block a user