/// <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.");
            }
        }
예제 #2
0
        /// <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), "Была нарушена корректность после добавления блока.");
            }
        }