Example #1
0
        private bool VerifyBlock(BlockDetailedModel model)
        {
            foreach (var mod in model.Transactions)
            {
                mod.State = "Unverified";
            }
            var transactionHash = MerkleTree <TransactionModel> .Compute(model.Transactions.OrderBy(x => x.Id).ToList());

            var obj = new MiningBlock
            {
                Hash = transactionHash.TrimEnd('=') + model.PreviousHash.TrimEnd('='),
                PreviousBlockHash = model.PreviousHash.TrimEnd('='),
                Nonce             = model.Nonce,
                Miner             = model.Miner
            };

            using (SHA256Managed sha = new SHA256Managed())
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    ms.Position = 0;
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(ms, obj);

                    return(model.Hash == Convert.ToBase64String(sha.ComputeHash(ms.ToArray())));
                }
            }
        }
Example #2
0
        private void _txTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (_httpClient.CheckTransactionsAmount())
            {
                var transactions = _httpClient.GetUnverifiedTransactions();
                var block        = _httpClient.GetLastBlock()?.Hash ?? "0000000000";

                Block = new BlockDetailedModel
                {
                    Transactions = transactions,
                    PreviousHash = block
                };
                _txTimer.Stop();
                Task.Factory.StartNew(() => Run(), _miningTokenSource.Token);
            }
        }