private async Task <HashSet <string> > GetLatestInclusionStates(string hash, HashSet <string> hashes) // non-public function { if (hashes.Count == 0) { return(null); } // get a list of confirmed TXs to the given address var callerID = $"{nameof(GetLatestInclusionStates)}::{hash}"; // Get from a partial cache - list of confirmed TX hashes var cached = await FS.GetFSPartialCacheEntryAsync(call : callerID); var CachedOutput = cached == null ? new HashSet <string>() : (HashSet <string>)cached; var loadedfromcache = CachedOutput.Count(); hashes.ExceptWith(CachedOutput); // removing all hashes that were already confirmed InclusionStates res; HashSet <string> OnlyNewlyConfirmedHashes = null; if (hashes.Count > 0) // are there any non-confirmed left? { try { res = await Repo.GetLatestInclusionAsync((from h in hashes select new Hash(h)).ToList()); } catch (Exception) { throw; } OnlyNewlyConfirmedHashes = (from v in res.States where v.Value == true select v.Key.Value).ToHashSet(); if (OnlyNewlyConfirmedHashes.Count > 0) { CachedOutput.UnionWith(OnlyNewlyConfirmedHashes); // saving all back to the cache //Write to partial cache await FS.AddFSPartialCacheEntryAsync( call : callerID, result : CachedOutput); } } Logger.LogInformation("{callerID} in action. {loadedfromcache} confirmed hashes loaded from cache. {OnlyNewlyConfirmedHashes.Count} hashes were new ones.", callerID.Substring(0, 25), loadedfromcache, OnlyNewlyConfirmedHashes?.Count); //returning all from cache + new one from API call return(CachedOutput); }
public async Task <HashSet <string> > GetTransactionsByBundle(string bundleHash) { // get a list of transactions to the given address var callerID = $"{nameof(GetTransactionsByBundle)}::{bundleHash}"; // Get from a partial cache var cached = await FS.GetFSPartialCacheEntryAsync(call : callerID); HashSet <string> CachedOutput = cached == null ? new HashSet <string>() : (HashSet <string>)cached; // Get info from node TransactionHashList res; try { res = await Repo.FindTransactionsByBundlesAsync(new List <Hash>() { new Hash(bundleHash) }); } catch (Exception) { throw; } var origCnt = CachedOutput.Count; CachedOutput.UnionWith((from i in res.Hashes select i.Value).ToArray()); if (origCnt < CachedOutput.Count) // need to update the record { //Write to partial cache await FS.AddFSPartialCacheEntryAsync( call : callerID, result : CachedOutput); } Logger.LogInformation("{callerID} in action. {origCnt} transaction hashes loaded from cache. {CachedOutput.Count} hashes in total.", callerID.Substring(0, 50), origCnt, CachedOutput.Count); return(CachedOutput); }