Ejemplo n.º 1
0
        private Tuple <bool, IList <string> > TryUploadBlock(int index,
                                                             string minedBy,
                                                             string data,
                                                             string previousHash,
                                                             int nonce,
                                                             string hash)
        {
            var lastBlock = _repository.TryGetLastBlock();

            if (lastBlock == null)
            {
                throw new ApplicationException("No blocks in blockchain");
            }

            Types.Block block = new Types.Block(
                index,
                minedBy,
                data,
                previousHash,
                nonce);

            var blockWithHash = new Types.BlockWithHash(block, hash);
            var isValidBlock  = Miner.isValidBlock(blockWithHash, DtoHelpers.DtoToBlock(lastBlock));

            if (isValidBlock.IsInvalid)
            {
                var invalid = isValidBlock as Types.IsValidBlock.Invalid;
                var errors  = invalid.Item.ToList();

                return(Tuple.Create <bool, IList <string> >(false, errors));
            }

            _repository.Save(DtoHelpers.BlockToDto(blockWithHash));

            return(Tuple.Create <bool, IList <string> >(true, new List <string>()));
        }
Ejemplo n.º 2
0
        private void SaveBlock(Types.BlockWithHash blockWithHash)
        {
            var blockDto = DtoHelpers.BlockToDto(blockWithHash);

            _repository.Save(blockDto);
        }