/// <summary> /// Метод, майнит блок, подтверждает его у соседа и у себя и если подтвержден, то добавит блок /// в предварительный список блоков блокчейна для последующего выбора /// блока, который будет присоединен (на основании времени майнинга) /// </summary> public void AddConfirmedBlockToPendingBlocks() { Block newBlock = MineBlock(); if (newBlock != null) { PeerNode.ValidateBlock(newBlock); ValidateBlock(newBlock); if (newBlock.ConfirmationsCount > 1) { newBlock.IsConfirmed = true; } if (newBlock.IsConfirmed) { PendingConfirmedBlocks.Add(newBlock); PeerNode.PendingConfirmedBlocks.Add(newBlock); } } }
/// <summary> /// Метод, который выберет самый давний по времени создания блок из пендинг /// добавит его в блокчейн и распределит деньги по счетам, /// а также синхронизирует эти операции с соседом /// </summary> public void SelectAndAddBlockToBlockChain() { if (PendingConfirmedBlocks.Count > 0) { int index = -1; long earliestCreationTime = DateTime.UtcNow.Ticks; for (int i = 0; i < PendingConfirmedBlocks.Count; i++) { if (PendingConfirmedBlocks[i].Timestamp < earliestCreationTime) { earliestCreationTime = PendingConfirmedBlocks[i].Timestamp; index = i; } } GeneralValidator.NewlyCreatedBlock = PendingConfirmedBlocks[index]; PeerNode.GeneralValidator.NewlyCreatedBlock = PeerNode.PendingConfirmedBlocks[index]; PendingConfirmedBlocks.Clear(); PeerNode.PendingConfirmedBlocks.Clear(); GeneralValidator.AddNewBlock(); PeerNode.GeneralValidator.AddNewBlock(); } }