wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes`
This method is only used in tests (as the main wallet scanning logic already uses `zcash_note_encryption` via the batch scanner).
This commit is contained in:
parent
f622549929
commit
2fd287e73b
|
@ -574,13 +574,13 @@ TEST(WalletTests, FindMySaplingNotes) {
|
|||
// No Sapling notes can be found in tx which does not belong to the wallet
|
||||
CWalletTx wtx {&wallet, tx};
|
||||
ASSERT_FALSE(wallet.HaveSaplingSpendingKey(extfvk));
|
||||
auto noteMap = wallet.FindMySaplingNotes(consensusParams, wtx, 1).first;
|
||||
auto noteMap = wallet.FindMySaplingNotes(Params(), wtx, 1).first;
|
||||
EXPECT_EQ(0, noteMap.size());
|
||||
|
||||
// Add spending key to wallet, so Sapling notes can be found
|
||||
ASSERT_TRUE(wallet.AddSaplingZKey(sk));
|
||||
ASSERT_TRUE(wallet.HaveSaplingSpendingKey(extfvk));
|
||||
noteMap = wallet.FindMySaplingNotes(consensusParams, wtx, 1).first;
|
||||
noteMap = wallet.FindMySaplingNotes(Params(), wtx, 1).first;
|
||||
EXPECT_EQ(2, noteMap.size());
|
||||
|
||||
// Revert to default
|
||||
|
@ -733,7 +733,7 @@ TEST(WalletTests, GetConflictedSaplingNotes) {
|
|||
EXPECT_EQ(0, chainActive.Height());
|
||||
|
||||
// Simulate SyncTransaction which calls AddToWalletIfInvolvingMe
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(consensusParams, wtx, 1).first;
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(Params(), wtx, 1).first;
|
||||
ASSERT_TRUE(saplingNoteData.size() > 0);
|
||||
wtx.SetSaplingNoteData(saplingNoteData);
|
||||
wtx.SetMerkleBranch(block);
|
||||
|
@ -1117,7 +1117,7 @@ TEST(WalletTests, NavigateFromSaplingNullifierToNote) {
|
|||
|
||||
// Simulate SyncTransaction which calls AddToWalletIfInvolvingMe
|
||||
wtx.SetMerkleBranch(block);
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(consensusParams, wtx, chainActive.Height()).first;
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(Params(), wtx, chainActive.Height()).first;
|
||||
ASSERT_TRUE(saplingNoteData.size() > 0);
|
||||
wtx.SetSaplingNoteData(saplingNoteData);
|
||||
wallet.LoadWalletTx(wtx);
|
||||
|
@ -1244,7 +1244,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) {
|
|||
EXPECT_TRUE(chainActive.Contains(&fakeIndex));
|
||||
EXPECT_EQ(0, chainActive.Height());
|
||||
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(consensusParams, wtx, 1).first;
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(Params(), wtx, 1).first;
|
||||
ASSERT_TRUE(saplingNoteData.size() > 0);
|
||||
wtx.SetSaplingNoteData(saplingNoteData);
|
||||
wtx.SetMerkleBranch(block);
|
||||
|
@ -1315,7 +1315,7 @@ TEST(WalletTests, SpentSaplingNoteIsFromMe) {
|
|||
EXPECT_TRUE(chainActive.Contains(&fakeIndex2));
|
||||
EXPECT_EQ(1, chainActive.Height());
|
||||
|
||||
auto saplingNoteData2 = wallet.FindMySaplingNotes(consensusParams, wtx2, 2).first;
|
||||
auto saplingNoteData2 = wallet.FindMySaplingNotes(Params(), wtx2, 2).first;
|
||||
ASSERT_TRUE(saplingNoteData2.size() > 0);
|
||||
wtx2.SetSaplingNoteData(saplingNoteData2);
|
||||
wtx2.SetMerkleBranch(block2);
|
||||
|
@ -2098,7 +2098,7 @@ TEST(WalletTests, UpdatedSaplingNoteData) {
|
|||
EXPECT_EQ(0, chainActive.Height());
|
||||
|
||||
// Simulate SyncTransaction which calls AddToWalletIfInvolvingMe
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(consensusParams, wtx, chainActive.Height()).first;
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(Params(), wtx, chainActive.Height()).first;
|
||||
ASSERT_TRUE(saplingNoteData.size() == 1); // wallet only has key for change output
|
||||
wtx.SetSaplingNoteData(saplingNoteData);
|
||||
wtx.SetMerkleBranch(block);
|
||||
|
@ -2116,7 +2116,7 @@ TEST(WalletTests, UpdatedSaplingNoteData) {
|
|||
ASSERT_TRUE(wallet.AddSaplingZKey(sk2));
|
||||
ASSERT_TRUE(wallet.HaveSaplingSpendingKey(extfvk2));
|
||||
CWalletTx wtx2 = wtx;
|
||||
auto saplingNoteData2 = wallet.FindMySaplingNotes(consensusParams, wtx2, chainActive.Height()).first;
|
||||
auto saplingNoteData2 = wallet.FindMySaplingNotes(Params(), wtx2, chainActive.Height()).first;
|
||||
ASSERT_TRUE(saplingNoteData2.size() == 2);
|
||||
wtx2.SetSaplingNoteData(saplingNoteData2);
|
||||
|
||||
|
@ -2247,7 +2247,7 @@ TEST(WalletTests, MarkAffectedSaplingTransactionsDirty) {
|
|||
EXPECT_EQ(0, chainActive.Height());
|
||||
|
||||
// Simulate SyncTransaction which calls AddToWalletIfInvolvingMe
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(consensusParams, wtx, chainActive.Height()).first;
|
||||
auto saplingNoteData = wallet.FindMySaplingNotes(Params(), wtx, chainActive.Height()).first;
|
||||
ASSERT_TRUE(saplingNoteData.size() > 0);
|
||||
wtx.SetSaplingNoteData(saplingNoteData);
|
||||
wtx.SetMerkleBranch(block);
|
||||
|
|
|
@ -3765,7 +3765,7 @@ mapSproutNoteData_t CWallet::FindMySproutNotes(const CTransaction &tx) const
|
|||
* already have been cached in CWalletTx.mapSaplingNoteData.
|
||||
*/
|
||||
std::pair<mapSaplingNoteData_t, SaplingIncomingViewingKeyMap> CWallet::FindMySaplingNotes(
|
||||
const Consensus::Params& consensus,
|
||||
const CChainParams& params,
|
||||
const CTransaction &tx,
|
||||
int height) const
|
||||
{
|
||||
|
@ -3781,21 +3781,33 @@ std::pair<mapSaplingNoteData_t, SaplingIncomingViewingKeyMap> CWallet::FindMySap
|
|||
for (auto it = mapSaplingFullViewingKeys.begin(); it != mapSaplingFullViewingKeys.end(); ++it) {
|
||||
SaplingIncomingViewingKey ivk = it->first;
|
||||
|
||||
auto result = SaplingNotePlaintext::decrypt(consensus, height, output.encCiphertext, ivk, output.ephemeralKey, output.cmu);
|
||||
if (!result) {
|
||||
try {
|
||||
auto decrypted = wallet::try_sapling_note_decryption(
|
||||
*params.RustNetwork(),
|
||||
height,
|
||||
ivk.GetRawBytes(),
|
||||
{
|
||||
output.cmu.GetRawBytes(),
|
||||
output.ephemeralKey.GetRawBytes(),
|
||||
output.encCiphertext,
|
||||
});
|
||||
|
||||
SaplingPaymentAddress address(
|
||||
decrypted->recipient_d(),
|
||||
uint256::FromRawBytes(decrypted->recipient_pk_d()));
|
||||
if (mapSaplingIncomingViewingKeys.count(address) == 0) {
|
||||
viewingKeysToAdd[address] = ivk;
|
||||
}
|
||||
// We don't cache the nullifier here as computing it requires knowledge of the note position
|
||||
// in the commitment tree, which can only be determined when the transaction has been mined.
|
||||
SaplingOutPoint op {hash, i};
|
||||
SaplingNoteData nd;
|
||||
nd.ivk = ivk;
|
||||
noteData.insert(std::make_pair(op, nd));
|
||||
break;
|
||||
} catch (const rust::Error &e) {
|
||||
continue;
|
||||
}
|
||||
auto address = ivk.address(result.value().d);
|
||||
if (address && mapSaplingIncomingViewingKeys.count(address.value()) == 0) {
|
||||
viewingKeysToAdd[address.value()] = ivk;
|
||||
}
|
||||
// We don't cache the nullifier here as computing it requires knowledge of the note position
|
||||
// in the commitment tree, which can only be determined when the transaction has been mined.
|
||||
SaplingOutPoint op {hash, i};
|
||||
SaplingNoteData nd;
|
||||
nd.ivk = ivk;
|
||||
noteData.insert(std::make_pair(op, nd));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1969,7 +1969,7 @@ public:
|
|||
uint8_t n) const;
|
||||
mapSproutNoteData_t FindMySproutNotes(const CTransaction& tx) const;
|
||||
std::pair<mapSaplingNoteData_t, SaplingIncomingViewingKeyMap> FindMySaplingNotes(
|
||||
const Consensus::Params& consensus,
|
||||
const CChainParams& params,
|
||||
const CTransaction& tx,
|
||||
int height) const;
|
||||
bool IsSproutNullifierFromMe(const uint256& nullifier) const;
|
||||
|
|
|
@ -310,7 +310,7 @@ double benchmark_try_decrypt_sapling_notes(size_t nKeys)
|
|||
|
||||
struct timeval tv_start;
|
||||
timer_start(tv_start);
|
||||
auto noteDataMapAndAddressesToAdd = wallet.FindMySaplingNotes(Params().GetConsensus(), tx, 1);
|
||||
auto noteDataMapAndAddressesToAdd = wallet.FindMySaplingNotes(Params(), tx, 1);
|
||||
assert(noteDataMapAndAddressesToAdd.first.empty());
|
||||
return timer_stop(tv_start);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue