public void Add(int height, Block block) { foreach (var spk in TrackedScriptPubKeys) { TrackIfFindRelatedTransactions(spk, height, block); } FullBlockBuffer.AddOrReplace(height, block); HashSet <uint256> notFoundTransactions = GetNotYetFoundTrackedTransactions(); HashSet <uint256> foundTransactions = new HashSet <uint256>(); foreach (var txid in notFoundTransactions) { if (block.Transactions.Any(x => x.GetHash().Equals(txid))) { foundTransactions.Add(txid); } } MerkleBlock merkleProof = foundTransactions.Count == 0 ? block.Filter() : block.Filter(foundTransactions.ToArray()); var partialBlock = new PartialBlock(height, merkleProof); foreach (var txid in foundTransactions) { foreach (var tx in block.Transactions) { if (tx.GetHash().Equals(txid)) { partialBlock.Transactions.Add(tx); } } } Chain.AddOrReplace(partialBlock.Height, partialBlock); }