public IActionResult MineAndSaveBlock() { var lastBlockDto = _repository.TryGetLastBlock(); if (lastBlockDto == null) { throw new ApplicationException("No blocks in chain"); } var lastBlock = DtoHelpers.DtoToBlock(lastBlockDto); Miner.blockchain(1, "Adam", lastBlock) .AsQueryable() .ToList() .ForEach(SaveBlock); return(Redirect("~/Home/About")); }
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>())); }
private void SaveBlock(Types.BlockWithHash blockWithHash) { var blockDto = DtoHelpers.BlockToDto(blockWithHash); _repository.Save(blockDto); }