diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index 957dc4d2d..d30944954 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -875,6 +875,7 @@ TEST(wallet_tests, ClearNoteWitnessCache) { wallet.AddSpendingKey(sk); auto wtx = GetValidReceive(sk, 10, true); + auto hash = wtx.GetHash(); auto note = GetNote(sk, wtx, 0, 0); auto nullifier = note.nullifier(sk); @@ -888,6 +889,8 @@ TEST(wallet_tests, ClearNoteWitnessCache) { // Pretend we mined the tx by adding a fake witness ZCIncrementalMerkleTree tree; wtx.mapNoteData[jsoutpt].witnesses.push_front(tree.witness()); + wtx.mapNoteData[jsoutpt].witnessHeight = 1; + wallet.nWitnessCacheSize = 1; wallet.AddToWallet(wtx, true, NULL); @@ -899,6 +902,8 @@ TEST(wallet_tests, ClearNoteWitnessCache) { wallet.GetNoteWitnesses(notes, witnesses, anchor2); EXPECT_TRUE((bool) witnesses[0]); EXPECT_FALSE((bool) witnesses[1]); + EXPECT_EQ(1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight); + EXPECT_EQ(1, wallet.nWitnessCacheSize); // After clearing, we should not have a witness for either note wallet.ClearNoteWitnessCache(); @@ -906,6 +911,8 @@ TEST(wallet_tests, ClearNoteWitnessCache) { wallet.GetNoteWitnesses(notes, witnesses, anchor2); EXPECT_FALSE((bool) witnesses[0]); EXPECT_FALSE((bool) witnesses[1]); + EXPECT_EQ(-1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight); + EXPECT_EQ(0, wallet.nWitnessCacheSize); } TEST(wallet_tests, WriteWitnessCache) { diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index fe61d0e26..51ed76f3a 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -630,8 +630,10 @@ void CWallet::ClearNoteWitnessCache() for (std::pair& wtxItem : mapWallet) { for (mapNoteData_t::value_type& item : wtxItem.second.mapNoteData) { item.second.witnesses.clear(); + item.second.witnessHeight = -1; } } + nWitnessCacheSize = 0; } void CWallet::IncrementNoteWitnesses(const CBlockIndex* pindex,