Exemplo n.º 1
0
 /// <summary>
 /// Добавление нового блока с валидацией его.
 /// Нужно еще добавить здесь формирование транзакции с премией автору блока
 /// и добавлением этой транзакции в список pending transactions.
 /// Будет реализовано, когда определимся как и когда опустошается список pending transactions
 /// </summary>
 public void AddNewBlock()
 {
     if (IsBlockValid() && IsChainValid())
     {
         CopyOfBlockChain.AddBlock(NewlyCreatedBlock);
         foreach (Transaction instance in NewlyCreatedBlock.ThisBlockTransactions)
         {
             DistrubuteMoney(instance);
         }
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Метод проверки корректности нового блока по двум параметрам:
        /// - Равен ли хэш предыдущего блока предыдущему хэшу нового блока;
        /// - Соотвтествует ли хэш нового блока установленной сложности.
        /// ??? Неплохо бы еше реализовать проверку, включает ли новый блок нужный список транзакций, но
        /// ??? это будет сделано после того, как решим, как производить отсечку pending transactions
        /// </summary>
        /// <returns></returns>
        public bool IsBlockValid()
        {
            if (CopyOfBlockChain.GetLastBlock().ThisHash != NewlyCreatedBlock.PreviousHash)
            {
                return(false);
            }
            string        NewBlockHashBeginning = NewlyCreatedBlock.ThisHash.Substring(0, CopyOfBlockChain.Difficulty);
            StringBuilder sample = new StringBuilder();

            for (int i = 0; i < CopyOfBlockChain.Difficulty; i++)
            {
                sample.Append("0");
            }
            if (NewBlockHashBeginning != sample.ToString())
            {
                return(false);
            }
            return(true);
        }