diff options
author | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-02-10 12:56:12 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-02-10 13:04:13 +0100 |
commit | 4755037d457109a5f73a2fc508f2af53d4d87cfb (patch) | |
tree | 438816a8431fb3c65879d6fea7442a818487adc1 /test | |
parent | f55442aa81c7786c03bc4e5220c62227e2eacebc (diff) | |
parent | f11872cbf46128e22e33c3138755c4aa32e80de7 (diff) | |
download | bitcoin-4755037d457109a5f73a2fc508f2af53d4d87cfb.tar.xz |
Merge #18083: [0.19] wallet: Reset reused transactions cache
f11872cbf46128e22e33c3138755c4aa32e80de7 wallet: Reset reused transactions cache (Fabian Jahr)
Pull request description:
Backport of #17843
Required porting to pre-`WalletBatch`
ACKs for top commit:
kallewoof:
Code review ACK f11872cbf46128e22e33c3138755c4aa32e80de7
laanwj:
code review ACK f11872cbf46128e22e33c3138755c4aa32e80de7
meshcollider:
utACK f11872cbf46128e22e33c3138755c4aa32e80de7
Tree-SHA512: 5cf5f136d1eafb0783c2e6799e3675ebc50997ebb56b379d8a198ac35eb3b32f6b98656760a8b1c821eeac665eb80efb1723dd4e9eb58d2b4d45c4674499bedf
Diffstat (limited to 'test')
-rwxr-xr-x | test/functional/wallet_avoidreuse.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/test/functional/wallet_avoidreuse.py b/test/functional/wallet_avoidreuse.py index 55b30afdee..d261fe6343 100755 --- a/test/functional/wallet_avoidreuse.py +++ b/test/functional/wallet_avoidreuse.py @@ -88,7 +88,8 @@ class AvoidReuseTest(BitcoinTestFramework): self.test_fund_send_fund_send("p2sh-segwit") reset_balance(self.nodes[1], self.nodes[0].getnewaddress()) self.test_fund_send_fund_send("bech32") - + reset_balance(self.nodes[1], self.nodes[0].getnewaddress()) + self.test_getbalances_used() def test_persistence(self): '''Test that wallet files persist the avoid_reuse flag.''' @@ -248,5 +249,35 @@ class AvoidReuseTest(BitcoinTestFramework): assert_approx(self.nodes[1].getbalance(), 1, 0.001) assert_approx(self.nodes[1].getbalance(avoid_reuse=False), 11, 0.001) + def test_getbalances_used(self): + ''' + getbalances and listunspent should pick up on reused addresses + immediately, even for address reusing outputs created before the first + transaction was spending from that address + ''' + self.log.info("Test getbalances used category") + + # node under test should be completely empty + assert_equal(self.nodes[1].getbalance(avoid_reuse=False), 0) + + new_addr = self.nodes[1].getnewaddress() + ret_addr = self.nodes[0].getnewaddress() + + # send multiple transactions, reusing one address + for _ in range(11): + self.nodes[0].sendtoaddress(new_addr, 1) + + self.nodes[0].generate(1) + self.sync_all() + + # send transaction that should not use all the available outputs + # per the current coin selection algorithm + self.nodes[1].sendtoaddress(ret_addr, 5) + + # getbalances and listunspent should show the remaining outputs + # in the reused address as used/reused + assert_unspent(self.nodes[1], total_count=2, total_sum=6, reused_count=1, reused_sum=1) + assert_balances(self.nodes[1], mine={"used": 1, "trusted": 5}) + if __name__ == '__main__': AvoidReuseTest().main() |