示例#1
0
        /// <summary>
        /// Создать экземпляр блока.
        /// </summary>
        /// <param name="previousBlock">Предыдущий блок.</param>
        /// <param name="data">Данные, сохраняемые в блоке.</param>
        /// <param name="algorithm">Алгоритм хеширования.</param>
        /// <param name="user"> Идентификатор пользователя, создавшего блок. </param>
        public Block(Block previousBlock, Data data, BlockchainMSSQL.User userFrom, BlockchainMSSQL.User userTo, double money, IAlgorithm algorithm = null)
        {
            #region Requires
            if (previousBlock == null)
            {
                throw new ArgumentException("Предыдущий блок не может быть равен null.", nameof(previousBlock));
            }

            if (!previousBlock.IsCorrect())
            {
                throw new ArgumentException("Предыдущий блок некорректный.", nameof(previousBlock));
            }

            if (data == null)
            {
                throw new ArgumentException("Данные не могут быть равны null.", nameof(data));
            }

            if (!data.IsCorrect())
            {
                throw new ArgumentException("Данные некорректные.", nameof(data));
            }
            #endregion

            if (algorithm != null)
            {
                _algorithm = algorithm;
            }

            Version      = 1;
            CreatedOn    = DateTime.Now.ToUniversalTime();
            PreviousHash = previousBlock.Hash;
            Data         = data;
            UserFrom     = userFrom ?? throw new ArgumentException("Пользователь не может быть равен null.", nameof(userFrom));
            UserTo       = userTo ?? throw new ArgumentException("Пользователь не может быть равен null.", nameof(userTo));
            Hash         = this.GetHash(_algorithm);
            Money        = money;

            if (!this.IsCorrect())
            {
                throw new ArgumentException("Ошибка создания блока. Блок некорректный.", nameof(Block));
            }
        }
示例#2
0
        /// <summary>
        /// Добавить блок.
        /// </summary>
        /// <param name="block"> Добавляемый блок. </param>
        private void AddBlock(Block block)
        {
            if (!block.IsCorrect())
            {
                throw new ArgumentException("Блок не корректный.", nameof(block));
            }

            // Не добавляем уже существующий блок.
            if (_blockChain.Any(b => b.Hash == block.Hash))
            {
                return;
            }

            _blockChain.Add(block);
            Session._curProvider.AddBlock(block.Version, block.CreatedOn, block.Hash, block.PreviousHash, block.Data.Content, block.UserFrom, block.UserTo, block.Money);
            //_localProvider.AddBlock(block.Version, block.CreatedOn, block.Hash, block.PreviousHash, block.Data.Content, block.UserFrom, block.UserTo);

            if (!CheckCorrect())
            {
                throw new ArgumentException("Была нарушена корректность после добавления блока.", nameof(Chain));
            }
        }