|
|
@ -334,10 +334,12 @@ void CCoinsViewCache::PopAnchor(const uint256 &newrt, ShieldedType type) { |
|
|
|
} |
|
|
|
|
|
|
|
void CCoinsViewCache::SetNullifiers(const CTransaction& tx, bool spent) { |
|
|
|
LogPrintf("%s: spent=%d\n", __FUNCTION__, spent); |
|
|
|
for (const SpendDescription &spendDescription : tx.vShieldedSpend) { |
|
|
|
std::pair<CNullifiersMap::iterator, bool> ret = cacheSaplingNullifiers.insert(std::make_pair(spendDescription.nullifier, CNullifiersCacheEntry())); |
|
|
|
ret.first->second.entered = spent; |
|
|
|
ret.first->second.flags |= CNullifiersCacheEntry::DIRTY; |
|
|
|
LogPrintf("%s: Inserted nullifier=%s into Sapling nullifier cache\n", __FUNCTION__, spendDescription.nullifier.GetHex().c_str()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -428,6 +430,7 @@ void CCoinsViewCache::SetBestBlock(const uint256 &hashBlockIn) { |
|
|
|
|
|
|
|
void BatchWriteNullifiers(CNullifiersMap &mapNullifiers, CNullifiersMap &cacheNullifiers) |
|
|
|
{ |
|
|
|
LogPrintf("%s\n", __FUNCTION__); |
|
|
|
for (CNullifiersMap::iterator child_it = mapNullifiers.begin(); child_it != mapNullifiers.end();) { |
|
|
|
if (child_it->second.flags & CNullifiersCacheEntry::DIRTY) { // Ignore non-dirty entries (optimization).
|
|
|
|
CNullifiersMap::iterator parent_it = cacheNullifiers.find(child_it->first); |
|
|
|