/// <summary> /// Добавление нового блока с валидацией его. /// Нужно еще добавить здесь формирование транзакции с премией автору блока /// и добавлением этой транзакции в список pending transactions. /// Будет реализовано, когда определимся как и когда опустошается список pending transactions /// </summary> public void AddNewBlock() { if (IsBlockValid() && IsChainValid()) { CopyOfBlockChain.AddBlock(NewlyCreatedBlock); foreach (Transaction instance in NewlyCreatedBlock.ThisBlockTransactions) { DistrubuteMoney(instance); } } }
/// <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); }