diff --git a/lbry/wallet/transaction.py b/lbry/wallet/transaction.py index 63549016d..371f1270b 100644 --- a/lbry/wallet/transaction.py +++ b/lbry/wallet/transaction.py @@ -838,10 +838,10 @@ class Transaction: ) if payment > cost: change = payment - cost - if change > cost_of_change and change > DUST: + change_amount = change - cost_of_change + if change_amount > DUST: change_address = await change_account.change.get_or_create_usable_address() change_hash160 = change_account.ledger.address_to_hash160(change_address) - change_amount = change - cost_of_change change_output = Output.pay_pubkey_hash(change_amount, change_hash160) change_output.is_internal_transfer = True tx.add_outputs([Output.pay_pubkey_hash(change_amount, change_hash160)]) diff --git a/tests/integration/transactions/test_transaction_commands.py b/tests/integration/transactions/test_transaction_commands.py index 609d80e8f..d85641847 100644 --- a/tests/integration/transactions/test_transaction_commands.py +++ b/tests/integration/transactions/test_transaction_commands.py @@ -5,15 +5,14 @@ class TransactionCommandsTestCase(CommandTestCase): async def test_txo_dust_prevention(self): address = await self.daemon.jsonrpc_address_unused(self.account.id) - tx = await self.account_send('9.9998758', address) + tx = await self.account_send('9.9997758', address) # dust prevention threshold not reached, small txo created self.assertEqual(2, len(tx['outputs'])) - self.assertEqual(tx['outputs'][1]['amount'], '0.0000002') - tx = await self.account_send('8.9998759', address) - # prior to dust prevention this produced a '0.0000001' change txo + self.assertEqual(tx['outputs'][1]['amount'], '0.0001002') + tx = await self.account_send('9.999706', address) # dust prevention prevented dust self.assertEqual(1, len(tx['outputs'])) - self.assertEqual(tx['outputs'][0]['amount'], '8.9998759') + self.assertEqual(tx['outputs'][0]['amount'], '9.999706') async def test_transaction_show(self): # local tx