示例#1
0
        /// <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);
                }
            }
        }
示例#2
0
 /// <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();
     }
 }