/// <summary> /// Add block to local chain and database. /// </summary> public void AddBlock(Block block) { if (block == null) { throw new ArgumentNullException("block"); } if (!block.IsCorrect()) { throw new MethodArgumentException("block", "The block is invalid."); } // Do not add an existing block if (fDataProvider.FindBlock(block.Hash) != null) { return; } fDataProvider.AddBlock(block); if (!CheckCorrect()) { throw new MethodResultException("BlockchainNode", "The correctness was violated after adding the block."); } }
/// <summary> /// Добавить блок. /// </summary> /// <param name="block"> Добавляемый блок. </param> private void AddBlock(Block block) { if (!block.IsCorrect()) { throw new MethodRequiresException(nameof(block), "Блок не корректный."); } // Не добавляем уже существующий блок. if (_blockChain.Any(b => b.Hash == block.Hash)) { return; } // TODO: Реализовать транзакцию. _blockChain.Add(block); _dataProvider.AddBlock(block.Version, block.CreatedOn, block.Hash, block.PreviousHash, block.Data.GetJson(), block.User.GetJson()); AddDataInList(block); SendBlockToGlobalChain(block); if (!CheckCorrect()) { throw new MethodResultException(nameof(Chain), "Была нарушена корректность после добавления блока."); } }