Exemplo n.º 1
0
        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);
        }